k8s 上 go 服务实战: 扩容 发版更新 回滚 平滑重启
实践为主, 部分 内容/细节 略去, 详情请查看最后的资料
写在前面:
deployment replicaSet podBB那么多, show me the codeshow and run the code环境装备
本地开发机使用的 mac, win 平台同理
mac 安装 k8s:
更多 k8s 开发环境准备:
继续之前, 请确保自己已经了解 k8s 的基础知识
推荐教程:
go 服务代码准备
//health_checkgo 镜像准备
号称 云原生第一语言 的实力开始显露出来了: 2 阶段构建, 一个镜像用来便来编译, 一个镜像只包含可执行文件
本地进行测试:
k8s deployment 准备
简单理一理 k8s 中 deployment 的概念:
kubectl get deploy副本副本kubectl get replicasetsgo http server运行:
ErrImagePull我们现在缺少的步骤:
docker buildname:tagdocker hubdeployment.yamlkubectl apply这一步, 敢不敢简单点? 敢!
使用 alibaba cloud toolkit 一键部署
go-app-6fd4487dd-d4rgvdeployment replicaSet podlet's party with k8s
- 水平扩展/收缩
版本- 滚动更新
简单修改下代码, 使用 alibaba cloud toolkit 更新下
再次查看: deployment 没有变, replicaSet 新增, pod 更新为新的 3 个
到这里, 也可以猜到, 如果回滚, 就是回到上一个 replicaSet
kubectl rollout undo deployment my-go-app --to-revision=1Deployment 会保证服务的连续性,确保滚动一定有 pod 可用, 从而保证服务可用, 这样就保证了服务能平滑更新
同时, 可以通过 deployment spec 来设置滚动更新策略:
写在最后
我是 dayday, 读书写作敲代码, 永远在路上