Kubernets中的滚动更新

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 【5月更文挑战第31天】在 Kubernetes 中,`kubectl scale` 命令常用于Deployment和StatefulSet的应用伸缩。除了伸缩,应用更新和版本回退也是常见运维任务。

Deployment 的“应用伸缩”功能就是一种常见的运维操作,在 Kubernetes 里,使用命令 kubectl scale,我们就可以轻松调整 Deployment 下属的 Pod 数量,因为 StatefulSet 是 Deployment 的一种特例,所以它也可以使用 kubectl scale 来实现“应用伸缩”。


除了“应用伸缩”,其他的运维操作比如应用更新、版本回退等工作,该怎么做呢?这些也是我们日常运维中经常会遇到的问题。


在 Kubernetes 里,版本更新使用的不是 API 对象,而是两个命令:kubectl apply 和 kubectl rollout,当然它们也要搭配部署应用所需要的 Deployment、DaemonSet 等 YAML 文件。


在 Kubernetes 里应用都是以 Pod 的形式运行的,而 Pod 通常又会被 Deployment 等对象来管理,所以应用的“版本更新”实际上更新的是整个 Pod。


在 Kubernetes 里应用的版本变化就是 template 里 Pod 的变化,哪怕 template 里只变动了一个字段,那也会形成一个新的版本,也算是版本变化。


kubectl rollout status 的输出信息,Kubernetes 不是把旧 Pod 全部销毁再一次性创建出新 Pod,而是在逐个地创建新 Pod,同时也在销毁旧 Pod,保证系统里始终有足够数量的 Pod 在运行,不会有“空窗期”中断服务。


新 Pod 数量增加的过程有点像是“滚雪球”,从零开始,越滚越大,所以这就是所谓的“滚动更新”(rolling update)。


在应用更新的过程中,你可以随时使用 kubectl rollout pause 来暂停更新,检查、修改 Pod,或者测试验证,如果确认没问题,再用 kubectl rollout resume 来继续更新。


想要回退到上一个版本,就可以使用命令 kubectl rollout undo,也可以加上参数 --to-revision 回退到任意一个历史版本。


kubectl rollout undo 的操作过程其实和 kubectl apply 是一样的,执行的仍然是“滚动更新”,只不过使用的是旧版本 Pod 模板,把新版本 Pod 数量收缩到 0,同时把老版本 Pod 扩展到指定值。


只需要在 Deployment 的 metadata 里加上一个新的字段 annotations。


annotations 字段的含义是“注解”“注释”,形式上和 labels 一样,都是 Key-Value,也都是给 API 对象附加一些额外的信息,但是用途上区别很大。

  • annotations 添加的信息一般是给 Kubernetes 内部的各种对象使用的,有点像是“扩展属性”;
  • labels 主要面对的是 Kubernetes 外部的用户,用来筛选、过滤对象的。


如果用一个简单的比喻来说呢,annotations 就是包装盒里的产品说明书,而 labels 是包装盒外的标签贴纸。


借助 annotations,Kubernetes 既不破坏对象的结构,也不用新增字段,就能够给 API 对象添加任意的附加信息,这就是面向对象设计中典型的 OCP“开闭原则”,让对象更具扩展性和灵活性。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
10月前
|
Kubernetes 监控 测试技术
k8s中蓝绿部署、金丝雀发布、滚动更新汇总
k8s中蓝绿部署、金丝雀发布、滚动更新汇总
|
19小时前
|
Kubernetes 监控 Perl
在K8S中,如何具体实现Pod被删除后,还能被自动拉起功能?
在K8S中,如何具体实现Pod被删除后,还能被自动拉起功能?
|
23小时前
|
Kubernetes 监控 安全
在K8S中,滚动更新的过程?
在K8S中,滚动更新的过程?
|
3月前
|
资源调度 Kubernetes 应用服务中间件
Deployment的创建、滚动更新、回滚版本、扩容缩容
Deployment的创建、滚动更新、回滚版本、扩容缩容
|
10月前
|
Kubernetes 监控 API
【K8S系列】深入解析滚动升级
【K8S系列】深入解析滚动升级
634 0
|
8月前
|
Kubernetes Perl 容器
OpenKruise中的CloneSet主要用于Pod的自动扩缩容和滚动更新
OpenKruise中的CloneSet主要用于Pod的自动扩缩容和滚动更新
56 1
|
9月前
|
Kubernetes 监控 测试技术
基于 KEDA 的 Kubernetes 自动缩放机制
基于 KEDA 的 Kubernetes 自动缩放机制
284 0
|
10月前
|
Kubernetes 监控 Python
阿里云kubernetes(ACK)pod异常问题分析辅助工具-pod生命周期及事件可观测一览图
阿里云kubernetes(ACK)pod异常问题分析辅助工具-pod生命周期及事件可观测一览图
|
Kubernetes 应用服务中间件 nginx
【探索 Kubernetes|作业管理 Deployment 篇 系列 12】水平扩展 / 收缩、滚动 / 回滚更新(下)
【探索 Kubernetes|作业管理 Deployment 篇 系列 12】水平扩展 / 收缩、滚动 / 回滚更新(下)
144 0
|
Kubernetes 监控 API
【探索 Kubernetes|作业管理 Deployment 篇 系列 12】水平扩展 / 收缩、滚动 / 回滚更新(上)
【探索 Kubernetes|作业管理 Deployment 篇 系列 12】水平扩展 / 收缩、滚动 / 回滚更新
127 0