Kubernetes支持動態供給的存儲插件:
https://kubernetes.io/docs/concepts/storage/storage-classes/html
一、建立storageclass相關文件
1.一、vim storageclass-nfs.yaml:標識插件建立storageclass名稱mysql
apiVersion: storage.k8s.io/v1beta1 kind: StorageClass metadata: # StorageClass名稱 name: managed-nfs-storage # 默認不支持nfs存儲,添加支持web插件標識 provisioner: fuseim.pri/ifs
1.二、vim deployment-nfs.yaml:建立nfs相關存儲指定服務名稱nginx
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.三、vim rbac.yaml:建立rbac受權apiserverweb
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
二、建立文件sql
kubectl apply -f storageclass-nfs.yaml kubectl apply -f rbac.yaml kubectl apply -f deployment-nfs.yaml
三、查看建立的storageclass
kubectl get storageclass數據庫
NAME PROVISIONER AGE
managed-nfs-storage fuseim.pri/ifs 57s
四、查看建立的nfs容器
kubectl get podsvim
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-565b4456f6-v9b97 1/1 Running 0 67s
環境:部署mysql
一、建立yaml配置文件。vim mysql.yamlapi
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
二、建立容器服務器
kubectl apply -f mysql.yaml
三、查看持久卷
kubectl get PersistentVolumeClaimapp
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
一、建立文件
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
二、建立容器
kubectl create -f sts.yaml
三、查看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
四、查看動態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
五、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