本文作者:丁辉
StatefulSet的使用
示例
1 | cat <<EOF | kubectl apply -f - |
参数介绍
| 特性 | ReadWriteOnce (RWO) | ReadWriteOncePod (RWOP) |
|---|---|---|
| 挂载单位 | 节点级别 | Pod级别 |
| 多个Pod访问 | 允许(同节点) | 绝对禁止 |
| 安全性 | 较低,同节点Pod可共享 | 高,严格隔离 |
| K8s版本 | 所有版本 | 1.22+(beta),1.27+(稳定) |
| 使用场景 | 常规有状态应用 | 需要严格隔离的应用 |
| 存储类支持 | 广泛支持 | 需要CSI驱动支持 |
更新策略
RollingUpdate(滚动更新) - 默认策略
1
2
3spec:
updateStrategy:
type: RollingUpdateOnDelete(删除时更新)
1
2
3spec:
updateStrategy:
type: OnDelete
金丝雀发布
partition 参数用于控制更新的分界点,实现金丝雀发布或分阶段更新。
1 | spec: |
工作原理:
partition: 2→ 更新 pod-2, pod-3, …partition: 1→ 更新 pod-1, pod-2, …partition: 0→ 更新所有 Pod(默认值)
PersistentVolumeClaim 保留
在 StatefulSet 的生命周期中,可选字段 .spec.persistentVolumeClaimRetentionPolicy 控制是否删除以及如何删除 PVC。 使用该字段,你必须在 API 服务器和控制器管理器启用 StatefulSetAutoDeletePVC 特性门控。 启用后,你可以为每个 StatefulSet 配置两个策略:
whenDeleted配置删除 StatefulSet 时应用的卷保留行为。
whenScaled配置当 StatefulSet 的副本数减少时应用的卷保留行为;例如,缩小集合时。
对于你可以配置的每个策略,你可以将值设置为 Delete 或 Retain。
Delete对于受策略影响的每个 Pod,基于 StatefulSet 的
volumeClaimTemplate字段创建的 PVC 都会被删除。 使用whenDeleted策略,所有来自volumeClaimTemplate的 PVC 在其 Pod 被删除后都会被删除。 使用whenScaled策略,只有与被缩减的 Pod 副本对应的 PVC 在其 Pod 被删除后才会被删除。Retain(默认)来自
volumeClaimTemplate的 PVC 在 Pod 被删除时不受影响。这是此新功能之前的行为。
请记住,这些策略仅适用于由于 StatefulSet 被删除或被缩小而被删除的 Pod。 例如,如果与 StatefulSet 关联的 Pod 由于节点故障而失败, 并且控制平面创建了替换 Pod,则 StatefulSet 保留现有的 PVC。 现有卷不受影响,集群会将其附加到新 Pod 即将启动的节点上。
示例
whenDeleted - StatefulSet 被删除时
保留 PVC (默认)
1
2
3
4
5
6apiVersion: apps/v1
kind: StatefulSet
...
spec:
persistentVolumeClaimRetentionPolicy:
whenDeleted: Retain删除 PVC
1
2
3
4
5
6apiVersion: apps/v1
kind: StatefulSet
...
spec:
persistentVolumeClaimRetentionPolicy:
whenDeleted: Delete
whenScaled - 缩减副本数时
保留被删除 Pod 的 PVC
1
2
3
4
5
6apiVersion: apps/v1
kind: StatefulSet
...
spec:
persistentVolumeClaimRetentionPolicy:
whenScaled: Retain删除被删除 Pod 的 PVC
1
2
3
4
5
6apiVersion: apps/v1
kind: StatefulSet
...
spec:
persistentVolumeClaimRetentionPolicy:
whenScaled: Delete
要是这篇文章为您解了惑、带来了帮助,不妨用小小的打赏来支持下我的创作吧,您的鼓励就是我持续分享的最大动力哦,感谢您啦!
- 本文链接: https://blog.offends.cn/Kubernetes/使用文档/StatefulSet的使用.html
- 版权声明: 本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。