如何选择 Kubernetes Deployment 的更新策略?

目录

滚动更新(RollingUpdate)

重建更新(Recreate)

小结


Kubernetes Deployment支持两种更新策略:滚动更新(RollingUpdate)和重建更新(Recreate),用户可以根据实际需求选择合适的更新策略。

滚动更新(RollingUpdate)

滚动更新是 Kubernetes Deployment 默认的更新策略,可以在不停止服务的情况下逐步更新应用。在滚动更新过程中,Kubernetes 会逐渐替换旧的 Pods 为新的 Pods,可以确保在更新过程中始终有一定数量的 Pod 处于运行状态,从而实现无缝升级,降低服务中断的风险。

RollingUpdate 策略可以通过以下两个参数进行控制:

  • maxUnavailable:在更新过程中允许的最大不可用 Pod 数量,可以是绝对数值(如 1)或百分比(如 50%),设置为百分比时,如果得出的值不是整数,会采取向下取整。例如,如果你有 10 个副本,并设置 maxUnavailable 为 1(或者 10%),那么在任何时间点,最多只能有 1 个 Pod 不可用。
  • maxSurge:在更新过程中允许的最大超出期望 Pod 数量,可以是绝对数值(如 1)或百分比(如 50%),设置为百分比时,如果得出的值不是整数,会采取向上取整。例如,如果你有 10 个副本,并设置 maxSurge 为 2(或者 20%),那么在更新过程中,Pod 的数量可以达到 12 个。

看个简单的示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: myapp-image:v2

重建更新(Recreate)

重建更新策略会在创建新的 Pod 之前,先将所有旧的 Pod 删除,意味着服务在新 Pods 被创建并准备就绪之前的这段时间内是不可用的。这种方法虽然简单粗暴,但在某些情况下可能是更合适的,例如不能同时运行多个副本的应用场景。

对于 Recreate 策略,不需要额外的配置参数,只需要在 Deployment 的 spec.strategy.type 字段设置为 Recreate 即可。看个简单的示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
spec:
  replicas: 10
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: myapp-image:v2

小结

如何选择更新策略取决于应用程序的业务逻辑,大多数情况下,RollingUpdate 是首选的更新策略,因为这种策略能够在不停机的情况下更新应用。但是在特定的应用场景下,Recreate 策略也可能是一个合适的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路多辛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值