【Kubernetes存储篇】StorageClass存储类动态生成PV详解
文章目錄
- 一、StorageClass存儲類理論
- 二、案例:Storageclass存儲類實戰(zhàn)演示
- 1、搭建NFS服務(wù)端
- 2、搭建NFS供應(yīng)商(provisioner)
- 3、創(chuàng)建StorageClass存儲類
- 4、創(chuàng)建PVC,通過StorageClass動態(tài)生成PV
- 5、創(chuàng)建Pod掛載PVC
- 三、步驟總結(jié)
一、StorageClass存儲類理論
StorageClass的作用主要有以下幾個方面:
- 動態(tài)存儲卷分配:StorageClass可以根據(jù)定義的屬性動態(tài)地創(chuàng)建存儲卷,無需手動創(chuàng)建和管理存儲卷。
- 存儲卷的屬性管理:StorageClass可以定義存儲卷的屬性,如存儲類型、存儲容量、訪問模式等,從而更好地滿足應(yīng)用程序的存儲需求。
- 存儲資源的管理:StorageClass可以將存儲資源進(jìn)行分類管理,方便開發(fā)者根據(jù)應(yīng)用程序的需求進(jìn)行選擇。
每個 StorageClass 都有一個供應(yīng)商(Provisioner),用來決定使用哪個卷插件制備 PV。 該字段必須指定,官網(wǎng)提供供應(yīng)商如下表:
| AWSElasticBlockStore | ? | AWS EBS |
| AzureFile | ? | Azure File |
| AzureDisk | ? | Azure Disk |
| CephFS | - | - |
| Cinder | ? | OpenStack Cinder |
| FC | - | - |
| FlexVolume | - | - |
| GCEPersistentDisk | ? | GCE PD |
| iSCSI | - | - |
| NFS | - | NFS |
| RBD | ? | Ceph RBD |
| VsphereVolume | ? | vSphere |
| PortworxVolume | ? | Portworx Volume |
| Local | - | Local |
本文章以NFS為例,要想使用NFS,我們需要一個nfs-client的自動裝載程序,稱之為provisioner,這個程序會使用我們已經(jīng)配置好的NFS服務(wù)器自動創(chuàng)建持久卷,也就是自動幫我們創(chuàng)建PV。
二、案例:Storageclass存儲類實戰(zhàn)演示
1、搭建NFS服務(wù)端
注意:K8S集群所有Node節(jié)點都需要安裝 nfs-utils 包
yum -y install nfs-utils mkdir /data/nfs_pro -p vim /etc/exports /data/nfs_pro *(rw,no_root_squash)加載生效 && 啟動NFS服務(wù)
exportfs -arv systemctl enable nfs --now2、搭建NFS供應(yīng)商(provisioner)
第一步:創(chuàng)建運行nfs-provisioner需要使用的SA賬號
cat nfs-serviceaccount.yaml --- apiVersion: v1 kind: ServiceAccount metadata:name: nfs-provisioner執(zhí)行 YAML 文件 && 查看創(chuàng)建的 SA 賬號:
kubectl apply -f nfs-serviceaccount.yaml kubectl get sa nfs-provisioner第二步:針對SA賬號進(jìn)行授權(quán):
kubectl create clusterrolebinding nfs-provisioner-clusterrolebinding --clusterrole=cluster-admin --serviceaccount=default:nfs-provisioner第三步:安裝nfs-provisioner程序 YAML 如下:
cat nfs-deployment.yaml --- kind: Deployment apiVersion: apps/v1 metadata:name: nfs-provisioner spec:selector:matchLabels:app: nfs-provisionerreplicas: 1strategy: # 更新策略type: Recreatetemplate:metadata:labels:app: nfs-provisionerspec:serviceAccount: nfs-provisioner # 指定SA賬號containers:- name: nfs-provisionerimage: registry.cn-beijing.aliyuncs.com/mydlq/nfs-subdir-external-provisioner:v4.0.0imagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-client-rootmountPath: /persistentvolumesenv:- name: PROVISIONER_NAMEvalue: example.com/nfs # NFS供應(yīng)商名稱- name: NFS_SERVERvalue: 16.32.15.200 # NFS服務(wù)端地址- name: NFS_PATH value: /data/nfs_pro/ # NFS共享目錄volumes:- name: nfs-client-rootnfs:server: 16.32.15.200 # NFS服務(wù)端地址path: /data/nfs_pro/ # NFS共享目錄執(zhí)行YAML 文件 && 查看 Pod狀態(tài):
kubectl apply -f nfs-deployment.yaml kubectl get pods3、創(chuàng)建StorageClass存儲類
cat nfs-storageclass.yaml --- kind: StorageClass apiVersion: storage.k8s.io/v1 metadata:name: nfs provisioner: example.com/nfs # 指定NFS供應(yīng)商名稱,和上面對應(yīng)上注意:provisioner處寫的 example.com/nfs應(yīng)該跟安裝nfs provisioner時候的env下的PROVISIONER_NAME的value值保持一致。
執(zhí)行YAML文件 && 查看storageclass 狀態(tài):
kubectl apply -f nfs-storageclass.yaml kubectl get sc nfs4、創(chuàng)建PVC,通過StorageClass動態(tài)生成PV
cat nfs-pvc.yaml --- kind: PersistentVolumeClaim apiVersion: v1 metadata:name: storageclass-pvc-demo spec:accessModes: ["ReadWriteMany"]resources:requests:storage: 1GistorageClassName: nfs # 指定使用storageclass的名稱,來自動生產(chǎn)PV執(zhí)行YAML 文件 && 查看是否自動生成PV
kubectl apply -f nfs-pvc.yaml kubectl get pvc如上圖已經(jīng)自動創(chuàng)建PV,并綁定上PVC了
5、創(chuàng)建Pod掛載PVC
cat nfs-pod-demo.yaml --- apiVersion: v1 kind: Pod metadata:name: nfs-pod-demolabels:type: nfs spec:volumes:- persistentVolumeClaim: claimName: storageclass-pvc-demo # 指定PVCname: nfs-storage # 卷名稱containers:- name: nfs-pod-demoimage: nginximagePullPolicy: IfNotPresentvolumeMounts:- name: nfs-storage # 指定上面卷名稱mountPath: /usr/share/nginx/html # 容器掛載目錄執(zhí)行 YAML 文件 && 查看Pod狀態(tài):
kubectl apply -f nfs-pod-demo.yaml kubectl get pods nfs-pod-demo在 PVC 綁定宿主機目錄,創(chuàng)建 index.html 文件
echo "storageclass demo successd...." > /data/nfs_pro/default-storageclass-pvc-demo-pvc-d4e47c42-d969-44d5-983d-bf36994b6c86/index.html獲取Pod IP訪問網(wǎng)站:
kubectl get pods nfs-pod-demo -o wide三、步驟總結(jié)
1、搭建NFS服務(wù)端
2、搭建NFS供應(yīng)商,指定NFS服務(wù)端IP地址及共享目錄
3、創(chuàng)建StorageClass資源,指定使用NFS供應(yīng)商
4、創(chuàng)建PVC,使用storageClassName 自動指定使用StorageClass
5、創(chuàng)建Pod,使用PVC
總結(jié)
以上是生活随笔為你收集整理的【Kubernetes存储篇】StorageClass存储类动态生成PV详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 盘点Python的6个优势与特点
- 下一篇: 2020-11-17 1)C标准库头文件