高级 Kubernetes 部署策略
admin
2024-02-06 12:28:00
0

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

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

1. Kubernetes 部署概念

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

Kubernetes 部署允许集群管理员:

  • 部署 pod 或副本集
  • 更新副本集和 pod
  • 回滚到早期版本
  • 暂停 / 继续部署
  • 扩展部署

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

2. 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 资源主要用于管理各种代理的部署和生命周期,例如:

  • 每个节点上的集群存储代理
  • 日志收集守护进程
  • 节点监控守护进程

可以在此处(https://kubernetes.io/docs/concepts/workloads/controllers/)找到有关各种 Kubernetes 负载资源列表的详细信息。

3. 使用部署进行更新

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

  • 更快的客户反馈以获得更好的特性优化
  • 缩短上市时间
  • 提高 DevOps 团队的生产力

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

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

4. Kubernetes 部署的高级策略

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

蓝绿部署

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

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

使用蓝绿部署策略

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

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

apiVersion: v1
kind: Service
metadata:name: darwin-service-a
spec:type: LoadBalancerselector:app: nginxversion: v1.0.0ports:- name: httpport: 80targetPort: 80

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

Version: v1
kind: Service
metadata:name: darwin-service-b
spec:type: LoadBalancerselector:app: nginxversion: v2.0.0ports:- name: httpport: 80targetPort: http

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

apiVersion: v1
kind: Service
metadata:name: darwin-service-a
spec:type: LoadBalancerselector:app: nginxversion: v2.0.0ports:- name: httpport: 80targetPort: http

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

金丝雀部署

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

使用金丝雀部署策略

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

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

部署第一个应用程序:

$ kubectl apply -f darwin-v1.yaml

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

$ kubectl scale --replicas=9 deploy darwin-v1

部署版本 2 的一个实例:

$ kubectl apply -f darwin-v2.yaml

如第二个版本成功部署,则对其进行测试:

$ service=$(minikube service darwin --url)$ while sleep 0.1; do curl "$service"; done

如果部署成功,扩展版本 2 的实例数量:

$ kubectl scale --replicas=10 deploy darwin-v2

当所有副本上线后,就可以优雅地删除第一个版本:

$ 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 规则。

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

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

对比 Kubernetes 部署策略

蓝绿策略

  • 特点:专注于渐进式交付,这对于在应用程序后端测试特性是非常重要的。
  • 优点:实现即时推送和回滚;允许管理员在一次升级中更改整个集群的状态;消除版本控制问题。
  • 缺点:在生产发布之前需要两倍数量的资源和适当的平台测试。

金丝雀策略

  • 特点:在用户仍在运行旧版本的实例时测试新版本;被认为是避免 API 版本控制问题的最佳选择。
  • 优点:通过错误率对比可方便监控性能表现;实现快速回滚;包含用户体验测试。
  • 缺点:微调流量分布的成本很高;推送速度较慢。

A/B 策略

  • 特点:向用户提供新旧应用程序版本,然后对比它们的体验;主要用于前端部署和 QA 测试流程不足的情况。
  • 优点:允许多个版本并行运行;实现性能监控。
  • 缺点:导致部署缓慢;带来了代价高昂的流量均衡。

6. 总 结

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

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

7. 资 源

  • 使用 kubetctl 创建部署

    (https://kubernetes.io/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/)

  • Kubernetes 部署用例

    (https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#use-case)

  • Kubernetes 部署生命周期状态

    (https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#deployment-status)

相关内容

热门资讯

智慧吴江app安卓系统,安卓系... 你知道吗?最近吴江地区掀起了一股智慧风潮,一款名为“智慧吴江app”的应用在安卓系统上大受欢迎。这款...
苹果系统听歌app安卓,跨平台... 你有没有发现,无论是走在街头还是坐在家里,音乐总是能瞬间点燃我们的心情?而在这个音乐无处不在的时代,...
安卓系统卡顿根源,性能瓶颈与优... 手机用久了是不是感觉越来越卡?是不是每次打开应用都要等半天,甚至有时候直接卡死?别急,今天就来跟你聊...
电脑系统怎么装安卓系统,电脑系... 你有没有想过,把安卓系统装在你的电脑上,是不是就像给电脑穿上了时尚的新衣呢?想象你可以在电脑上直接使...
安卓系统华为手环app,健康管... 你有没有发现,现在的生活越来越离不开智能设备了?手机、平板、手表……这些小玩意儿不仅让我们的生活变得...
switch lite刷安卓系... 你有没有想过,你的Switch Lite除了玩那些可爱的任天堂游戏,还能干些什么呢?没错,今天我要给...
想买华为但是安卓系统,尽享安卓... 最近是不是也被华为的新款手机给迷住了?看着那流畅的线条和强大的性能,是不是心动了呢?但是,一想到安卓...
怎么拷安卓系统文件,安卓系统文... 你有没有想过,手机里的那些安卓系统文件,其实就像是一扇通往手机世界的秘密通道呢?想要深入了解你的安卓...
安卓系统移植按键失灵,安卓系统... 最近你的安卓手机是不是也遇到了按键失灵的尴尬情况呢?这可真是让人头疼啊!别急,今天就来给你详细解析一...
安卓系统更新管理在哪,全面解析... 你有没有发现,你的安卓手机最近是不是总在提醒你更新系统呢?别急,别急,今天就来手把手教你,安卓系统更...
安卓系统哪里出的,从诞生地到全... 你有没有想过,我们每天离不开的安卓系统,它究竟是从哪里冒出来的呢?是不是觉得这个问题有点儿像是在问星...
最好的电脑安卓系统,最佳电脑安... 亲爱的电脑迷们,你是否在寻找一款既能满足你工作需求,又能让你畅享娱乐的电脑操作系统呢?今天,我要给你...
安卓系统保密性,守护隐私的坚实... 你知道吗?在这个信息爆炸的时代,保护个人隐私变得比以往任何时候都重要。尤其是对于安卓系统用户来说,了...
苹果系统下载安卓版本,安卓版本... 你有没有想过,为什么苹果系统的手机那么受欢迎,却还有人想要下载安卓版本呢?这背后可是有着不少故事呢!...
安卓系统如何下载carplay... 你是不是也和我一样,对安卓系统上的CarPlay功能充满了好奇?想象在安卓手机上就能享受到苹果Car...
退回安卓系统的理由,揭秘安卓系... 你有没有想过,为什么有些人会选择退回到安卓系统呢?这可不是一件简单的事情,背后可是有着不少原因哦!让...
安卓机系统互通吗,共创智能生态 你有没有想过,你的安卓手机里的应用和电脑上的安卓应用是不是可以无缝对接呢?是不是有时候觉得手机上的某...
安卓源码 添加系统应用,系统应... 你有没有想过,手机里的那些系统应用是怎么来的?是不是觉得它们就像天外来物,神秘又神奇?其实,只要你愿...
安卓系统能否播放flv,全面解... 你有没有想过,你的安卓手机里那些珍贵的FLV视频文件,到底能不能顺利播放呢?这可是个让人挠头的问题,...
奔驰c系安卓系统,智能驾驶体验... 你有没有发现,最近开奔驰C系的小伙伴们都在悄悄地谈论一个新玩意儿——安卓系统!没错,就是那个我们手机...