statefulset为通用的有状态应用控制器。
每个pod都有自己的唯一标识,故障时,它只能被拥有同一个标识的新实例所取代。
如果有必要,可以为每个pod配置专用的存储卷,且只能是PVC格式。通过pvc模板来为每个pod创建专用PV
statefulset配置规范
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| apiVersion: apps/v1 kind: StatefulSet metadata: name <string> namespace <string> spec: replicas <integer> selector <object> template <object> revisionHistoryLimit <integer> updateStrategy <Object> type <string> rollingUpdate <Object> partition <integer> serviceName <string> volumeClaimTemplates <[]Object> apiVersion <string> kind <string> metadata <Object> spec <Object> podManagementPolicy <string>
|
statefulset资源清单示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| apiVersion: v1 kind: Service metadata: name: demoapp-sts namespace: default spec: clusterIP: None ports: - port: 80 name: http selector: app: demoapp controller: sts-demo --- apiVersion: apps/v1 kind: StatefulSet metadata: name: sts-demo spec: serviceName: demoapp-sts replicas: 2 selector: matchLabels: app: demoapp controller: sts-demo template: metadata: labels: app: demoapp controller: sts-demo spec: containers: - name: demoapp images: ikubernetes/demoapp:v1.0 ports: - name: web containerPort: 80 volumeMounts: - name: appdata mountPath: /app/data volumeClaimTemplates: - metadata: name: appdata spec: accessModes: ["ReadWriteOnce"] storageClassName: longhorn resources: requests: storage: 2Gi limits: storage: 5Gi
|
StatefulSet示例
1.编写资源清单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| root@k8s-master01:~/yaml/chapter08 apiVersion: v1 kind: Service metadata: name: demodb namespace: default labels: app: demodb spec: clusterIP: None ports: - port: 9907 selector: app: demodb --- apiVersion: apps/v1 kind: StatefulSet metadata: name: demodb namespace: default spec: serviceName: demodb selector: matchLabels: app: demodb replicas: 2 template: metadata: labels: app: demodb spec: containers: - name: demodb-shard image: ikubernetes/demodb:v0.1 ports: - containerPort: 9907 name: db env: - name: DEMODB_DATADIR value: "/demodb/data" livenessProbe: initialDelaySeconds: 2 periodSeconds: 10 httpGet: path: /status port: db readinessProbe: initialDelaySeconds: 15 periodSeconds: 30 httpGet: path: /status?level=full port: db volumeMounts: - name: data mountPath: /demodb/data volumeClaimTemplates: - metadata: name: data spec: accessModes: ["ReadWriteOnce"] storageClassName: longhorn resources: requests: storage: 2Gi limits: storage: 5Gi
|
2.应用配置清单
1 2 3
| root@k8s-master01:~/yaml/chapter08 service/demodb created statefulset.apps/demodb created
|
3.查看pod信息
1 2 3 4 5 6 7 8 9
| root@k8s-master01:~/yaml/chapter08 NAME READY STATUS RESTARTS AGE demodb-0 1/1 Running 0 3m demodb-1 1/1 Running 0 2m demodb-2 1/1 Running 0 1m
root@k8s-master01:~/yaml/chapter08 NAME READY AGE demodb 3/3 4m
|
StatefulSet扩容
对镜像更新有3种方法:
- 修改资源配置清单后apply
- 使用kubectl set 命令
- 使用kubectl patch命令打补丁
此处示范打补丁
1 2 3 4 5 6 7 8 9 10 11 12
| root@k8s-master01:~ statefulset.apps/demodb patched
root@k8s-master01:~ NAME READY STATUS RESTARTS AGE demodb-0 1/1 Running 0 118m demodb-1 1/1 Running 0 117m demodb-2 1/1 Running 0 116m demodb-3 1/1 Running 0 106s demodb-4 0/1 Running 0 43s
|
StatefulSet缩容
1.使用patch进行缩容
1 2 3
| root@k8s-master01:~ statefulset.apps/demodb patched
|
2.查看其所关联的pvc
1 2 3 4 5 6 7 8 9
| root@k8s-master01:~ NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE data-demodb-0 Bound pvc-04997889-b711-4168-bb4c-54189c8f481f 2Gi RWO longhorn 3h30m data-demodb-1 Bound pvc-2d3e2083-659f-42ae-a289-99b2aa4199ea 2Gi RWO longhorn 3h29m data-demodb-2 Bound pvc-7017741e-4eef-42a2-8aba-409e6c680c3f 2Gi RWO longhorn 3h28m data-demodb-3 Bound pvc-2c82047a-8959-4f79-9cca-bcc0517d77da 2Gi RWO longhorn 93m data-demodb-4 Bound pvc-f5dc549c-1198-43aa-a39e-7dd36edea642 2Gi RWO longhorn 92m
|