kubectl statefull设置滚动重启与pvc清理

时间:2020-09-02 20:25:48

标签: kubernetes kubectl persistent-volumes kubernetes-statefulset

我有一个带有持久卷的有状态集。 如果我这样做,kubectl rollout restart statefulset将按预期方式重新创建pod并回收持久卷。

但是,我需要创建一个cron作业,该作业应该不时一次重新启动Pod,并清理持久卷(或重新创建它们)。因此,我要实现的任务是一次停止一个吊舱,清洗/删除其持久卷,然后用空的pvc创建一个新的吊舱(或重复使用同一吊舱),只有在该吊舱启动后,它才能继续到下一个吊舱。一个。

删除状态集并再次创建它不是一个选择,因为我需要停机0次(假设副本集中有1个以上的pod)。

我考虑的一个选项是将cron hob配置为首先修补现有配置,以便在首次重新启动期间删除持久卷,进行实际首次重新启动,然后使用还原更改再次对其进行修补。但是,不确定是否应该为此更改属性,并且还想确保没有更简单的方法来实现类似的行为。

1 个答案:

答案 0 :(得分:0)

如果您有动态配置,请添加

reclaimPolicy: Delete

您的StorageClass定义或您拥有的每个PVC。删除是默认的ReclaimPolicy,但请确保在此标志下没有其他值。 您可以使用kubectl patch command

Statefulset有4个update strategies

  • 删除时
  • 滚动更新
  • 分区
  • 强制回滚

Partition策略的定义:

如果指定了分区,则在更新StatefulSet的.spec.template时,所有序号大于或等于该分区的Pod都会被更新。序号小于分区的所有Pod都不会更新,即使删除了它们,它们也会在以前的版本中重新创建。如果StatefulSet的.spec.updateStrategy.rollingUpdate.partition大于其.spec.replicas,则对其.spec.template的更新将不会传播到其Pod。在大多数情况下,您不需要使用分区,但是如果您要进行更新,推出金丝雀或分阶段推出,则它们很有用。

例如,如果您在StatefulSet中的某个位置设置了updateStrategy.rollingUpdate.partition: 2,它将重新启动索引为2或更高的所有Pod。

看看:sts-rolling-update-strategysts-restart-rolling-update