Kubernetes的部署策略,你常用哪种?

https://www.sohu.com/a/318731931_100159565?spm=smpc.author.fd-d.78.1574127778732l07n8g2
2019-06-05 16:15

确定哪种Kubernetes部署方法最适合不断的推出,而不会影响用户的更新。当今开发云原生应用的最大挑战之一是加快部署的速度。通过微服务方法,开发人员已经开始使用并设计完全模块化的应用,允许多个团队同时编写和部署更改到应用去。

更短和更频繁的部署提供了以下优势:

  • 缩短产品上市时间。
  • 客户可以更快地利用功能。
  • 客户反馈更快地流回产品团队,这意味着团队可以迭代功能并更快地解决问题。
  • 提升开发人员状态,生产中具有更多功能。

但随着更频繁的发布,对应用可靠性或客户体验产生负面影响的可能性也会增加。这就是为什么DevOps团队必须开发流程和管理部署策略,以最大限度地降低产品和客户风险的原因。

以下,一起讨论Kubernetes的部署策略,包括滚动部署和更高级的方法,如金丝雀及其变体。

部署策略

根据你的目标,可以利用几种不同类型的部署策略。例如,可能需要将更改推广到特定环境以进行更多测试,或者是用户/客户的子集,或者你可能需要在创建“一般可用”功能之前进行一些用户测试。

滚动部署

滚动部署是Kubernetes的标准默认部署。它逐个缓慢地工作,使用新版本的pod替换以前版本的应用的pod,而不会导致任何集群停机。

在开始缩小旧容器之前,滚动更新会通过准备探针等待新的pod就绪。如果出现问题,可以中止滚动更新或部署,而无需关闭整个集群。在此类部署的YAML定义文件中,新镜像将替换旧镜像。

通过调整清单文件中的参数,可以进一步细化滚动更新:

重新创建

在这种非常简单的部署中,所有旧的pod都被一次性杀死,并且用新的pod一次全部替换。

这个清单看起来像这样:

蓝/绿(或红/黑)部署

在蓝/绿部署策略(有时称为红/黑)中,旧版本的应用(绿色)和新版本(蓝色)同时部署。当部署这两个用户时,用户只能访问绿色,而蓝色可供QA团队在单独的服务上进行测试自动化或通过直接端口转发。

在测试新版本并签署发布后,该服务将切换为蓝色版本,旧版绿色版本将按比例缩小:

金丝雀部署

金丝雀部署有点像蓝/绿部署,但更受控制并使用更“ 渐进式交付 ”的分阶段方法。有许多策略属于金丝雀的保护范围,包括灰度发布或A/B测试。

当你想要测试一些新功能时,通常在应用程序的后端使用金丝雀。传统上,你可能拥有两个几乎完全相同的服务器:一个用于所有用户,另一个用新功能推送到一部分用户然后进行比较。如果未报告任何错误,则新版本可逐渐推广到基础架构的其余部分。

虽然可以通过替换旧的和新的pod来使用Kubernetes资源来完成此策略,但使用像Istio这样的服务网格实现此策略会更方便,更容易。

例如,你可以在Git中检查两个不同的清单:GA标记为0.1.0,金丝雀标记为0.2.0。通过更改Istio虚拟网关清单中的权重,可以管理这两个部署的流量百分比。

使用Weaveworks Flagger的金丝雀部署

管理金丝雀部署的一种简单有效的方法是使用Weaveworks Flagger。

使用Flagger,金丝雀部署的推广是自动化的。它使用Istio或App Mesh来路由和转移流量,使用Prometheus指标进行金丝雀分析。金丝雀分析还可以通过webhook进行扩展,以运行验收测试,负载测试或任何其他类型的自定义验证。

Flagger采用Kubernetes部署和可选的水平pod自动缩放器(HPA)来创建一系列对象(Kubernetes部署,ClusterIP服务和Istio或App Mesh虚拟服务),以推动金丝雀分析和推广。

通过实施控制回路,Flagger逐渐将流量转移到金丝雀,同时测量关键性能指标,如HTTP请求成功率,请求平均持续时间和pod健康状况。根据对KPI的分析,金丝雀被提升或中止,分析结果发布给Slack。

灰度部署或A/B部署

灰度部署是金丝雀的另一种变体(顺便提一下,也可以由Flagger处理)。灰度部署和金丝雀之间的区别在于,灰度部署处理前端而不是后端的功能。

灰度部署的另一个名称是A/B测试。你可以将其发布给少数用户,而不是为所有用户启动新功能。用户通常不知道他们被用作新功能的测试人员,因此称为“灰度”部署。

通过使用功能切换和其他工具,你可以监控用户与新功能的交互方式,以及是否正在转换用户,或者他们是否发现新的UI令人困惑以及其他类型的指标。

Flagger和A/B部署

除了加权路由,Flagger还可以根据HTTP匹配条件将流量路由到金丝雀。在A/B测试场景中,你将使用HTTP标头或Cookie来定位用户的特定部分。这对需要会话关联的前端应用特别有用。

