1.5.2. statefulset¶
statefulset是用来管理有状态应用的工作负载api对象 和deployment不同的是,这些pod都有每个独立的粘性id,永久不变的id.
1.5.2.1. 使用场景¶
稳定的唯一标识的
稳定的、持久的存储
有序的,优雅的部署和缩放
有序的,自动的滚动更新。
1.5.2.2. 创建statefulset¶
需要一个svc
1apiVersion: v1
2kind: Service
3metadata:
4 name: nginxsvc
5 labels:
6 app: nginx
7spec:
8 ports:
9 - name: web
10 port: 80
11 selector:
12 app: nginx
13 clusterIP: None
14
15
16
需要存储类
1apiVersion: storage.k8s.io/v1
2kind: StorageClass
3metadata:
4 name: low
5provisioner: kubernetes.io/glusterfs
6parameters:
7 resturl: "http://10.157.89.215:8077"
8 clusterid: "b8bc571569b52c572f56b19a5f6b6d9a"
9 restauthenabled: "true"
10 restuser: "admin"
11 restuserkey: "admin"
12 gidMin: "40000"
13 gidMax: "50000"
14 volumetype: "replicate:2"
创建sts
1apiVersion: apps/v1
2kind: StatefulSet
3metadata:
4 name: nginx
5 labels:
6 app: nginx
7spec:
8 replicas: 2
9 selector:
10 matchLabels:
11 app: nginx
12 serviceName: nginxsvc
13 template:
14 metadata:
15 name: nginx
16 labels:
17 app: nginx
18 spec:
19 containers:
20 - name: nginx
21 image: nginx
22 ports:
23 - name: web
24 containerPort: 80
25 volumeMounts:
26 - name: www
27 mountPath: /usr/share/nginx/html
28 volumeClaimTemplates:
29 - metadata:
30 name: www
31 spec:
32 storageClassName: low
33 accessModes:
34 - ReadWriteMany
35 resources:
36 requests:
37 storage: 10M
38
39
40
41
42
创建出来的pod名称是$(StatefulSet 名称)-$(序号),管理域的这个服务格式为: $(服务名称).$(命名空间).svc.cluster.local,其中 cluster.local 是集群域。
pod对应的dns域为$(pod 名称).$(所属服务的 DNS 域名)
1.5.2.3. 部署和缩容保障¶
对于n个副本的sts,当部署pod的时候,依次创建的,顺序为0..N-1
删除pod的时候,它们是逆序终止的,顺序为 N-1..0。
在将缩放操作应用到 Pod 之前,它前面的所有 Pod 必须是 Running 和 Ready 状态。
1.5.2.4. 主要属性说明¶
podManagementPolicy: OrderedReady 一个一个来,Parallel 并行的。