Kubernetes 動態PV使用


Kubernetes 動態PV使用

Kubernetes支持動態供給的存儲插件:
https://kubernetes.io/docs/concepts/storage/storage-classes/

  • Dynamic Provisioning機制工作的核心在於StorageClass的API對象。
  • StorageClass聲明存儲插件,用於自動創建PV。

創建動態PVStorageClass

1、創建storageclass相關文件
1.1、vim storageclass-nfs.yaml:標識插件創建storageclass名稱

apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
  # StorageClass名稱
  name: managed-nfs-storage
# 默認不支持nfs存儲,添加支持web插件標識
provisioner: fuseim.pri/ifs

1.2、vim deployment-nfs.yaml:創建nfs相關存儲指定服務名稱

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: nfs-client-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      imagePullSecrets:
        - name: registry-pull-secret
      # 綁定角色定義的名稱
      serviceAccount: nfs-client-provisioner
      containers:
        # 鏡像拉取
        - name: nfs-client-provisioner
          image: lizhenliang/nfs-client-provisioner:v2.0.0
          # 自定義變量格式處理
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              # 指定標識插件的值
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              # nfs地址
              value: 192.168.1.115
            - name: NFS_PATH
              # 掛在路徑
              value: /data/nfs
      volumes:
        - name: nfs-client-root
          nfs:
            # nfs地址
            server: 192.168.1.115
            # 共享路徑
            path: /data/nfs

1.3、vim rbac.yaml:創建rbac授權apiserver

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner

---

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: nfs-client-provisioner-runner
# 角色中可以訪問的權限
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["list", "watch", "create", "update", "patch"]

---

# 角色綁定
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: run-nfs-client-provisioner
subjects:
  # 綁定角色 ServiceAccount
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io

2、創建文件

kubectl apply -f storageclass-nfs.yaml
kubectl apply -f rbac.yaml
kubectl apply -f deployment-nfs.yaml

3、查看創建的storageclass
kubectl get storageclass

NAME PROVISIONER AGE
managed-nfs-storage fuseim.pri/ifs 57s

4、查看創建的nfs容器
kubectl get pods

NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-565b4456f6-v9b97 1/1 Running 0 67s

使用動態 PV StorageClass  案例一

環境:部署mysql
1、創建yaml配置文件。vim mysql.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
    name: mysql
  # 創建service為無頭服務,標識容器
  clusterIP: None
  selector:
    app: mysql-public

---

apiVersion: apps/v1beta1
kind: StatefulSet
# 名稱
metadata:
  name: db
spec:
  # 指定service名稱
  serviceName: "mysql"
  # 標簽選擇器
  template:
    metadata:
      labels:
        app: mysql-public
    spec:
      # 鏡像容器編輯
      containers:
      - name: mysql
        image: mysql:5.7
        env:
        # 創建數據庫用戶密碼
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
        # 創建數據庫
        - name: MYSQL_DATABASE
          value: test
        # 啟用端口
        ports:
        - containerPort: 3306
        # 數據卷
        volumeMounts:
        # 掛在容器目錄
        - mountPath: "/var/lib/mysql"
          # 使用來源
          name: mysql-data
      # 使用數據卷來源
      volumes:
      # 數據卷名稱
      - name: mysql-data
        # 指定數據卷動態供給
        persistentVolumeClaim:
          # pvc動態供給名稱
          claimName: mysql-pvc

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  # pvc名稱
  name: mysql-pvc
spec:
  # 讀寫權限
  accessModes:
    - ReadWriteMany
  # 使用的存儲類
  storageClassName: managed-nfs-storage
  # 定義容量
  resources:
    requests:
      storage: 5Gi

2、創建容器

kubectl apply -f mysql.yaml

3、查看持久卷
kubectl get PersistentVolumeClaim

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-public-mysql-public-0 Bound default-mysql-public-mysql-public-0-pvc-2b4979b7-c89a-11e9-8b0e-000c29400317 2Gi RWO managed-nfs-storage 39m
mysql-pvc Bound default-mysql-pvc-pvc-b8584af2-c89d-11e9-9db0-000c292e28d6 5Gi RWX managed-nfs-storage 14m

使用動態 PV StorageClass  案例二

1、創建文件
vim sts.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx

---

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: nginx-statefulset
  namespace: default
spec:
  serviceName: nginx
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "managed-nfs-storage"
      resources:
        requests:
          storage: 1Gi

2、創建容器

kubectl create -f sts.yaml 

3、查看pod
kubectl get pods

NAME READY STATUS RESTARTS AGE
nginx-statefulset-0 1/1 Running 0 3m21s
nginx-statefulset-1 1/1 Running 0 3m16s
nginx-statefulset-2 1/1 Running 0 3m11s

4、查看動態pv,pvc存儲kubectl get pv,pvc
kubectl get pv,pvc

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/default-mysql-public-mysql-public-0-pvc-2b4979b7-c89a-11e9-8b0e-000c29400317 2Gi RWO Delete Bound default/mysql-public-mysql-public-0 managed-nfs-storage 63m
persistentvolume/default-www-nginx-statefulset-0-pvc-8063e4f9-c8a1-11e9-8b0e-000c29400317 1Gi RWO Delete Bound default/www-nginx-statefulset-0       managed-nfs-storage 11m
persistentvolume/default-www-nginx-statefulset-1-pvc-836c1466-c8a1-11e9-8b0e-000c29400317 1Gi RWO Delete Bound default/www-nginx-statefulset-1 managed-nfs-storage 11m
persistentvolume/default-www-nginx-statefulset-2-pvc-868a4a51-c8a1-11e9-8b0e-000c29400317 1Gi RWO Delete Bound default/www-nginx-statefulset-2 managed-nfs-storage 11m
persistentvolume/my-pv 5Gi RWX Retain Bound default/my-pvc 133m

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/my-pvc Bound my-pv 5Gi RWX 133m
persistentvolumeclaim/mysql-public-mysql-public-0 Bound default-mysql-public-mysql-public-0-pvc-2b4979b7-c89a-11e9-8b0e-000c29400317 2Gi RWO managed-nfs-storage 63m
persistentvolumeclaim/www-nginx-statefulset-0 Bound default-www-nginx-statefulset-0-pvc-8063e4f9-c8a1-11e9-8b0e-000c29400317 1Gi RWO managed-nfs-storage 11m
persistentvolumeclaim/www-nginx-statefulset-1 Bound default-www-nginx-statefulset-1-pvc-836c1466-c8a1-11e9-8b0e-000c29400317 1Gi RWO managed-nfs-storage 11m
persistentvolumeclaim/www-nginx-statefulset-2 Bound default-www-nginx-statefulset-2-pvc-868a4a51-c8a1-11e9-8b0e-000c29400317 1Gi RWO managed-nfs-storage 11m

5、nfs服務器會自動創建pv數據
[root@localhost nfs]# ls

default-www-nginx-statefulset-0-pvc-8063e4f9-c8a1-11e9-8b0e-000c29400317
default-www-nginx-statefulset-1-pvc-836c1466-c8a1-11e9-8b0e-000c29400317
default-www-nginx-statefulset-2-pvc-868a4a51-c8a1-11e9-8b0e-000c29400317

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM