StatefulSet更新策略

2023-04-30 13:39:18 浏览数 (1)

在 Kubernetes 中,更新应用程序时通常需要更新其运行时组件,例如容器映像。对于 Deployment 资源,可以使用 RollingUpdate 策略来控制更新的速率和失败的回滚。但是,对于 StatefulSet 资源,更新策略稍有不同,因为 StatefulSet 管理的 Pod 具有固定的网络标识符和存储卷。

概述

StatefulSet 资源的更新策略分为两种类型:

  • RollingUpdate:与 Deployment 资源相同,按照一定的顺序逐个更新 Pod。
  • OnDelete:只有当删除 StatefulSet 资源时,才会更新 Pod。

默认情况下,StatefulSet 使用 RollingUpdate 策略。可以通过 StatefulSet 的 spec.updateStrategy.type 字段来选择要使用的更新策略。可以将其设置为 RollingUpdateOnDelete,如下所示:

代码语言:javascript复制
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: example
spec:
  selector:
    matchLabels:
      app: example
  serviceName: example
  replicas: 3
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
      - name: app
        image: example:latest
  updateStrategy:
    type: RollingUpdate # or OnDelete

如果选择 RollingUpdate 策略,则可以使用以下字段控制更新的速率和回滚的失败阈值:

  • spec.updateStrategy.rollingUpdate.partition:控制一次更新中可以同时更新的 Pod 的最大数量。
  • spec.updateStrategy.rollingUpdate.maxUnavailable:在进行更新时,允许的不可用 Pod 的最大数量。例如,可以将其设置为 50% 表示每次更新时只允许 50% 的 Pod 不可用。
  • spec.updateStrategy.rollingUpdate.maxSurge:在进行更新时,允许超出期望 Pod 数量的最大数量。例如,可以将其设置为 1 表示每次更新时允许多出一个 Pod。

0 人点赞