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/v1kind: Deploymentmetadata: name: redis namespace: adhoc labels: app: redisspec: 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: v1kind: Servicemetadata: name: redis-svc namespace: adhocspec: ports: - port: 6379 selector: app: redis---apiVersion: autoscaling/v2beta1kind: HorizontalPodAutoscalermetadata: name: redis-hpa-c namespace: adhoc labels: app: redis-hpa-cspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: redis minReplicas: 3 maxReplicas: 10 metrics: - type: Resource resource: name: cpu targetAverageUtilization: 80---apiVersion: autoscaling/v2beta1kind: HorizontalPodAutoscalermetadata: name: redis-hpa-m namespace: adhoc labels: app: redis-hpa-mspec: 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.yamldeployment.apps/redis createdservice/redis-svc createdhorizontalpodautoscaler.autoscaling/redis-hpa-c createdhorizontalpodautoscaler.autoscaling/redis-hpa-m created
查看服务容许状态
$ kubectl get all -n adhocNAME READY STATUS RESTARTS AGEpod/redis-585bc66876-5ph26 1/1 Running 0 6m5spod/redis-585bc66876-bfqxz 1/1 Running 0 6m5spod/redis-585bc66876-vvfc9 1/1 Running 0 6m5sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/redis-svc ClusterIP 172.24.15.8 <none> 6379/TCP 6m5sNAME READY UP-TO-DATE AVAILABLE AGEdeployment.apps/redis 3/3 3 3 6m6sNAME DESIRED CURRENT READY AGEreplicaset.apps/redis-585bc66876 3 3 3 6m6sNAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEhorizontalpodautoscaler.autoscaling/redis-hpa-c Deployment/redis 0%/80% 3 10 3 6m6shorizontalpodautoscaler.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-svcredis-svc:6379> set go-zero greatOKredis-svc:6379> get go-zero"great"
4. 总结
goctl
工具极大简化了 K8S yaml 文件的编写,提供了开箱即用的最佳实际,并且反对了模板自定义。
如果感觉文章有帮忙,欢送 star ????
5. 我的项目地址
https://github.com/tal-tech/go-zero
我的项目地址:
https://github.com/tal-tech/go-zero