StatefulSet管理与使用(控制器)
1 概述
是有状态的控制器。
类比deployment控制器,是无状态的控制器,怎么理解?
pod删除自动恢复后pod名字,ip地址会发生改变,存储会一并删除,不能持久化
有状态怎么理解?
statefulset 中的pod删除重加恢复后,新的pod的名字,IP地址和原pod相同,存储可持久化保留,可以通过pvc来实现。
2 特点
有序扩展会按序号顺序在不同node上进行部署,删除时,会按照部署时候的倒序进行删除。
3 示例
3.1 创建3个pv备用 mypv1 mypv2 mypv3
[root@k8s-master ~]# k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mypv1 2Gi RWO Recycle Available 13d
mypv2 2Gi RWO Recycle Available 13d
mypv3 2Gi RWO Recycle Available 42h
[root@k8s-master ~]# cat pv1.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mypv1
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /nfs/pv1
server: 192.168.227.10
3.2 创建statefulset
3个nginx副本,rwo方式挂载2g磁盘
[root@k8s-master ~]# cat /root/statefulset.yaml
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.7.9
ports:
- containerPort: 80
name: web
volumeMounts:
- name: stor
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: stor
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
3.3 观察pod创建过程,体验何为顺序创建(web-0,web-1,web-2)
[root@k8s-master ~]# k apply -f /root/statefulset.yaml
statefulset.apps/web created
[root@k8s-master ~]# k get pod -w
NAME READY STATUS RESTARTS AGE
cm-test-pod 1/1 Running 11 2d18h
cmpod2 1/1 Running 9 2d
httpd-deployment-859778b7b6-5rwrn 1/1 Running 23 51d
httpd-deployment-859778b7b6-hfw9t 1/1 Running 23 51d
httpd-deployment-859778b7b6-l7vwd 1/1 Running 22 50d
spod 1/1 Running 5 44h
web-0 1/1 Running 0 3s
web-1 0/1 Pending 0 0s
NAME AGE
web-1 2s
web-1 2s
web-1 3s
web-2 0s
[root@k8s-master ~]# k get pods
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 14s
web-1 1/1 Running 0 11s
web-2 1/1 Running 0 8s
3.4 删除pod 观察自动重启后pod的名字变化
结果:未发生改变
[root@k8s-master ~]# k delete pod web-1 & k get pod
[1] 57189
pod "web-1" deleted
NAME READY STATUS RESTARTS AGE
cm-test-pod 1/1 Running 11 2d18h
cmpod2 1/1 Running 9 2d
httpd-deployment-859778b7b6-5rwrn 1/1 Running 23 51d
httpd-deployment-859778b7b6-hfw9t 1/1 Running 23 51d
httpd-deployment-859778b7b6-l7vwd 1/1 Running 22 50d
spod 1/1 Running 5 44h
web-0 1/1 Running 0 4m8s
web-1 1/1 Terminating 0 4m5s
web-2 1/1 Running 0 4m2s
[root@k8s-master ~]# k get pod
NAME READY STATUS RESTARTS AGE
cm-test-pod 1/1 Running 11 2d18h
cmpod2 1/1 Running 9 2d
httpd-deployment-859778b7b6-5rwrn 1/1 Running 23 51d
httpd-deployment-859778b7b6-hfw9t 1/1 Running 23 51d
httpd-deployment-859778b7b6-l7vwd 1/1 Running 22 50d
spod 1/1 Running 5 44h
web-0 1/1 Running 0 4m28s
web-1 1/1 Running 0 13s
web-2 1/1 Running 0 4m22s
[1]+ 完成 kubectl delete pod web-1
3.5 删除statefulset,观察删除顺序(有序删除,先删web-2,web-1,web-0)
[root@k8s-master ~]# k delete statefulsets.apps web & k get pod -w
[1] 63962
NAME READY STATUS RESTARTS AGE
cm-test-pod 1/1 Running 11 2d18h
cmpod2 1/1 Running 9 2d
httpd-deployment-859778b7b6-5rwrn 1/1 Running 23 51d
httpd-deployment-859778b7b6-hfw9t 1/1 Running 23 51d
httpd-deployment-859778b7b6-l7vwd 1/1 Running 22 50d
spod 1/1 Running 5 44h
web-0 1/1 Running 0 7m33s
web-1 1/1 Running 0 3m18s
web-2 1/1 Running 0 7m27s
statefulset.apps "web" deleted
NAME AGE
web-0 7m33s
web-2 7m27s
web-1 3m18s
web-2 7m28s
web-1 3m19s
web-0 7m34s
web-0 7m38s
web-0 7m38s