一文掌握k8s的升级更新策略

简介

K8S中通过spect.strategy来定义新的 Pod 替换为旧的Pod的策略。策略类型分为:重建策略(Recreate)或滚动升级策略(RollingUpdate),默认为 RollingUpdate

两种升级策略

1.Recreate策略

在这种策略中,旧的Pods被终止,然后新的Pods被创建。这种方式简单直接,但在升级过程中会导致服务不可用。

样例
复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-deployment
spec:
  replicas: 3
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
      - name: example-container
        image: example-image:1.0

2. Rolling Update

用于在更新Deployment、StatefulSet、DaemonSet等资源时,逐步替换旧版本的Pod,而不是一次性全部替换。这样可以减少服务中断的风险,并允许在升级过程中监控应用的健康状况。

滚动升级的基本步骤:

  • 定义滚动升级策略‌:在Deployment的spec部分,你可以定义滚动升级的相关参数。

  • 触发滚动升级‌:通过更新Deployment的配置(如镜像版本),Kubernetes将开始执行滚动升级。

参数说明:

Col1 Col2
最大无效实例数(maxUnavailable) 与spec.replicas相比,可以有多少个Pod失效,也就是删除的个数或比例,建议值是0个。比如spec.replicas为3,那升级过程中就至少有3个可用的Pod存在。
最大浪涌(maxSurge) 与spec.replicas相比,可以有多少个Pod存在,建议值是10%。比如spec.replicas为 3,那升级过程中就不能超过4个Pod存在,即按10%(1个)的步长升级,实际升级过程中会换算成数字,且换算会向上取整。这个值也可以直接设置成个数。

样例

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1       # 最大额外可以存在的副本数,可以为整数或百分比
      maxUnavailable: 1 # 最大不可用副本数,可以为整数或百分比
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:latest

通过xkube进行设置

通过多集群k8s管理平台xkube的功能可以轻松的设置更新策略,xkube安装部署参考:https://blog.csdn.net/weixin_56364253/article/details/156390146

功能参考下图:

相关推荐
孙克旭_3 分钟前
云原生基础之Containerd容器运行时
运维·云原生
分布式存储与RustFS4 分钟前
RustFS 自建对象存储实战目录:110 篇按场景分类(持续更新)
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
java_logo14 小时前
Docker 部署 EmulatorJS:轻松搭建浏览器复古游戏平台
游戏·docker·容器·复古游戏·轩辕镜像·emulatorjs·红白机
吴声子夜歌15 小时前
Kubernetes权威指南——网络原理(一)
网络·容器·kubernetes
方便面不加香菜17 小时前
Docker Container --容器及容器的操作案例详解
运维·docker·容器
无言听风雨丶20 小时前
Kubernetes Service Mesh 与 mTLS 实战:从网络可达走向零信任服务通信
网络·kubernetes·service_mesh
weirong21 小时前
跟原生 HPA 做对照压测:五轮里前四轮全废,最后一个结论也被我自己降级
kubernetes
无人生还别怕1 天前
如何搭建docker仓库(轻量级)registry
linux·运维·docker·云原生·容器·registry·openanolisos
分布式存储与RustFS1 天前
Hudi 表想摆脱 HDFS 绑定?用 Spark + Hudi 直接写进 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
逐流人1 天前
DevOps 入门实战(一):从 CI/CD 概念到 Jenkins 自动构建部署
运维·云原生·云计算·jenkins·devops