RC、RS、Deployment都是适用于部署无状态服务的控制器,如微服务等。而StatefulSets控制器则用来部署有状态服务,典型的如mysql等。

适合使用StatefulSets控制器的服务包含以下特点:

  • 稳定性,唯一的网络标识符;
  • 稳定性,持久化存储;
  • 有序部署和扩展;
  • 有序删除和终止;
  • 有序的自动滚动更新。

yaml示例:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: gcr.io/google_containers/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: my-storage-class
      resources:
        requests:
          storage: 1Gi

部署后会出现web-0、web-1、web-2三个名称的副本

当web-0处于Running和Ready状态后才会开始创建web-1

部署和扩展:

具有N个副本的StatefulSet,当部署Pod时顺序是从{0..N-1}开始创建;

删除时顺序从{N-1..0}删除;

在pod执行扩展和缩放之前,前面的所有pod必须处于Running和Ready状态;

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