statefulset控制器
deployment控制器:无状态应用的pod对象可以随时由其他由同一模板创建的pod平滑替代
statefulset控制器:k8s系统专门用于控制有状态应用
statefulset表示一组具有唯一持久身份和稳定主机名的pod对象,任何指定该类型pod的状态信息和其他弹性数据都存放在与该statefulset相关的永久性磁盘存储空间中。
适合部署kafka,mysql,redis,zookeeper以及其他需要唯一持久性身份和稳定主机名的应用
多数有状态应用都不支持规模性安全快速缩减操作,因此statefulset不支持并行缩容机制,而是严格遵循一次仅能终止一个pod资源的法则。
一个典型的完整可用的statefulset资源由2部分组成,headless service 和statefulset资源。前者用于为各pod固定唯一的标识符,生成可解析的dns资源记录,后者用于编排pod对象,并借助volumeClaimTemplate以静态或者动态的PV供给方式为各pod资源提供专有且固定的存储资源。删除pod对象或者statefulset控制器,并不会删除其相关的PV资源以确保数据可用性。
[root@k8s-master01 ~]# cat /yaml/demodb-statefulset.yaml apiVersion: v1 kind: Service metadata: name: demodb namespace: statefulset labels: app: demodb spec: clusterIP: None ports: - port: 9907 selector: app: demodb --- apiVersion: apps/v1 kind: StatefulSet metadata: name: demodb namespace: statefulset spec: selector: matchLabels: app: demodb serviceName: "demodb" replicas: 4 template: metadata: labels: app: demodb spec: containers: - name: demodb image: ikubernetes/demodb:v0.1 ports: - containerPort: 9907 name: db env: - name: DEMODB_DATADIR value: "/demodb/data" livenessProbe: initialDelaySeconds: 5 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: "rbd" resources: requests: storage: 1Gi [root@k8s-master01 ~]#
[root@k8s-master01 ~]# kubectl describe statefulsets/demodb -n statefulset Name: demodb Namespace: statefulset CreationTimestamp: Sun, 29 Aug 2021 15:39:31 +0800 Selector: app=demodb Labels: <none> Annotations: <none> Replicas: 4 desired | 1 total Update Strategy: RollingUpdate Partition: 0 Pods Status: 0 Running / 1 Waiting / 0 Succeeded / 0 Failed Pod Template: Labels: app=demodb Containers: demodb: Image: ikubernetes/demodb:v0.1 Port: 9907/TCP Host Port: 0/TCP Liveness: http-get http://:db/status delay=5s timeout=1s period=10s #success=1 #failure=3 Readiness: http-get http://:db/status%3Flevel=full delay=15s timeout=1s period=30s #success=1 #failure=3 Environment: DEMODB_DATADIR: /demodb/data Mounts: /demodb/data from data (rw) Volumes: <none> Volume Claims: Name: data StorageClass: rbd Labels: <none> Annotations: <none> Capacity: 1Gi Access Modes: [ReadWriteOnce] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulCreate 14m statefulset-controller create Pod demodb-0 in StatefulSet demodb successful
创建了4个副本,由于没有存储类rbd,导致pod没有运行,上面就只有一个处于waitting状态,因为statefulset控制器是在上一个pod运行起来才创建下一个pod副本
浙公网安备 33010602011771号