首页 yabo88狗亚app 服务器 大yabo88狗亚app--任意三数字加yabo.com直达官网 存储 IT 安全 物联网 软件

云计算

云趋势频道旗下栏目: 亚搏娱乐 亚博电子游戏app 云开发 云趋势

探讨Kubernetes的不同部署策略

来源:51CTO.com ??发布时间:2019-06-03
摘要:【51CTO.com快译】众所周知,我们在开发云原生应用的过程中,往往比拼的是如何加快单位时间内,应用部署的数量与质量。而通过使用微服务的方法,开发人员能够快速设计出完全模块化的应用程序,从而让更多的团队成员得以同时向单个应用程序写入并部署各种变

【51CTO.com快译】众所周知,我们在开发云原生应用的过程中,往往比拼的是如何加快单位时间内,应用部署的数量与质量。而通过使用微服务的方法,开发人员能够快速设计出完全模块化的应用程序,从而让更多的团队成员得以同时向单个应用程序写入并部署各种变更与发布。可见,用时更短、更频繁的部署能够给企业带来以下方面的好处:

  • 缩短了上市(time-to-market)的时间。
  • 客户能够更快地使用到新的特性。
  • 客户的各种反馈能够更快地到达产品团队,同时产品团队也能更快地通过迭代来解决现有的问题。
  • 通过向生产环境成功发布更多的新特性,来鼓舞开发人员的士气。

当然更频繁的发布,也会对应用的可靠性、以及客户的体验满意度增添一些负面的影响。这就是为什么运营和DevOps团队需要共同开发出各种流程、并管理不同的部署策略,从而最小化产品和客户可能面对的风险。(更多关于CI/CD管道自动化的信息,请参见)

在本文中,我们将讨论Kubernetes的不同部署策略,其中包括滚动部署、重建、蓝绿、金丝雀、及其变种等高级方法。

部署策略

根据目标的不同,我们可以对Kubernetes采取不同的部署策略。例如:您可能需要针对某个特定环境、或是用户与客户子集进行变更,进而推出更多的测试版本;或许您想在推出某个通用功能之前,先对一部分用户开展测试。

滚动部署(Rolling Deployment)

滚动部署是对Kubernetes的一种标准化、且默认的部署方式。它虽然运行较为缓慢,但是能够一个接一个地用新版本的pod替换应用程序中旧版本的pod,而且不会产生任何集群的停机时间。

在开始取代旧的pod之前,滚动更新需要通过就绪探测器(readiness probe,请参考),来确认新的pod是否已经到位。如果存在问题的话,滚动式更新或部署就会被中断掉,以免造成整个集群的停机。因此,我们可以参照如下的YAML定义文件,来按照滚动部署的方式,将一个旧的镜像替换为新的。

  1. apiVersion:?apps/v1beta1?
  2. kind:?Deployment?
  3. metadata:?
  4. ??name:?awesomeapp?
  5. spec:?
  6. ??replicas:?3?
  7. ??template:?
  8. ????????metadata:?
  9. ???????????labels:?
  10. ?????????????app:?awesomeapp?
  11. ????????spec:?
  12. ??????????containers:?
  13. ????????????-?name:?awesomeapp?
  14. ??????????????image:?imagerepo-user/awesomeapp:new?
  15. ??????????????ports:?
  16. ????????????????-?containerPort:?8080?

如下所示,通过调整清单(manifest)文件中的各项参数,我们可以对滚动更新进行进一步的细化:

  1. spec:?
  2. ??replicas:?3?
  3. ??strategy:?
  4. ????????type:?RollingUpdate?
  5. ????????rollingUpdate:?
  6. ???????????maxSurge:?25%?
  7. ???????????maxUnavailable:?25%???
  8. ??template:?
  9. ??...?

重建(Recreate)

这是一种非常简单的部署方式,如下图所示,它直接“杀”掉所有旧的pod,并立即替换为新的pod。

其对应的标准清单文件,如下所示:

  1. spec:?
  2. ??replicas:?3?
  3. ??strategy:?
  4. ????????type:?Recreate?
  5. ??template:?
  6. ??...?

蓝/绿或红/黑部署(Blue/Green or Red/Black)