Knoldus博客音频 |
阅读时间: 3 分钟
Kubernetes提供了部署资源,它告诉Kubernetes应用程序的理想状态。
部署是声明性的,这意味着他们有什么要实现而不是如何实现。为了实现这种期望的状态,在引擎盖下,部署使用ReplicaSets,它进一步维护所需的pods集。
部署中的更新
使用部署,我们可以在K8s集群中实现应用程序的理想状态,但如果我们必须更新应用程序的版本,怎么办?
在这种情况下,K8s的部署有助于更新应用程序。如果没有部署,我们必须通过创建新版本的pod和删除旧版本的pod来手动更新应用程序,然后检查每件事情是否按预期工作。
部署使整个过程自动化,我们可以简单地更新所需状态的pod模板,然后把它交给K8s,在后台它将做所有必要的动作来满足新的所需状态。
如果你想回到以前的配置,你也可以轻松回到以前的部署所需状态。
部署策略
K8s部署有不同类型的策略来更新部署。每种策略在如何实现新的理想状态方面都有不同的方法。
- 滚动更新
- 重新创建
- 金丝雀
- 蓝色/绿色
滚动更新
滚动更新策略是Kubernetes使用的默认策略。
在这个部署策略中,当pod启动和运行时,会创建一个带有新版本的pod,然后将旧版本pod的连接指向新版本,逐渐替换所有旧版本的pod,更新部署。


优点
- 实施简单
- 版本推出之间没有停机时间
- 易于推出/回滚
- 方便有状态的应用,可以处理数据的再平衡
缺点
- 滚动/回滚需要时间
- 对流量没有控制
重新创建
重新创建策略,是一个全有或全无的过程。所有以前的版本的豆荚被删除,新版本的豆荚被重新创建。


优点
- 容易实现。
- 应用状态完全被更新。
缺点
- 有一个停机时间,这取决于应用程序的关闭和启动。
金丝雀
金丝雀部署是一种部署策略,它将应用程序或服务增量地发布给一个子集的用户。与其他所有的部署策略相比,金丝雀发布是风险最低的,因为有这种控制。


优点
- 为一个子集的用户发布版本
- 方便错误率和性能监控
- 快速回滚
缺点
- 展开速度慢
- 微调流量分布可能很昂贵(99%A/1%B=99个豆荚A,1个豆荚B),可能需要使用额外的工具,如Istio和Linkerd。
蓝/绿
蓝绿部署是一种部署策略,利用两个相同的环境,一个是 "蓝"(又称中转)环境,一个是 "绿"(又称生产)环境,有不同版本的应用程序或服务。
两者同时部署,在测试较新的版本后,扮演负载均衡器角色的K8s服务被更新,将流量发送到较新的版本。


优点
- 即时推出/回滚
- 避免版本问题,一次性改变整个集群的状态。
缺点
- 需要双倍的资源
- 在发布到生产之前,应该对整个平台进行适当的测试
- 处理有状态的应用程序可能比较困难
总结一下
有不同的方法来部署一个应用程序,当发布到开发/暂存环境时,重新创建或滚动更新部署通常是一个很好的选择。
当涉及到生产和没有停机时间时,选择滚动更新或蓝/绿是一个很好的选择。
如果稳定性不能保证,可能影响发布,那么选择金丝雀是一个很好的选择。这样,消费者将自己测试应用程序。
这取决于我们想如何使用部署,以及我们希望它是怎样的。
参考资料
- CNCF-Presentation-Template-K8s-Deployment.pdf
- 深入了解Kubernetes的部署策略(educative.io)
- Kubernetes部署策略(container-solutions.com)
- 部署策略介绍。蓝绿、金丝雀和更多|Harness