kubernetes资源对象之statefulset

2020-04-23  本文已影响0人  一舍

StatefulSet,有状态服务集合,管理所有有状态的服务,比如MySQL、Zookeeper、Hadoop等。

管理有状态服务

​ 有状态的副本集都会用到持久化存储,对于分布式系统来讲,它的最大特点是数据是不一样的,各个节点不能使用同一存储卷,每个节点都要有自已的专用存储,所以,statefulset中的每个Pod都要自已的专有存储卷,且Pod 重新调度后还能访问到原来的持久化数据。statefulSet使用volumeClaimTemplate,为每个Pod生成不同的pvc,并绑定pv, 从而实现各pod有专用存储。删除Pod不会删除其pvc,手动删除pvc将自动释放pv。

​ 作为pod的标识符,每一个Pod的名称在statefulset中是唯一的,要求必须有序 ,且pod重建后PodName 和 HostName保持不变。statefulset基于 Headless Service来实现 ,Headless Service没有 Cluster IP ,解析它的名称时返回该Headless Service对应的全部的Pod的Endpoint列表。

​ Pod 名称是有顺序的,在收缩的时候要依据定义的顺序依次依序进行。

StatefulSet中Pod 的 DNS 格式

StatefulSet 中每个 Pod 的 DNS 格式为 :

statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local,其中

StatefulSet 中每个 Pod 的Hostname 格式为 :

statefulSetName-{0..N-1}

StatefulSet 中每个 Pod 的 PVC 格式为 :

根据volumeClaimTemplates,为每个Pod创建一个独立的pvc,pvc的命名格式为:volumeClaimTemplates.name-podName

Cluster Domain Service (ns/name) StatefulSet (ns/name) StatefulSet Domain Pod DNS Pod Hostname volumeClaimTemplates(ns/name) PVC
cluster.local default/nginx default/web nginx.default.svc.cluster.local web-{0..N-1}.nginx.default.svc.cluster.local web-{0..N-1} default/www www-web-{0..N-1}
cluster.local foo/nginx foo/web nginx.foo.svc.cluster.local web-{0..N-1}.nginx.foo.svc.cluster.local web-{0..N-1} default/www www-web-{0..N-1}

部署示例

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:
  serviceName: "nginx"
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        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
上一篇 下一篇

猜你喜欢

热点阅读