Kubernetes的部署策略,你常用哪种呢?说说吧

[转帖]Kubernetes的部署策略的更多相关文章

  1. K8S学习笔记之Kubernetes 部署策略详解

    0x00 概述 在Kubernetes中有几种不同的方式发布应用,所以为了让应用在升级期间依然平稳提供服务,选择一个正确的发布策略就非常重要了. 选择正确的部署策略是要依赖于我们的业务需求的,下面我们 ...

  2. Kubernetes 部署策略详解-转载学习

    Kubernetes 部署策略详解 参考:https://www.qikqiak.com/post/k8s-deployment-strategies/ 在Kubernetes中有几种不同的方式发布应 ...

  3. [转帖]在 Kubernetes 离线部署 KubeSphere

    在 Kubernetes 离线部署 KubeSphere https://kubesphere.io/docs/v2.0/zh-CN/installation/install-ks-offline/ ...

  4. [转帖]Kubernetes及容器编排的总体介绍【译】

    Kubernetes及容器编排的总体介绍[译] 翻译自The New Stack<Kubernetes 生态环境>作者:JANAKIRAM MSV和 KRISHNAN SUBRAMANIA ...

  5. kubernetes应用部署原理

    Kubernetes应用部署模型解析(原理篇) 十多年来Google一直在生产环境中使用容器运行业务,负责管理其容器集群的系统就是Kubernetes的前身Borg.其实现在很多工作在Kubernet ...

  6. Centos下Kubernetes+Flannel部署(新)

    一.准备工作 1) 三台centos主机 k8s master: 10.11.151.97  tc-151-97 k8s node1: 10.11.151.100  tc-151-100 k8s no ...

  7. 利用Helm简化Kubernetes应用部署(2)

    目录 定义Charts  使用Helm部署Demo  Helm常用操作命令  定义Charts 回到之前的“charts”目录,我们依次进行解读并进行简单的修改. Chart.yaml 配置示例: a ...

  8. 在Kubernetes下部署Prometheus

    使用ConfigMaps管理应用配置 当使用Deployment管理和部署应用程序时,用户可以方便了对应用进行扩容或者缩容,从而产生多个Pod实例.为了 能够统一管理这些Pod的配置信息,在Kuber ...

  9. Kubernetes一键部署利器:kubeadm

    要真正发挥容器技术的实力,你就不能仅仅局限于对 Linux 容器本身的钻研和使用. 这些知识更适合作为你的技术储备,以便在需要的时候可以帮你更快的定位问题,并解决问题. 而更深入的学习容器技术的关键在 ...

随机推荐

  1. ES6 模块(八)

    在node环境中运行需要使用babel命令将ES6代码转换为ES5代码再执行相关文件使用命令直接将src目录下所有ES6代码转换ES5代码到dist目录下: $ babel src --out-dir ...

  2. 移动前端viewPort的那些事

    1.viewport简单说 一般来说,移动上的viewport都是大于浏览器窗口的,不同的设备有自己默认的viewport值(980px或1024px). 2.三个viewport的理解(layout ...

  3. 基于wince系统开发的 SQLServe Mobile数据库应用

    SQLServe Mobile数据库以前的版本是SQLServe CE,现在最新的是3.5的版本,最近用vs2008做了一个小程序,是对SQLServe Mobile数据库读写数据. 注:SQLSer ...

  4. 【转载】Gradle学习 第九章:Groovy快速入门

    转载地址:http://ask.android-studio.org/?/article/17 To build a Groovy project, you use the Groovy plugin ...

  5. Windows实时预览markdown

    1.安装Notepad++ 2.打开Notepad++菜单栏的"插件(P)",然后打开"插件管理" 3.搜索"MarkdownViewer++&quo ...

  6. 使用Git Flow规范!

    Git Flow常用的分支 Production 分支 也就是我们经常使用的Master分支,这个分支最近发布到生产环境的代码,最近发布的Release, 这个分支只能从其他分支合并,不能在这个分支直 ...

  7. shell脚本遇到问题"$'\r': command not found"

    shell脚本写得一切正常,但是一执行就报错: line: XXX "$'\r': command not found" 问题原因:文件格式问题(虽然在window和linux上选 ...

  8. Django框架(三)-- orm增删改查、Django生命周期

    一.orm介绍 1.什么是orm ORM即Object Relational Mapping,全称对象关系映射. 2.使用orm的优缺点 优点: 不用写SQL语句 开发效率高 缺点: SQL的效率低 ...

  9. c语言基础之getopt()

    getopt() #include <unistd.h> int getopt(int argc, char * const argv[], const char *optstring); ...

  10. 枚举ENUM的tostring() valueof()name()和values()用法

    从jdk5出现了枚举类后,定义一些字典值可以使用枚举类型; 枚举常用的方法是values():对枚举中的常量值进行遍历; valueof(String name) :根据名称获取枚举类中定义的常量值; ...