前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kubernetes运维之容器编排Deployment更新机制

Kubernetes运维之容器编排Deployment更新机制

作者头像
王先森sec
发布于 2023-04-24 09:15:50
发布于 2023-04-24 09:15:50
52600
代码可运行
举报
文章被收录于专栏:王先森王先森
运行总次数:0
代码可运行

Deployment更新机制

Deployment控制器支持两种更新策略:滚动更新(rolling update)和重新创建(recreate),默认为滚动更新。

滚动升级是默认的更新策略,它在删除一部分旧版本Pod资源的同时,补充创建一部分新版本的Pod对象进行应用升级,其优势是升级期间,容器中应用提供的服务不会中断,但要求应用程序能够应对新旧版本同时工作的情形,例如新旧版本兼容同一个数据库方案等。不过,更新操作期间,不同客户端得到的响应内容可能会来自不同版本的应用。

Deployment控制器的滚动更新操作并非在同一个ReplicaSet控制器对象下删除并创建Pod资源,而是将它们分置于两个不同的控制器之下:旧控制器的Pod对象数量不断减少的同时,新控制器的Pod对象数量不断增加,直到旧控制器不再拥有Pod对象,而新控制器的副本数量变得完全符合期望值为止,如图所示。

滚动更新时,应用升级期间还要确保可用的Pod对象数量不低于某阈值以确保可以持续处理客户端的服务请求,变动的方式和Pod对象的数量范围将通过spec.strategy.rollingUpdate.maxSurge和spec.strategy.rollingUpdate.maxUnavailable两个属性协同进行定义

  • maxSurge:指定升级期间存在的总Pod对象数量最多可超出期望值的个数,其值可以是0或正整数,也可以是一个期望值的百分比;例如,如果期望值为3,当前的属性值为1,则表示Pod对象的总数不能超过4个
  • maxUnavailable:升级期间正常可用的Pod副本数(包括新旧版本)最多不能低于期望数值的个数,其值可以是0或正整数,也可以是一个期望值的百分比;默认值为1,该值意味着如果期望值是3,则升级期间至少要有两个Pod对象处于正常提供服务的状态。

Deployment更新

创建deploy资源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

先来更新 nginx Pod 以使用 nginx:1.16.1 镜像,而不是 nginx:1.14.2 镜像。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl --record deployment.apps/nginx-deployment set image \
   deployment.v1.apps/nginx-deployment nginx=nginx:1.16.1

或者使用下面的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record

输出类似于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
deployment.apps/nginx-deployment image updated

升级过程

要查看上线状态,运行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl rollout status deployment/nginx-deployment

输出类似于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...

或者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
deployment "nginx-deployment" successfully rolled out

通过kubectl get rs命令,以可清晰地看到滚动升级的过程

回滚 Deployment

有时,你可能想要回滚 Deployment;例如,当 Deployment 不稳定时(例如进入反复崩溃状态)。 默认情况下,Deployment 的所有上线记录都保留在系统中,以便可以随时回滚 (你可以通过修改修订历史记录限制来更改这一约束)。

首先,检查 Deployment 修订历史:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl rollout history deployment.v1.apps/nginx-deployment

输出类似于:

CHANGE-CAUSE 的内容是从 Deployment 的 kubernetes.io/change-cause 注解复制过来的。 复制动作发生在修订版本创建时。你可以通过以下方式设置 CHANGE-CAUSE 消息:

  • 使用 kubectl annotate deployment.v1.apps/nginx-deployment kubernetes.io/change-cause="image updated to 1.9.1" 为 Deployment 添加注解。
  • 追加 --record 命令行标志以保存正在更改资源的 kubectl 命令。
  • 手动编辑资源的清单。

要查看修订历史的详细信息,运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl rollout history deployment.v1.apps/nginx-deployment --revision=2

假定现在你已决定撤消当前上线并回滚到以前的修订版本:

通过使用 --to-revision 来回滚到特定修订版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl rollout undo deployment.v1.apps/nginx-deployment --to-revision=2

检查回滚是否成功以及 Deployment 是否正在运行,运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get deployment nginx-deployment

缩放 Deployment

你可以使用如下指令缩放 Deployment:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl scale deployment.v1.apps/nginx-deployment --replicas=10

输出类似于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
deployment.apps/nginx-deployment scaled

假设集群启用了Pod 的水平自动缩放, 你可以为 Deployment 设置自动缩放器,并基于现有 Pods 的 CPU 利用率选择 要运行的 Pods 个数下限和上限。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl autoscale deployment.v1.apps/nginx-deployment --min=10 --max=15 --cpu-percent=80

