速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

高级 Kubernetes 部署策略

  • 2022-02-07
  • 本文字数:3653 字

    阅读完需:约 12 分钟

高级Kubernetes部署策略

在现代技术领域,Kubernetes 是一个采用非常广泛的平台。它让组织能够大规模部署和管理应用程序。这一容器编排平台简化了基于微服务的应用程序的基础架构配置工作,并通过模块化设计实现了高效的负载管理。Kubernetes 支持各种部署资源,以帮助运维人员使用更新和版本控制来实现 CI/CD 管道。虽然 Kubernetes 提供了滚动更新作为默认部署策略,但一些用例需要非常规方法来部署或更新集群服务。

 

本文回顾了 Kubernetes 部署中的几个概念,并深入探讨了各种高级 Kubernetes 部署策略、优缺点和用例。

Kubernetes 部署概念

Kubernetes 使用部署资源,以声明方式更新应用程序。通过部署,集群管理员定义应用程序的生命周期,定义应用程序执行相关更新的方式。Kubernetes 部署提供了一种自动化方式来实现和维护集群对象和应用程序所需的状态。Kubernetes 后端无需人工干预即可管理部署过程,提供了一种安全且可重复的方式来执行应用程序更新工作。

 

Kubernetes 部署允许集群管理员:

 

  • 部署 pod 或副本集

  • 更新副本集和 pod

  • 回滚到早期版本

  • 暂停/继续部署

  • 扩展部署

 

以下部分将探讨 Kubernetes 如何简化容器化应用程序的更新过程,以及它如何解决持续交付的挑战。

Kubernetes 对象

Kubernetes 利用许多负载资源对象,将它们作为持久实体来管理集群状态。Kubernetes API 使用 Deployment、ReplicaSet、StatefulSet 和 DaemonSet 资源对应用程序进行声明式更新。

部署

Deployment(部署)是一种 Kubernetes 资源,用于定义和识别应用程序的所需状态。集群管理员在部署的 YAML 文件中描述了所需的状态,部署控制器使用该文件将实际状态逐渐更改为所需的状态。为了确保高可用性,部署控制器还不断对过程进行监控,并用健康的集群节点和 pod 替换失败的集群节点和 pod。

副本集

ReplicaSet(副本集)用于维护特定数量的 pod,以确保高可用性。ReplicaSet 的清单(manifest)文件包括以下字段:

 

  • 用于识别属于该集合的 pod 有哪些的选择器(selector)

  • 副本数,表示集合中应该有多少个 pod

  • 一个 pod 模板,用于显示新 pod 应创建哪些数据以满足 ReplicaSet 的标准

有状态集

StatefulSet(有状态集)对象管理有状态应用程序中 pod 的部署和扩展。该资源基于相同的容器规范管理 pod,然后确保一组 pod 的适当排序和唯一性。StatefulSet 的持久 pod 标识符让集群管理员能够将其负载连接到具有可用性保证的持久存储卷。

守护程序集

DaemonSets(守护程序集)确保一组节点运行一个 pod 副本,从而帮助维护应用程序部署。 DaemonSet 资源主要用于管理各种代理的部署和生命周期,例如:

 

  • 每个节点上的集群存储代理

  • 日志收集守护进程

  • 节点监控守护进程

 

可以在此处找到有关各种 Kubernetes 负载资源列表的详细信息。

使用部署进行更新

Kubernetes 部署提供了一种可预测的方法来启动和停止 pod。这些资源让管理人员可以更轻松地迭代和自主部署、回滚更改和管理软件发布周期。Kubernetes 提供了各种部署策略来实现更小、更频繁的更新,因为它们提供了以下好处:

 

  • 更快的客户反馈以获得更好的特性优化

  • 缩短上市时间

  • 提高 DevOps 团队的生产力

 

默认情况下,Kubernetes 提供滚动更新作为标准部署策略,该策略每次用一个新版本替换一个 pod,以避免集群停机。除此之外,根据特性的目标和类型,Kubernetes 还支持各种高级部署策略——包括蓝绿、金丝雀和 A/B 部署。

 

让我们仔细看看这些策略分别提供了什么内容以及它们之间的区别。

Kubernetes 部署的高级策略

Kubernetes 提供多种方式来发布应用程序更新和特性,具体取决于所涉及的用例和负载。在实时生产环境中,将部署配置与路由特性结合使用是非常重要的,这样更新就只会影响特定版本。这使发布团队能够在提交完整版本之前测试实时环境中更新特性的有效性。Kubernetes 支持多种高级部署策略,以便开发人员可以精确控制流向特定版本的流量。

