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 并行的。