zoukankan      html  css  js  c++  java
  • 09-kubernetes StatefulSet

    StatefulSet

    有状态应用副本集
    

    无状态的, 更关注的是群体

    有状态的, 更关注的是个体

    有状态应用集的特点:

    1. 稳定且需要唯一的网络标识符;
    2. 稳定且持久的存储;
    3. 要求有序, 平滑的部署和扩展;
    4. 要求有序, 平滑的删除和终止;
    5. 有序的滚动更新;

    需要有三个组件组成:

    1. headless service
    2. StatefulSet 控制器
    3. volumeClaimTemplate 存储卷申请模板

    简单测试 使用 StatefulSet

    创建基础的PV

    [root@master configmap]# cat ../volume/pv-demo.yaml 
    apiVersion: v1
    kind: PersistentVolume
    metadata: 
      name: pv001
      labels:
        name: pv001
    spec:
      nfs:
        path: /data/volumes/v1
        server: 10.0.20.20
      accessModes: ["ReadWriteMany", "ReadWriteOnce"]
      capacity:
        storage: 5Gi
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata: 
      name: pv002
      labels:
        name: pv002
    spec:
      nfs:
        path: /data/volumes/v2
        server: 10.0.20.20
      accessModes: ["ReadWriteOnce"]
      capacity:
        storage: 5Gi
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata: 
      name: pv003
      labels:
        name: pv003
    spec:
      nfs:
        path: /data/volumes/v3
        server: 10.0.20.20
      accessModes: ["ReadWriteMany", "ReadWriteOnce"]
      capacity:
        storage: 5Gi
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata: 
      name: pv004
      labels:
        name: pv004
    spec:
      nfs:
        path: /data/volumes/v4
        server: 10.0.20.20
      accessModes: ["ReadWriteMany", "ReadWriteOnce"]
      capacity:
        storage: 10Gi
    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata: 
      name: pv005
      labels:
        name: pv005
    spec:
      nfs:
        path: /data/volumes/v5
        server: 10.0.20.20
      accessModes: ["ReadWriteMany", "ReadWriteOnce"]
      capacity:
        storage: 10Gi
    [root@master volume]# kubectl apply -f pv-demo.yaml 
    persistentvolume/pv001 created
    persistentvolume/pv002 created
    persistentvolume/pv003 created
    persistentvolume/pv004 created
    persistentvolume/pv005 created
    [root@master volume]# kubectl get pv -o wide
    NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE   VOLUMEMODE
    pv001   5Gi        RWO,RWX        Retain           Available                                   5s    Filesystem
    pv002   5Gi        RWO            Retain           Available                                   5s    Filesystem
    pv003   5Gi        RWO,RWX        Retain           Available                                   5s    Filesystem
    pv004   10Gi       RWO,RWX        Retain           Available                                   5s    Filesystem
    pv005   10Gi       RWO,RWX        Retain           Available                                   5s    Filesystem
    

    StatefulSet 清单

    [root@master manifests]# cat statefulset-demo.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: myapp-svc
      namespace: default
      labels:
        app: myapp                  # service 名称
    spec:
      ports:
      - port: 80
        name: web
      clusterIP: None               # 配置headless service
      selector:
        app: myapp-pod              # 匹配Pod 标签
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: myapp
    spec:
      serviceName: myapp            # 名称
      replicas: 3                   # 三个副本
      selector:
        matchLabels:
          app: myapp-pod            # 匹配Pod 
      template:
        metadata:
          labels:
            app: myapp-pod
        spec:
          containers:
          - name: myapp
            image: ikubernetes/myapp:v1
            ports:
            - containerPort: 80
              name: web
            volumeMounts:
            - name: myappdata
              mountPath: /usr/shar/nginx/html
      volumeClaimTemplates:
      - metadata:
          name: myappdata                   # pvc名称
        spec:
          accessModes: ["ReadWriteOnce"]    # 权限
          resources:
            requests:
              storage: 5Gi                  # pv 大小
    

    创建

    [root@master manifests]# kubectl apply -f statefulset-demo.yaml 
    service/myapp-svc unchanged
    statefulset.apps/myapp created
    [root@master manifests]# kubectl get sts
    NAME    READY   AGE
    myapp   3/3     5s
    [root@master manifests]# kubectl get pods
    NAME      READY   STATUS    RESTARTS   AGE
    myapp-0   1/1     Running   0          92s
    myapp-1   1/1     Running   0          91s
    myapp-2   1/1     Running   0          32s
    

    StatefulSet 会自动创建pvc, 然后去绑定对应符合要求的PV

    [root@master manifests]# kubectl get pvc
    NAME                STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    myappdata-myapp-0   Bound    pv002    5Gi        RWO                           2m42s
    myappdata-myapp-1   Bound    pv003    5Gi        RWO,RWX                       66s
    myappdata-myapp-2   Bound    pv001    5Gi        RWO,RWX                       7s
    [root@master manifests]# kubectl get pv
    NAME    CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                       STORAGECLASS   REASON   AGE
    pv001   5Gi        RWO,RWX        Retain           Bound       default/myappdata-myapp-2                           20m
    pv002   5Gi        RWO            Retain           Bound       default/myappdata-myapp-0                           20m
    pv003   5Gi        RWO,RWX        Retain           Bound       default/myappdata-myapp-1                           20m
    pv004   10Gi       RWO,RWX        Retain           Available                                                       20m
    pv005   10Gi       RWO,RWX        Retain           Available                                                       20m
    

    最后, 声明式创建的, 可以使用 kubectl patch 命令 或者 kubectl set image 等命令对StatefulSet进行修改.

  • 相关阅读:
    Autofs
    markdown 基本语法
    Why Linux Doesn’t Need Defragmenting
    How to reconfigure installed dpkg package (tzdata, locales)
    weblogic性能监控
    exec
    在Oracle中查询表的大小
    hadoop主要概念的理解和学习
    ORACLE ASM中查询表空间使用情况、数据文件路径、裸设备磁盘总大小剩余大小
    linux 查看内存和cpu占用比较多的进程
  • 原文地址:https://www.cnblogs.com/winstom/p/11316616.html
Copyright © 2011-2022 走看看