蓝绿部署

在蓝绿策略中,应用程序的新旧实例同时部署。用户可以访问现有版本(蓝色),而新版本(绿色)可供相同数量的实例供站点可靠性工程(SRE)和 QA 团队使用。一旦 QA 团队确认绿色版本通过了所有测试要求,用户就会被重定向到新版本。这是通过更新负载均衡服务的选择器字段中的版本标签来实现的。

 

当开发人员想要避免版本控制问题时,蓝绿部署最合适。

使用蓝绿部署策略

让我们假设应用程序的第一个版本是 v1.0.0,而可用的第二个版本是 v2.0.0。

 

下面是指向第一个版本的服务:

apiVersion: v1kind: Servicemetadata:  name: darwin-service-aspec:  type: LoadBalancer  selector:    app: nginx    version: v1.0.0  ports:       - name: http         port: 80         targetPort: 80
复制代码

下面是指向第二个版本的服务:

apiVersion: v1kind: Servicemetadata:  name: darwin-service-bspec:  type: LoadBalancer  selector:    app: nginx    version: v2.0.0  ports:       - name: http         port: 80         targetPort: http
复制代码

请求的测试执行且第二个版本被许可后,第一个版本的 selector 就被改为 v2.0.0:

apiVersion: v1kind: Servicemetadata:  name: darwin-service-aspec:  type: LoadBalancer  selector:    app: nginx    version: v2.0.0  ports:       - name: http         port: 80         targetPort: http
复制代码

如果应用程序按预期运行,v1.0.0 将被丢弃。

金丝雀部署

在金丝雀策略中,一部分用户被路由到托管新版本的 pod。该子集逐渐增加,而连接到旧版本的子集则减少。该策略会对比连接到两个版本的用户子集。如果未检测到错误,则将新版本推送给其余用户。

使用金丝雀部署策略

原生 Kubernetes 金丝雀部署过程涉及以下内容:

 

  1. 通过以下方式部署运行版本 1 所需数量的副本:

 

部署第一个应用程序:

$ kubectl apply -f darwin-v1.yaml
复制代码

将其扩展到所需数量的副本:

$ kubectl scale --replicas=9 deploy darwin-v1
复制代码
  1. 部署版本 2 的一个实例:

$ kubectl apply -f darwin-v2.yaml
复制代码
  1. 如第二个版本成功部署,则对其进行测试:

$ service=$(minikube service darwin --url)$ while sleep 0.1; do curl "$service"; done
复制代码
  1. 如果部署成功,扩展版本 2 的实例数量:

$ kubectl scale --replicas=10 deploy darwin-v2
复制代码
  1. 当所有副本上线后,就可以优雅地删除第一个版本:

$ kubectl delete deploy darwin-v1
复制代码

A/B 部署

通过 A/B 部署,管理员可以将特定的用户子集路由到具有一些限制和/或条件的较新版本上。这些部署主要用于评估用户群对某些特性的响应。A/B 部署也被称为“暗启动”,因为用户在测试期间不了解应用包含哪些新特性。

使用 A/B 部署策略

以下是使用Istio服务网格执行 A/B 测试的方法,能够使用流量权重推送不同版本:

 

  1. 假设集群上已经安装了 Istio,第一步是部署两个版本的应用:

$ kubectl apply -f darwin-v1.yaml -f darwin-v2.yaml
复制代码
  1. 然后可以通过 Istio 网关公开这些版本,使用以下命令将请求匹配到第一个服务:

$ kubectl apply -f ./gateway.yaml -f ./virtualservice.yaml
复制代码
  1. 然后可以使用以下命令根据权重应用 Istio VirtualService 规则:

$ kubectl apply -f ./virtualservice-weight.yaml
复制代码

这会以 1:10 的比例在版本之间分配流量权重。要转移流量权重,可编辑每个服务的权重,然后通过 Kubernetes CLI 更新 VirtualService 规则。

何时使用每种高级部署策略

由于 Kubernetes 用例因可用性要求、预算限制、可用资源和其他考虑因素而异,因此没有一种万能的部署策略。在选择正确的部署策略时,需要考虑以下几点:

对比 Kubernetes 部署策略

蓝绿策略

  • 特点:专注于渐进式交付,这对于在应用程序后端测试特性是非常重要的。

  • 优点:实现即时推送和回滚;允许管理员在一次升级中更改整个集群的状态;消除版本控制问题。

  • 缺点:在生产发布之前需要两倍数量的资源和适当的平台测试。

