探讨Kubernetes的不同部署策略

探讨Kubernetes的不同部署策略

译文
作者:陈峻编译 2019-06-03 09:00:25

云计算

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

【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)

在蓝/绿(有时也被称为红/黑)部署策略中,旧版本的应用程序(简称为绿)和其对应的新版本(蓝)同时被部署到生产环境中。如下图所示,对于一般用户而言,他们只能访问到绿版本;而QA团队则可以通过单独的服务、或直接的端口转发,来对蓝版本进行自动化的测试。

  1. apiVersion: apps/v1beta1 
  2. kind: Deployment 
  3. metadata: 
  4.   name: awesomeapp-02 
  5. spec: 
  6.   template: 
  7.         metadata: 
  8.            labels: 
  9.              app: awesomeapp 
  10.              version: "02" 

因此,直到新的版本已经完全通过了测试、并得到了签发确认之后,面对用户的服务才被切换到蓝版本之上,而旧的绿版本也才最终“退役”: 

  1. apiVersion: v1 
  2. kind: Service 
  3. metadata: 
  4.   name: awesomeapp 
  5. spec: 
  6.   selector: 
  7.     app: awesomeapp 
  8.     version: "02" 
  9. ... 

金丝雀(Canary)

金丝雀部署有点类似于蓝/绿部署,但是它更加受控,因此其使用范围也更加广泛。金丝雀部署类型的主要特点是采用了分段式递进交付模式(progressive delivery,请参见)。目前,包括:暗发布(dark launches)和A/B测试在内的许多策略都属于此类。

当您想测试一些新的特性时,通常可以对自己的应用后端采用该金丝雀的部署方式。在此,您可以准备两套几乎相同的服务器:延用原有功能的那一套,面向所有用户;而部署了新功能的另一套,则仅向一小部分用户开放。通过运行效果的比较,当不再出现任何报告错误时,新版本就可以被逐步“滚动”到生产系统架构的其余部分之中。

虽然此类策略可以通过使用Kubernetes的相关资源,来实现新旧Pod的替换,但是人们通常会使用Istio之类的服务网(service mesh),来更为方便轻松地予以实现。

如下例所示,您可以将两种不同的清单放入Git,将其中的一个GA(GitApp)标记为0.1.0,而将另一个金丝雀版本标记为0.2.0。在Istio虚拟网关的清单文件中,我们通过修改不同的权重,来管理针对这两种部署的流量百分比配额。

有关如何使用Istio来实现金丝雀的分步部署,请参见《在GitOps工作流中使用Istio》教程。

用Weaveworks Flagger进行金丝雀部署

另一个简单有效地管理金丝雀部署的方法是使用Weaveworks Flagger(请参见)

Flagger能够促进金丝雀部署的自动化。它使用Istio或APP Mesh来路由和转移流量,并且用到了Prometheus metrics的金丝雀分析。另外,金丝雀分析也可以针对各种验收测试、负载测试、以及其他类型的自定义验证,进行WebHook的扩展。

Flagger采用了Kubernetes部署,并选用HPA(horizontal pod autoscaler)来创建一系列对象(包括:Kubernetes部署、ClusterIP服务、Istio与APP Mesh虚拟服务),进而驱动金丝雀式的分析与推送。

通过实施控制环路,Flagger会持续观测诸如HTTP请求成功率、请求平均时长、以及Pod健康性等关键性能指标,并逐步将流量转移到金丝雀的服务中。同时,我们可以通过对KPI的分析,来获悉金丝雀服务水平的提升与下降,进而将分析结果发布到Slack上。有关此方面的详述与范例,请参见《APP Mesh的递进式交付》。

暗部署与A/B部署

暗部署是金丝雀的另一个变种。它和金丝雀之间的区别在于:暗部署多被用于处理前端,而金丝雀常被用到后端。

暗部署的另一个名称叫A/B测试。为了测试某种新的功能,我们可能需要在用户不知情的前提下选取一小部分用户,予以部署和推送,这就是所谓的“暗”部署。

通过使用特征切换和其他类型的工具,您可以获悉用户是如何与新特性进行交互的。籍此,您可以判断是否要将该特性正式推送给用户,发现新的UI是否出现了混乱状况,以及其他类型的参数指标。

Flagger和A/B部署

其实除了加权路由,Flagger还能够在基于HTTP的各种匹配条件下,将访问流量路由到金丝雀服务之中。例如,在A/B测试场景中,您可以使用各种HTTP头或Cookie,来针对某一部分的用户进行路由转发。显然,这对于那些需要进行会话关联的前端应用来说,是特别实用的。当然具体内容,您可以去参考Flagger的相关文档。

原文标题:Kubernetes Deployment Strategies,作者:Anita Buehrle

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/288859.html<

(0)
管理的头像管理
上一篇2025-05-16 12:46
下一篇 2025-05-16 12:48

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注