Kubernetes StatefulSet
什么是StatefulSet?
StatefulSet表示一组具有唯一持久身份标识和稳定主机名的有状态Pod,无论Pod在哪一个Node上运行,身份标识及持久化的数据其都会保留。一般用于持久化存储、固定网络标记、有序部署、有伸缩等场景。
什么是有状态应用?
有状态应用是将数据或应用程序状态持久化到关联的存储中,例如MySQL、Kafka、Zookeeper等应用场景,需要对其进行唯一持久身份的标识及数据的永久保存到存储中。
StatefulSet操作
像Deployment一样StatefulSet管理基于相同容器规范的Pod。但唯一不同的是StatefulSet为其每个Pod维护一个标识身份,StatefulSet需要Headless Service来负责Pod的网络身份。每个Pod具有一个存储类及存储声明,无论Pod被调度到哪一个节点,相关的存储挂载将伴随Pod。在删除Pod或者Stateful时,不会删除掉关联的PersistentVolume及PersistentVolumes。
通过yaml资源定义清单创建
kubectl apply -f nginx-statefulset.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
labels: app: nginx
spec:
ports:
- port: 80
clusterIP: None
selector: app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector: matchLabels: app: nginx serviceName: "nginx"
replicas: 3
template: metadata: labels: app: nginx spec: terminationGracePeriodSeconds: 10 containers: - name: nginx image: nginx:1.16 volumeMounts: - name: www mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata: name: www spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
查看StatefulSet列表
kubectl get statefulset
查看StatefulSet描述信息
kubectl describe statefulset
StatefulSet更新策略
通过指定 spec: updateStrategy
中定义的更新策略来确定如何处理更新。
OnDelete:
当手动删除旧的Pod时,新的Pod才会被自动被创建。
RollingUpdate:
默认的更新策略。旧的Pod自动被删除,新的Pod也自动创建。
- 1
- 2
- 3
- 4
- 5
分区
通过指定 .spec.updateStrategy.rollingUpdate.partition
中定义的来对 RollingUpdate 更新策略进行分区,如果指定了分区,则当 StatefulSet 的 .spec.template 更新时,具有大于或等于分区序数的所有 Pod 将被更新。具有小于分区的序数的所有 Pod 将不会被更新,即使删除它们也将被重新创建。
如果 StatefulSet 的 .spec.updateStrategy.rollingUpdate.partition 大于其 .spec.replicas,则其 .spec.template 的更新将不会传播到 Pod。一般情况下不需要使用分区,在金丝雀、预发布等场景下是比较有用的。
文章来源: blog.csdn.net,作者:叶康铭,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/m0_38030719/article/details/103976739
- 点赞
- 收藏
- 关注作者
评论(0)