金丝雀策略

  • 特点:在用户仍在运行旧版本的实例时测试新版本;被认为是避免 API 版本控制问题的最佳选择。

  • 优点:通过错误率对比可方便监控性能表现;实现快速回滚;包含用户体验测试。

  • 缺点:微调流量分布的成本很高;推送速度较慢。

A/B 策略

  • 特点:向用户提供新旧应用程序版本,然后对比它们的体验;主要用于前端部署和 QA 测试流程不足的情况。

  • 优点:允许多个版本并行运行;实现性能监控。

  • 缺点:导致部署缓慢;带来了代价高昂的流量均衡。

总结

Kubernetes 对象是该技术的核心功能之一,可快速交付应用程序更新和特性。借助部署资源,Kubernetes 管理员可以建立一个高效的版本控制系统来管理各个版本,同时将应用程序停机时间降至最低,甚至为零。部署允许管理员更新 pod、回滚到早期版本或扩展基础架构,以支持不断增长的负载。

 

本文介绍的各项高级 Kubernetes 部署策略还让管理员能够将流量和请求路由到特定版本,从而进行实时测试和错误处理。这些策略可用于确保在管理员和开发人员完全提交更改之前,新特性能按计划工作。虽然部署资源构成了持久化应用程序状态的基础,但建议大家努力选择正确的部署策略,准备足够的回滚选项,并认真对待依赖于多个松散耦合服务的生态系统的动态特性。

资源

 

原文链接:

https://dzone.com/articles/advanced-kubernetes-deployment-strategies

2022-02-07 09:343125

评论

发布
暂无评论
发现更多内容

成长-最佳实践-程序员如何应对焦虑

南山

程序员 最佳实践 成长 焦虑

光伏逆变器在环测试解决方案

梦笔生花

光伏发电 变流器

时习知亮相华为中国合作伙伴大会2024,助力伙伴能力快速提升

平平无奇爱好科技

WorkPlus提供高效统一门户平台,助力企业信息管理与工作协同

WorkPlus

CancellationToken:程序员必读的悬空指针灾难案例

CnosDB

开源 时序数据库 tsdb CnosDB

All to MP3 Audio Converter for Mac(mp3音频格式转换器) v5.2.0直装版

iMac小白

WorkPlus一站式的企业IM系统,推动企业协作与创新发展

WorkPlus

WorkPlus AI助理,为企业提供智能化客户服务,助力企业发展与竞争力

WorkPlus

【分布式技术】分布式锁和ID

L L

分布式技术 Java 技术栈

释放预测分析的力量:企业的未来体验之旅

智达方通

企业管理 财务分析 预算管理 预测分析 财务预测

WorkPlus一站式IM即时通讯解决方案,提升企业沟通效率与协作能力

WorkPlus

私有化视频会议的重要性与优势,WorkPlus Meet助您安全高效沟通

WorkPlus

Airfoil 5 for mac(高品质音乐播放器) v5.12.0激活版

iMac小白

Cookie for Mac(浏览器缓存清理工具) v7.2.6免激活版

iMac小白

4K YouTube to MP3 for Mac(在线视频转Mp3软件) v5.2.1中文激活版

iMac小白

Programming Abstractions in C阅读笔记:p338-p346

codists

c 数据结构与算法

ARTS 打卡第1周

AI帅辉

ARTS 打卡计划

人性的撕裂与重生

少油少糖八分饱

小说 推理小说 悬疑 绝叫

Bridge 2024 for Mac(BR) v14.0.3激活版

iMac小白

Fork for Mac(Git客户端) v2.41.1激活版

iMac小白

人生使命

南山

程序人生 成长 价值观 焦虑 使命愿景

RAW Power for Mac(强大的raw图像处理软件) v3.4.20中文激活版

iMac小白

4K Video Downloader Plus Pro for Mac(4K视频下载器) v1.5.1激活版

iMac小白

RPC 快速入门

蔡农曰

程序员 后端 软件开发

iOS自定义应用设置页面

珲少

Luminar Neo for mac(图像编辑软件) v1.18.3中文激活版

iMac小白

JetBrains pycharm pro 2023 for mac(Python编辑开发) v2023.3.5中文激活版

iMac小白

[每日秒懂] DDD落地微服务架构

dinstone

微服务 DDD

WorkPlus领先的局域网通讯软件,打造高效快捷的内部通讯平台

WorkPlus

高级Kubernetes部署策略_服务革新_Sudip Sengupta_InfoQ精选文章