3.4 控制器——StatefulSet(状态集)

3.4 StatefulSet(状态集)

 statefulset是用于管理有状态应用程序的WorkloadAPI对象,管理Deployment和一组Pod,保证有序和Pod唯一性的。和Deployment类似,状态集StatefulSet基于一个相同的容器规格spec管理Pod,不同的是,状态集Statefuli为他们每个Pod保持一个粘性身份,Pod从同样的规范创建,但不可交换,每个都有一个持久标识符(在任何调度中都会保持标识)。状态集与任何其他控制器在相同的模式下运行,StatefulSet Controller将会做一些必要的更新使其更新到期望的状态。

【StatefulSet的使用场景】

 状态集StatefulSet对如下的应用具备价值:需要稳定、唯一网络标识的,需要稳定、持久存储的,需要有序、优雅的Deployment和扩展的,需要有序、自动滚动升级的,其中稳定是跨POD调度的持久性的同义词。如果应用不需要任何稳定标识或有序Deployment、删除、扩展,那就不需要通过创建stateful对象来创建的,可能像Deployment、ReplicaSet控制器可能更符合此时的需求。

【局限】

 为Pod提供的存储要么使由PersistentVolume Provisioner基于请求的storage class提供、要么由admin提供提供;删除或扩展状态集Stateful将不会删除相关联的volumes;当前状态集Stateful需要一个Headless Service负责网络Pod的标识;当StatefulSet删除时不提供任何终止Pod的保证,所以必须手动先缩减状态集为0,然后再删除;

【组成】

下面是一个示例:

# Headless Service,这里是Nginx
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
# 状态集
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx # has to match .spec.template.metadata.labels
  serviceName: "nginx"
  replicas: 3 # by default is 1
  template:
    metadata:
      labels:
        app: nginx # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  # 使用 PersistentVolumes 提供的存储
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "my-storage-class"
      resources:
        requests:
          storage: 1Gi

【升级策略】

.spec.updateStrategy字段可以配置容器、标签、资源等的自动滚动更新策略,当.spec.updateStrategy.type设置为OnDelete,状态集Stateful控制器将不会自动更新状态集中的Pod,用户必须手动删除Pod以便控制器可以在修改.spec.template后创建新的Pod;如果.spec.updateStrategy.type设置为RollingUpdate,状态集控制器将会删除并重新创建状态中的每个Pod。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值