k8s 上 go 服务实战: 扩容 发版更新 回滚 平滑重启

实践为主, 部分 内容/细节 略去, 详情请查看最后的资料

写在前面:

deployment replicaSet podBB那么多, show me the codeshow and run the code

环境装备

本地开发机使用的 mac, win 平台同理

mac 安装 k8s:

更多 k8s 开发环境准备:

继续之前, 请确保自己已经了解 k8s 的基础知识

推荐教程:

go 服务代码准备

//health_check

go 镜像准备

号称 云原生第一语言 的实力开始显露出来了: 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 pod

let's party with k8s

  • 水平扩展/收缩
版本
  • 滚动更新

简单修改下代码, 使用 alibaba cloud toolkit 更新下

再次查看: deployment 没有变, replicaSet 新增, pod 更新为新的 3 个

到这里, 也可以猜到, 如果回滚, 就是回到上一个 replicaSet

kubectl rollout undo  deployment my-go-app --to-revision=1

Deployment 会保证服务的连续性,确保滚动一定有 pod 可用, 从而保证服务可用, 这样就保证了服务能平滑更新

同时, 可以通过 deployment spec 来设置滚动更新策略:

写在最后

我是 dayday, 读书写作敲代码, 永远在路上