StatefullSet 有状态副本及
介绍
帮助命令:kubectl explain sts
特点:
- 每个 Pod 都有一个稳定且唯一的网络标识符,通过 headless service 实现,参考
- 持久化存储,动态共计存储卷,使用 volumeClaimTemplates 自动创建 PVC
- 有序、平滑地部署和扩展,创建过程:按顺序创建
- 有序、平滑地删除和终止,删除过程:创建过程的逆过程
- 有序的滚动更新
- 通过
kubectl explain sts.spec.updateStrategy.rollingUpdate.partition
控制更新策略,大于等于 partition 的 Pod 才会更新
上述后三条通过 StatefulSet 控制器实现。
示例
- statefulset-hello-app.yaml
apiVersion: v1
kind: Service
metadata:
name: hello-app-svc
namespace: default
spec:
clusterIP: None
selector:
app: hello-app
ports:
- name: port-80
port: 80
targetPort: 8080
protocol: TCP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: hello-app-sf
namespace: default
spec:
serviceName: hello-app-svc
replicas: 2
selector:
matchLabels:
app: hello-app
template:
metadata:
labels:
app: hello-app
spec:
containers:
- name: hello-app
image: gcriogooglesamples/hello-app:1.0
ports:
- name: http
containerPort: 8080
volumeMounts:
- name: vdata
mountPath: /data
volumeClaimTemplates:
- metadata:
name: vdata
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 2Gi
root@k8s-master:~/manifests/volume# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvnfs1 5Gi RWO,RWX Retain Bound default/vdata-hello-app-sf-0 116s
pvnfs2 5Gi RWO,RWX Retain Bound default/vdata-hello-app-sf-1 4s
root@k8s-master:~/manifests/volume# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
vdata-hello-app-sf-0 Bound pvnfs1 5Gi RWO,RWX 6m20s
vdata-hello-app-sf-1 Bound pvnfs2 5Gi RWO,RWX 93s
root@k8s-master:~/manifests/volume# kubectl get sts
NAME READY AGE
hello-app-sf 2/2 6m29s
root@k8s-master:~/manifests/volume# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-app-sf-0 1/1 Running 0 6m30s
hello-app-sf-1 1/1 Running 0 103s
/ # nslookup hello-app-svc.default.svc.kb.cx
Server: 10.96.0.10
Address: 10.96.0.10:53
Name: hello-app-svc.default.svc.kb.cx
Address: 10.244.1.96
Name: hello-app-svc.default.svc.kb.cx
Address: 10.244.1.95
/ # nslookup hello-app-sf-0.hello-app-svc.default.svc.kb.cx
Server: 10.96.0.10
Address: 10.96.0.10:53
Name: hello-app-sf-0.hello-app-svc.default.svc.kb.cx
Address: 10.244.1.95
/ # nslookup hello-app-sf-1.hello-app-svc.default.svc.kb.cx
Server: 10.96.0.10
Address: 10.96.0.10:53
Name: hello-app-sf-1.hello-app-svc.default.svc.kb.cx
Address: 10.244.1.96
说明