
K8S yaml 参数很多,需要边写边查?首先,你需要知道有这些知识点,其次要把这些知识点都搞明白也不容易,再次,每次编写依然容易出错!
前一篇文章 讲解了如何快速创建自己的服务镜像,不过为了演示,这篇文章我们以 redis:6-alpine 镜像为例。
首先安装 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" goctl 工具极大简化了 K8S yaml 文件的编写,提供了开箱即用的最佳实践,并且支持了模板自定义。
如果觉得文章有帮助,欢迎 star
1 dany813 2020-12-14 09:13:47 +08:00 标题霸气啊 |
2 vhus 2020-12-14 09:15:49 +08:00 via Android 学习了,mark 一下。 |
4 Yano 2020-12-14 10:04:49 +08:00 这个文章,我在掘金、博客园、v2ex 至少看到 5 遍了, |
6 KagurazakaNyaa 2020-12-14 10:09:36 +08:00 感觉还不如直接用 helm 上一堆写好的 chart |
8 kevinwan OP @XiLingHost redis:6-alpine 只是个举例哈,你自己写的服务写 chart 是不是就复杂点了? |
9 w292614191 2020-12-14 10:37:49 +08:00 简单不是字少代码多。 而是字多代码多。 csdn 的感觉。 |
10 loveyu 2020-12-14 10:41:33 +08:00 现实情况是,要是生产环境的配置都像文中这么简单就好了。目前一个 yaml 接近 200 行,还有不断增加的趋势 |
13 kevinwan OP @julyclyde 掘金也有后端的,周末北京有个掘金的微服务专场,我本来要去讲的,可惜跟另一个分享冲突了 |
14 joesonw 2020-12-14 14:01:37 +08:00 grafana tanka |
16 kingxt 2020-12-14 20:05:38 +08:00 看起来挺样子,去试试 |
17 dayeye2006199 2020-12-15 01:16:29 +08:00 via Android 你这个可以做成 kubectl 的 plugin,可能有更多的受众 |
18 kevinwan OP @dayeye2006199 好主意 |
19 datafeng 2020-12-15 09:27:31 +08:00 违反广告法了。。。 |
21 eudore 2020-12-16 09:20:12 +08:00 不应该 helm 吗,直接 helm 生成或一键上服务,命令行和 helm 差不多的。 |
22 hantsy 2020-12-16 16:34:25 +08:00 现在不是都是用 Operater,我不大懂。感觉 DevOps 都是走 MarketPlace 路线,和 Github Actions 类似,很多东西通过市场发布复用。 |
23 dreamusername 2020-12-17 20:31:36 +08:00 伪需求,如果需要生成,必然要了解各种配置的定义,这样前方有 kustomize 与 helm 在等着你,再然后就看到了 argocd,然后发现 kubectl 都可以不用。 |
24 kevinwan OP @dreamusername 不同公司,不同场景有不同用法嘛 |