前言
本文為「Kubernetes 實作手冊:基礎入門篇」課程的學習筆記。
簡介
StorageClass 可以用於動態分配 PersistentVolume 使用。
實作
以下使用 kind 的環境,並安裝好 NFS 伺服器。
1 2
| cd vagrant/kind vagrant ssh
|
使用 ifconfig
指令查詢虛擬機的 IP 位址。
查看範例資料夾中的 NFS Client Provisioner 的 Deployment 配置檔。
1
| cat introduction/storage/pv_pvc/pv.yaml
|
配置檔如下,將 NFS Server 的 IP 位址修改為虛擬機的 IP 位址:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| kind: Deployment apiVersion: apps/v1 metadata: name: nfs-client-provisioner spec: replicas: 1 selector: matchLabels: app: nfs-client-provisioner strategy: type: Recreate template: metadata: labels: app: nfs-client-provisioner spec: serviceAccountName: nfs-client-provisioner containers: - name: nfs-client-provisioner image: quay.io/external_storage/nfs-client-provisioner:latest volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME value: fuseim.pri/ifs - name: NFS_SERVER value: 172.18.0.1 - name: NFS_PATH value: /nfsshare volumes: - name: nfs-client-root nfs: server: 172.18.0.1 path: /nfsshare
|
使用配置檔創建 Role 和 Deployment 資源。
1 2
| kubectl apply -f introduction/storage/storageclass/nfs_provisioner/rbac.yaml kubectl apply -f introduction/storage/storageclass/nfs_provisioner/deploy.yaml
|
查看範例資料夾中的 StorageClass 配置檔。
1
| cat introduction/storage/storageclass/nfs_provisioner/sc.yaml
|
配置檔如下:
1 2 3 4 5 6 7
| apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: managed-nfs-storage provisioner: fuseim.pri/ifs parameters: archiveOnDelete: "false"
|
使用配置檔創建 StorageClass 資源。
1
| kubectl apply -f introduction/storage/storageclass/nfs_provisioner/sc.yaml
|
查看 StorageClass 列表。
1 2 3
| kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE managed-nfs-storage fuseim.pri/ifs Delete Immediate false 25s
|
查看範例資料夾中的第一個 Pod 配置檔。
1
| cat introduction/storage/storageclass/pod.yaml
|
配置檔如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| apiVersion: v1 kind: Pod metadata: name: pv-debug-server spec: containers: - image: hwchiu/netutils imagePullPolicy: Always name: debug-server volumeMounts: - mountPath: /test name: data-pvc volumes: - name: data-pvc persistentVolumeClaim: claimName: pvc-nfs --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nfs spec: storageClassName: "managed-nfs-storage" accessModes: - ReadWriteMany resources: requests: storage: 1Mi
|
查看範例資料夾中的第二個 Pod 配置檔。
1
| cat introduction/storage/storageclass/pod-2.yaml
|
配置檔如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| apiVersion: v1 kind: Pod metadata: name: pv-debug-server-2 spec: containers: - image: hwchiu/netutils imagePullPolicy: Always name: debug-server volumeMounts: - mountPath: /test name: data-pvc volumes: - name: data-pvc persistentVolumeClaim: claimName: pvc-nfs-2 --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-nfs-2 spec: storageClassName: "managed-nfs-storage" accessModes: - ReadWriteMany resources: requests: storage: 1Mi
|
查看 PVC 列表。
查看 PV 列表。
查看 /nfsshare
資料夾,可以看到新增了 2 個對應的資料夾。
參考資料