1. 头疼编写K8S部署文件?

  • K8S yaml 参数很多,需要边写边查?
  • 保留回滚版本数怎么设?
  • 如何探测启动成功,如何探活?
  • 如何分配和限制资源?
  • 如何设置时区?否则打印日志是GMT标准时间
  • 如何暴露服务供其它服务调用?
  • 如何根据CPU和内存使用率来配置水平伸缩?

首先,你需要知道有这些知识点,其次要把这些知识点都搞明白也不容易,再次,每次编写依然容易出错!

2. 创建服务镜像

前一篇文章 讲解了如何快速创建自己的服务镜像,不过为了演示,这篇文章我们以 redis:6-alpine 镜像为例。

3. 完整K8S部署文件编写过程

  • 首先安装 goctl 工具

    GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/tal-tech/go-zero/tools/goctl

  • 一键生成K8S部署文件

    goctl kube deploy -name redis -namespace adhoc -image redis:6-alpine -o redis.yaml -port 6379

    生成的 yaml 文件如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: redis
    namespace: adhoc
    labels:
    app: redis
    spec:
    replicas: 3
    revisionHistoryLimit: 5
    selector:
    matchLabels:
    app: redis
    template:
    metadata:
    labels:
    app: redis
    spec:
    containers:
    - name: redis
    image: redis:6-alpine
    lifecycle:
    preStop:
    exec:
    command: ["sh","-c","sleep 5"]
    ports:
    - containerPort: 6379
    readinessProbe:
    tcpSocket:
    port: 6379
    initialDelaySeconds: 5
    periodSeconds: 10
    livenessProbe:
    tcpSocket:
    port: 6379
    initialDelaySeconds: 15
    periodSeconds: 20
    resources:
    requests:
    cpu: 500m
    memory: 512Mi
    limits:
    cpu: 1000m
    memory: 1024Mi
    volumeMounts:
    - name: timezone
    mountPath: /etc/localtime
    volumes:
    - name: timezone
    hostPath:
    path: /usr/share/zoneinfo/Asia/Shanghai --- apiVersion: v1
    kind: Service
    metadata:
    name: redis-svc
    namespace: adhoc
    spec:
    ports:
    - port: 6379
    selector:
    app: redis --- apiVersion: autoscaling/v2beta1
    kind: HorizontalPodAutoscaler
    metadata:
    name: redis-hpa-c
    namespace: adhoc
    labels:
    app: redis-hpa-c
    spec:
    scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: redis
    minReplicas: 3
    maxReplicas: 10
    metrics:
    - type: Resource
    resource:
    name: cpu
    targetAverageUtilization: 80 --- apiVersion: autoscaling/v2beta1
    kind: HorizontalPodAutoscaler
    metadata:
    name: redis-hpa-m
    namespace: adhoc
    labels:
    app: redis-hpa-m
    spec:
    scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: redis
    minReplicas: 3
    maxReplicas: 10
    metrics:
    - type: Resource
    resource:
    name: memory
    targetAverageUtilization: 80
  • 部署服务,如果 adhoc namespace不存在的话,请先通过 kubectl create namespace adhoc 创建

    $ kubectl apply -f redis.yaml
    deployment.apps/redis created
    service/redis-svc created
    horizontalpodautoscaler.autoscaling/redis-hpa-c created
    horizontalpodautoscaler.autoscaling/redis-hpa-m created
  • 查看服务允许状态

    $ kubectl get all -n adhoc
    NAME READY STATUS RESTARTS AGE
    pod/redis-585bc66876-5ph26 1/1 Running 0 6m5s
    pod/redis-585bc66876-bfqxz 1/1 Running 0 6m5s
    pod/redis-585bc66876-vvfc9 1/1 Running 0 6m5s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    service/redis-svc ClusterIP 172.24.15.8 <none> 6379/TCP 6m5s NAME READY UP-TO-DATE AVAILABLE AGE
    deployment.apps/redis 3/3 3 3 6m6s NAME DESIRED CURRENT READY AGE
    replicaset.apps/redis-585bc66876 3 3 3 6m6s NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
    horizontalpodautoscaler.autoscaling/redis-hpa-c Deployment/redis 0%/80% 3 10 3 6m6s
    horizontalpodautoscaler.autoscaling/redis-hpa-m Deployment/redis 0%/80% 3 10 3 6m6s
  • 测试服务

    $ kubectl run -i --tty --rm cli --image=redis:6-alpine -n adhoc -- sh
    /data # redis-cli -h redis-svc
    redis-svc:6379> set go-zero great
    OK
    redis-svc:6379> get go-zero
    "great"

4. 总结

goctl 工具极大简化了 K8S yaml 文件的编写,提供了开箱即用的最佳实践,并且支持了模板自定义。

如果觉得文章有帮助,欢迎 star

