kubernetes配置之:statefulset

1、statefulset控制器的特点

  • statefulset是一个有状态副本集;

  • statefulset的的每个Pod对象都有一个专有的索引;

  • statefulset的的每个Pod对象严格按照顺序升序部署、降序终止;

  • statefulset的的每个Pod对象都有专有的存储卷;

  • 一个完整的statefulset由三个组件组成:Headless Service、StatefulSet、volumeClaimTemplate(Headless Service:为Pod资源生成可解析的DNS资源记录、StatefulSet:管控Pod资源、volumeClaimTemplate:基于动态或静态的PV为Pod资源提供专有固定的存储)

  • 动态存储卷供给时,statefulset控制器会为每个volumclaim模板创建一个专有的PV,它从模板中指定的storageclass中每个PVC创建PV;静态存储卷供给时,需要管理员事先创建好满足的PV。

2、创建PV

静态PV供给时需要管理员事先创建好满足条件的PV;

[root@k8s-master-01 statefulset]# cat pv-nfs-statefulset.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: statefulset
---
apiVersion: v1
kind: PersistentVolume
metadata:
    name: statefulset-nfs-pv1
    namespace: statefulset
spec:
    capacity:
      storage: 2Gi
    accessModes:
      - ReadWriteMany
    persistentVolumeReclaimPolicy: Retain
    storageClassName: nfsv1
    nfs:
      path: data/pv-nfs/pv-1
      server: k8s-nfs 
---
apiVersion: v1
kind: PersistentVolume
metadata:
    name: statefulset-nfs-pv2
    namespace: statefulset
spec:
    capacity:
      storage: 2Gi
    accessModes:
      - ReadWriteMany
    persistentVolumeReclaimPolicy: Retain
    storageClassName: nfsv1
    nfs:
      path: data/pv-nfs/pv-2
      server: k8s-nfs
[root@k8s-master-01 statefulset]# kubectl get pv
NAME                  CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                           STORAGECLASS   REASON   AGE
statefulset-nfs-pv1   2Gi        RWX            Retain           Bound    statefulset/myappdata-myapp-0   nfsv1                   19m
statefulset-nfs-pv2   2Gi        RWX            Retain           Bound    statefulset/myappdata-myapp-1   nfsv1                   19m

3、创建statefulset资源并利用NFS静态供给PV

  • statefulset控制器会自动创建一个PVC申请绑定与volumeClaimTemplate.storageClassName对应的PV;

  • statefulset对象引用静态PV时,PV类型资源对象中的spec.accessMode值需要与volumeClaimTemplate.accessMode的值完全一致,否者statefulset对象会一直处于pending状态;

[root@k8s-master-01 statefulset]# cat statefulset-deamon.yaml 
apiVersion: v1
kind: Service
metadata:
  name: myapp-svc
  namespace: statefulset
  labels:
    app: myapp-svc
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: myapp-pod
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: myapp
  namespace: statefulset
spec:
  serviceName: myapp-svc
  replicas: 2
  selector:
    matchLabels:
      app: myapp-pod
  template:
    metadata:
      labels:
        app: myapp-pod
    spec:
      containers:
      - name: myapp
        image: nginx:1.12-alpine
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: myappdata
          mountPath: usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: myappdata
    spec:
      accessModes: [ "ReadWriteMany" ]
      storageClassName: nfsv1
      resources:
        requests:
          storage: 2Gi
[root@k8s-master-01 statefulset]# kubectl get pvc -n statefulset
NAME                STATUS   VOLUME                CAPACITY   ACCESS MODES   STORAGECLASS   AGE
myappdata-myapp-0   Bound    statefulset-nfs-pv1   2Gi        RWX            nfsv1          19m
myappdata-myapp-1   Bound    statefulset-nfs-pv2   2Gi        RWX            nfsv1          19m


[root@k8s-master-01 statefulset]# kubectl get pods -n statefulset -o wide
NAME      READY   STATUS    RESTARTS   AGE   IP            NODE            NOMINATED NODE   READINESS GATES
myapp-0   1/1     Running   0         
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值