
Kubernetes--有状态应用编排:StatefulSet
Deployment认为:管理的所有同版本的pod都是一模一样的副本StatefulSet能够比较好的满足一些有状态应用特有的要求:1、每个Pod有Order序号,会按照序号创建、删除、更新pod2、通过配置headless service,使每个pod有唯一的网络标识(HOSTNAME)3、通过配置pvc template,每个pod有一块独享的pv存储盘4、支持一定数量的灰度发布一个简单的St
Deployment认为:管理的所有同版本的pod都是一模一样的副本
StatefulSet能够比较好的满足一些有状态应用特有的要求:
1、每个Pod有Order序号,会按照序号创建、删除、更新pod
2、通过配置headless service,使每个pod有唯一的网络标识(HOSTNAME)
3、通过配置pvc template,每个pod有一块独享的pv存储盘
4、支持一定数量的灰度发布
一个简单的Statefulset范例创建
# 创建service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
namespace: dev
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
# 创建pc-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: pc-statefulset
namespace: dev
spec:
selector:
matchLabels:
app: nginx
serviceName: "nginx"
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.17.1
ports:
- containerPort: 80
name: nginx
到这,创建好了一个svc和一个statefulset,查看一下状态:
# 查看service
[root@master ~]# kubectl get svc nginx -n dev
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx ClusterIP None <none> 80/TCP 3h4m
# 查看一下ip
[root@master ~]# kubectl get endpoints nginx -n dev
NAME ENDPOINTS AGE
nginx 10.244.169.183:80,10.244.169.184:80,10.244.169.185:80 + 3 more... 2s
# 查看创建的statefulset
[root@master ~]# kubectl get sts -n dev
NAME READY AGE
pc-statefulset 3/3 85m
# 查看sts创建的pod
[root@master ~]# kubectl get pod -n dev -o wide
pc-statefulset-0 1/1 Running 1 (6m21s ago) 87m 10.244.169.185 k8s-node2 <none> <none>
pc-statefulset-1 1/1 Running 1 (6m21s ago) 87m 10.244.169.183 k8s-node2 <none> <none>
pc-statefulset-2 1/1 Running 1 (6m7s ago) 87m 10.244.36.90 k8s-node1 <none> <none>
Pod版本
不同于Deployment使用ReplicaSet来管理版本和维持副本数,Statefulset controller直接管理下属的pod,而pod中用一个label来标识版本:controller-revision-hash
[root@master ~]# kubectl get pod -L controller-revision-hash -n dev
NAME READY STATUS RESTARTS AGE CONTROLLER-REVISION-HASH
demo-cloneset-bc6jq 1/1 Running 6 (6m13s ago) 2d4h demo-cloneset-7b4f8f8579
demo-cloneset-gnd5c 1/1 Running 6 (5m55s ago) 2d4h demo-cloneset-7b4f8f8579
demo-cloneset-vzg4j 1/1 Running 6 (6m32s ago) 2d4h demo-cloneset-7b4f8f8579
nginx-f87cbb8b5-6xf6p 1/1 Running 2 (28m ago) 10h
pc-statefulset-0 1/1 Running 0 3m34s pc-statefulset-589995765c
pc-statefulset-1 1/1 Running 0 3m3s pc-statefulset-589995765c
管理模式
Statefulset会创建管理的资源:
● ControllerRevision:通过这个资源,Statefulset可以很方便的管理不同版本的template模板
● PVC:如果在Statefulset中定义了volumeClaimTemplates,Statefulset会在创建Pod之前,先根据这个模板创建PVC,并把PVC加到Pod volume中。
● Pod:Statefulset按照顺序创建、删除、更新Pod,每个Pod有唯一的序号
扩缩容管理策略
Statefulset.spec中,有一个字段名为podManagementPolicy,可选策略为OrderedReady和Parallel,默认为前者:
● OrderedReady: 扩缩容按照order顺序执行,扩容时,必须前面序号的Pod都ready了,才能扩下一个,缩容时,按照倒序删除
● Parallel:并行扩缩容,不需要等待前面Pod都ready或删除后再删除下一个
更多推荐
所有评论(0)