最简单的 K8S 部署文件编写姿势,没有之一!的更多相关文章

  1. ballerina 学习二十七 项目k8s部署&& 运行

    ballerina k8s 部署和docker 都是同样的简单,编写service 添加注解就可以了 参考项目 https://ballerina.io/learn/by-guide/restful- ...

  2. linux库文件编写入门(笔记)

    linux库文件的编写 作者: laomai地址: http://blog.csdn.net/laomai 本文主要参考了如下资料⑴hcj写的"Linux静态/动态链接库的创建和使用&quo ...

  3. 使用k8s部署springboot+redis简单应用

    准备 本文将使用k8s部署一个springboot+redis应用,由于是示例,所以功能比较简单,只有设置值和获取值两个api. (1)设置值 (2)获取值 构建Web应用 (1)创建一个spring ...

  4. 一个简单的makefile文件编写

    下午闲来无聊,就打开很久没动过的linux系统想熟悉熟悉在linux上面编译代码,结果一个makefile文件搞到晚上才搞定,哈哈! 先把代码简单贴上来,就写了一个冒泡排序: sort.h: #ifn ...

  5. ROS Learning-010 beginner_Tutorials 编写简单的启动脚本文件(.launch 文件)

    ROS Indigo beginner_Tutorials-09 编写简单的启动脚本文件 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.0 ...

  6. 拥抱云原生,如何将开源项目用k8s部署?

    微信搜索[阿丸笔记],关注Java/MySQL/中间件各系列原创实战笔记,干货满满. k8s以及云原生相关概念近年来一直比较火热,阿丸最近搞了个相关项目,小结一下. 本文将重点分享阿里开源项目otte ...

  7. K8S 部署 SpringBoot 项目(一篇够用)

    现在比较多的互联网公司都在尝试将微服务迁到云上,这样的能够通过一些成熟的云容器管理平台更为方便地管理微服务集群,从而提高微服务的稳定性,同时也能较好地提升团队开发效率. 但是迁云存在一定的技术难点,今 ...

  8. 微服务从代码到k8s部署应有尽有系列(八、各种队列)

    我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...

  9. k8s部署kafka集群

    一.概述 在k8s里面部署kafka.zookeeper这种有状态的服务,不能使用deployment和RC,k8s提供了一种专门用来部署这种有状态的服务的API--statefulset,有状态简单 ...

随机推荐

  1. WPF控件库总结

    前言 在使用WPF项目的时候, 一般首要的就是对UI部分的选型, 而WPF相关的UI控件和样式库在Githu也是非常多. 关于UI的部分,可以分为二种: 对控件本身没有很大的需求, 只需要在原有的基础 ...

  2. JavaScrip_12.23

    笔记系列,零散的知识点,准备以后复习整理使用 JavaScrip - 事件DOM绑定[将函数添加到一个元素对象的属性中] 1.事件 鼠标.键盘.操作等:所有的GUI都有 onclick(单击事件) 例 ...

  3. [LeetCode题解]234. 回文链表 | 快慢指针 + 反转链表

    解题思路 找到后半部分链表,再反转.然后与前半部分链表比较 代码 /** * Definition for singly-linked list. * public class ListNode { ...

  4. SMBv3远程代码执行漏洞复现(CVE-2020-0796)

    漏洞基本信息 服务器消息块(SMB),是一个网络通信协议,用于提供共享访问到文件,打印机和串行端口的节点之间的网络上.它还提供了经过身份验证的进程间通信机制.SMB的大多数用法涉及运行Microsof ...

  5. rkhunter

    0 0 * * 0 /usr/local/bin/rkhunter -c --cronjob 定时工具

  6. vue在移动端使用alloyfinger手势库操作图片拖拽、缩放

    最近开发一个活动需要在手机上给上传的头像加上边框.装饰,需要拖拽.手势缩放边框下的头像图片,因为是vue项目,开始尝试了vue-drag-resize这个组件,对图片拖拽支持很完美,但是无法手势缩放, ...

  7. Hadoop大数据平台节点的动态增删

    环境:CentOS 7.4 (1708  DVD) 工具:MobaXterm 一. 节点的动态增加 1. 为新增加的节点(主机)配置免密码登录.使用ssh-keygen和ssh-copy-id命令(详 ...

  8. 求1-1e11内的素数个数(HDU 5901 Count primes )

    参考链接:https://blog.csdn.net/Dylan_Frank/article/details/54428481 #include <bits/stdc++.h> #defi ...

  9. mysql 优化数据类型

    1.更小的通常更好 选择不会超过范围的最小类型 2.简单就好 例如,整型比字符操作代价更低,因为字符集和校对规则(排序规则)使字符比较比整形比较更复杂. 3.尽量避免null 如果查询中包含可为nul ...

  10. EdgeConnect: Structure Guided Image Inpainting using Edge Prediction

    论文 pytorch 引言 语义分割获取边缘信息指导修复其二 存在的问题:之前方法能够生成具有有意义结构的缺失区域,但生成的区域往往模糊或边缘部分存在伪影. 提出问题:提出了一个两阶段的模型,将inp ...