输出类似于:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
deployment.apps/nginx-deployment scaled

paused(暂停的)

.spec.paused 是用于暂停和恢复 Deployment 的可选布尔字段。 暂停的 Deployment 和未暂停的 Deployment 的唯一区别是,Deployment 处于暂停状态时, PodTemplateSpec 的任何修改都不会触发新的上线。 Deployment 在创建时是默认不会处于暂停状态。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl rollout pause deployment nginx-stop

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-stop
  labels:
    app: nginx
spec:
  paused: true
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

恢复

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl rollout resume deployment nginx-stop
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
如何成为一名优秀的软件架构师
软件架构师负责将高层次的业务需求和技术要求转化为可执行的系统架构,并与团队合作将其变为现实。
一凡sir
2023/08/03
5280
业务架构师、系统架构师、软件架构师:职责、技能要求及对比分析
业务架构师、系统架构师和软件架构师在企业技术层面扮演着不同角色,各自有其独特的职责和技能要求。了解和明确这三者的不同,有助于组织有效地分配资源和角色,促进企业的技术和业务目标的实现。
运维开发王义杰
2023/08/10
3.7K0
业务架构师、系统架构师、软件架构师:职责、技能要求及对比分析
【愚公系列】《AIGC辅助软件开发》040-如何使用 AI技术提升工作效率:软件架构师的工作职责
在信息技术飞速发展的今天,软件架构师的角色变得愈发重要。他们不仅是技术方案的设计者,更是团队协作的引导者和项目成功的关键。随着人工智能(AI)技术的不断进步,架构师们能够借助这些先进工具显著提升工作效率,优化决策过程,并在复杂的项目中提供更具前瞻性的解决方案。
愚公搬代码
2025/01/05
1440
架构师之路一-架构师入门指引
导读:本系列文章教你怎么样成为一名架构师,而本篇文章则带你先认识一下什么是架构师,架构师的工作是什么?
JAVA日知录
2020/03/12
3.3K0
【架构师专题】架构师如何做好业务架构?
作为一个优秀的架构师,必须要先训练自己的业务架构技能,但是要训练之前,一定要先理解“业务架构”的定义。
35岁程序员那些事
2024/01/29
4790
【架构师专题】架构师如何做好业务架构?
系统架构师必备技能:驾驭复杂系统升级的关键之道
一、互联网时代与架构师角色的兴起 在当今数字化浪潮汹涌澎湃的时代,互联网与移动互联网的飞速发展如同一股强大的洪流,推动着整个社会的快速变革。在过去的二十余年间
TVP 悟空
2024/12/24
8311
系统架构师必备技能:驾驭复杂系统升级的关键之道
浅谈软件架构师的素质与职责
最近开始学习如何成为一名合格的架构师。首先参照别人的观点,在结合自己的实际经验,写出自己对如何成为一名架构师的理解,希望大家热心于与援手,能够指点一二. 沟通能力和自我表达 我认为沟通能力是基本中的基本,最为重要,最为普遍的素质。技术人员好像容易忽略,想成为架构师就不能忽略。因为架构师要做的第一件事就是与团队成员、项目经理、客户认同沟通,获得认同。我知道,这对于现在做技术,以后想转做架构的人也许很难.对本人也是如此。也许 你会注意到虽然你兢兢业业,老黄牛的做了很多事,但每次升迁的总是那些平时最活跃的人。抛除
张善友
2018/01/30
6790
架构师是怎样炼成的
软件架构师定义 软件工程师的职业发展方向: 软件架构师: 制定高级设计决策,并确定技术标准,包括编程标准,工具和平台的软件专家 软件架构: 系统的基本组织构成,这种组织主要体现在其组件,组
攻城狮Chova
2022/01/22
6690
架构师是怎样炼成的
聊聊解决方案架构师的那些事儿
解决方案架构是组织中用于开发解决方案的基础构件。它有助于在复杂组织中创建成功的解决方案,在这类组织中,产品开发依赖于多个团队。为了开发出正确的应用程序,第一步应确定解决方案架构,解决方案架构为应用程序的实现奠定了基础并规划了稳健的基础构件。解决方案架构不仅要考虑业务需求,还要处理关键的非功能性需求,如可伸缩性、高可用性、可维护性、性能、安全性等。
xcbeyond
2021/11/29
1.6K0
聊聊解决方案架构师的那些事儿
解决方案架构师修炼之道
推荐序二 在IT领域里,解决方案架构师的培养成本也是极高的,架构的优劣决定着企业IT的建设和运营成本,架构设计上的漏洞可能会给企业带来巨大的损失。一名优秀的解决方案架构师在成长的道路上,要学习各类IT知识,在项目中摸爬滚打,总结经验教训,从实践中提炼方法论 ---- 推荐序四 我们介入后,围绕发布目标,反向梳理了三大模块工作细节及其配合关系,包括功能性开发与测试、非功能性开发与验证、产品运营与推广等,帮助产品相关的几十人的业务与技术团队就目标形成共识,包括帮助团队明确和调整优先级,舍弃一些不太重要的功能,提
yeedomliu
2021/12/01
2.7K0
解决方案架构师修炼之道
如果能重来,从零学习架构设计我要这么干
今日推荐:https://cloud.tencent.com/developer/article/2473061
Towserliu
2024/12/03
1240
如果能重来,从零学习架构设计我要这么干
技术同盟专家谈2:架构师能力模型有哪些关键点?
在技术江湖中,架构师一直是个神秘又充满挑战的角色。他们不仅要精通技术,还要洞察业务,更要具备卓越的领导力和沟通能力。那么,架构师的成长之路究竟有哪些关键节点呢?在技术同盟名人堂社群中,架构专家们也展开了热烈的讨论。
腾讯云架构师技术同盟
2025/01/26
1490
聊一下测试架构师的认知力
认知是不可见的,尽管你看不到它,但你知道它是存在的。你能感觉到它,它就在你周围,无处不在。认知驱动着你的思考方式,你做什么事,你怎样去做,你的活力程度,以及你的目标感。
漫谈测试
2024/08/19
790
聊一下测试架构师的认知力
数字化浪潮下架构师的进阶之路:挑战、机遇与蜕变
在数字化时代激流勇进的浪潮中,架构师已成为技术领域的中流砥柱,肩负着绘制系统蓝图和技术引领的使命。面对信息技术的快速演进和日益复杂的业务场景,架构师要稳固立足并
楼炜
2024/12/25
4540
《IT架构师成长和认证指南》简介及第2章 IT架构师角色和素养
作者写了一本关于IT架构师成长和认证的书,希望先通过连载的形式拿出来分享,结合读者的反馈来不断调整完善,也作为全文校对完善的一种方法。本书希望对于那些想成长为架构师,并在架构师职业发展道路上不断进阶的读者们有所借鉴和指导,也欢迎业内专家不吝赐教和斧正。
企业架构师思维
2025/05/30
710
《IT架构师成长和认证指南》简介及第2章 IT架构师角色和素养
为什么80%的码农都做不了架构师?
在软件开发领域,架构师被视为技术团队中的核心人物,他们不仅需要具备扎实的技术基础,还要具备全面的设计能力和解决复杂问题的能力。然而,据统计,大约80%的程序员(码农)无法成为架构师。这一现象背后的原因是什么呢?本文将从以下几个方面进行深入探讨。
IT_陈寒
2025/06/01
500
为什么80%的码农都做不了架构师?
漫画:什么是架构师?
于是,小灰去向大黄请教 这是有关未来的故事: 从前,有一个赶路的人路过一片工地,看到三个年轻人在工地上搬砖。 于是,他问其中一个人: 于是,他又问了第二个人: 于是,他又问了第三个人: 十年之后~ 曾经说自己在建造城市的年轻人,成为了市长。 曾经说自己在搬砖的年轻人,成为了砖厂老板。 曾经说自己在搭建教堂的年轻人,最没出息,成为了架构师。 什么是架构师? 架构师英文architect,这个词源于建筑学。软件工程当中的架构师和建筑工程当
企鹅号小编
2018/01/26
1.1K0
平台工程师的职责是什么?您是否需要?
软件规模扩大、复杂性增加,DevOps对调试基础设施使其可供开发者构建显得越来越重要。
云云众生s
2024/03/28
2030
【愚公系列】《AIGC辅助软件开发》041-如何使用 AI技术提升工作效率:AI辅助软件架构师实践
在数字化转型的浪潮中,软件架构师作为技术团队的核心,承载着系统设计与架构优化的重要责任。然而,随着项目复杂度的增加和技术环境的变化,架构师面临着前所未有的挑战。幸运的是,人工智能(AI)技术的迅猛发展为这一行业带来了新的机遇,帮助架构师提升工作效率、优化决策过程,并改善团队协作。
愚公搬代码
2025/01/05
1880
闲话如何成为一个架构师
停了很久,继续上路。计划写一个系列,先预告:《如何成为架构师》,《如何做一名好开发》,《如何做系分》,《如何转型技术管理》。
芋道源码
2018/09/30
4650
推荐阅读
相关推荐
如何成为一名优秀的软件架构师
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档