经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
最简单的 K8S 部署文件编写姿势,没有之一!
来源:cnblogs  作者:Kevin Wan  时间:2020/12/14 17:25:23  对本文有异议

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 文件如下:

    1. apiVersion: apps/v1
    2. kind: Deployment
    3. metadata:
    4. name: redis
    5. namespace: adhoc
    6. labels:
    7. app: redis
    8. spec:
    9. replicas: 3
    10. revisionHistoryLimit: 5
    11. selector:
    12. matchLabels:
    13. app: redis
    14. template:
    15. metadata:
    16. labels:
    17. app: redis
    18. spec:
    19. containers:
    20. - name: redis
    21. image: redis:6-alpine
    22. lifecycle:
    23. preStop:
    24. exec:
    25. command: ["sh","-c","sleep 5"]
    26. ports:
    27. - containerPort: 6379
    28. readinessProbe:
    29. tcpSocket:
    30. port: 6379
    31. initialDelaySeconds: 5
    32. periodSeconds: 10
    33. livenessProbe:
    34. tcpSocket:
    35. port: 6379
    36. initialDelaySeconds: 15
    37. periodSeconds: 20
    38. resources:
    39. requests:
    40. cpu: 500m
    41. memory: 512Mi
    42. limits:
    43. cpu: 1000m
    44. memory: 1024Mi
    45. volumeMounts:
    46. - name: timezone
    47. mountPath: /etc/localtime
    48. volumes:
    49. - name: timezone
    50. hostPath:
    51. path: /usr/share/zoneinfo/Asia/Shanghai
    52. ---
    53. apiVersion: v1
    54. kind: Service
    55. metadata:
    56. name: redis-svc
    57. namespace: adhoc
    58. spec:
    59. ports:
    60. - port: 6379
    61. selector:
    62. app: redis
    63. ---
    64. apiVersion: autoscaling/v2beta1
    65. kind: HorizontalPodAutoscaler
    66. metadata:
    67. name: redis-hpa-c
    68. namespace: adhoc
    69. labels:
    70. app: redis-hpa-c
    71. spec:
    72. scaleTargetRef:
    73. apiVersion: apps/v1
    74. kind: Deployment
    75. name: redis
    76. minReplicas: 3
    77. maxReplicas: 10
    78. metrics:
    79. - type: Resource
    80. resource:
    81. name: cpu
    82. targetAverageUtilization: 80
    83. ---
    84. apiVersion: autoscaling/v2beta1
    85. kind: HorizontalPodAutoscaler
    86. metadata:
    87. name: redis-hpa-m
    88. namespace: adhoc
    89. labels:
    90. app: redis-hpa-m
    91. spec:
    92. scaleTargetRef:
    93. apiVersion: apps/v1
    94. kind: Deployment
    95. name: redis
    96. minReplicas: 3
    97. maxReplicas: 10
    98. metrics:
    99. - type: Resource
    100. resource:
    101. name: memory
    102. targetAverageUtilization: 80
  • 部署服务,如果 adhoc namespace不存在的话,请先通过 kubectl create namespace adhoc 创建

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

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

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

4. 总结

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

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

5. 项目地址

https://github.com/tal-tech/go-zero

项目地址:
https://github.com/tal-tech/go-zero

原文链接:http://www.cnblogs.com/kevinwan/p/14131483.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号