pv和PVC,存儲卷:
存儲卷:
EmptyDir:容器內(nèi)部,隨著pod銷毀,emptyDir也會消失,不能做數(shù)據(jù)持久化
HostPath:持久化存儲數(shù)據(jù),可以和節(jié)點上目錄做掛載,pod被銷毀了數(shù)據(jù)還在
NFS:一臺機器,提供pod發(fā)起的掛載的請求
PV和PVC:
PVC就是pid發(fā)起掛載的反請求:
PV持久化存儲的目錄,ReadWriteMary
?????????????????????ReadOnlyMany
?????????????????????ReadwriteOnce
Nfs:可以支持三種方式
HostPath ReadwriteOnce
Iscsi不支持ReadwriteMany
pv的回收策略:
Retain released需要人工設(shè)置,調(diào)整回available
??????????????Recyc 回收,自動調(diào)整回available
??????????????Delete 刪除
靜態(tài)PV和PVC:
運維負責PV:創(chuàng)建好持久化存儲卷,聲明好讀寫和掛載類型,以及可以提供存儲空間
PVC開發(fā)做,要和開發(fā)溝通好,你期望的讀寫和掛載類型,以及存儲空間
當我發(fā)布PVC之后可以生成PV,還可以在共享服務器上直接生成掛載目錄
PVC直接綁定和使用PV
動態(tài)PV需要兩個組件:
- 卷插件,k8s本身支持的動態(tài)PV創(chuàng)建不包括NFS,需要聲明和安裝一個外部插件,叫做provisioner:存儲分配器,可以動態(tài)創(chuàng)建PV,然后根據(jù)PVC的請求自動綁定和使用
- StorageClass:來定義PV的屬性,存儲類型,大小回收策略
今天還是用NFS來實現(xiàn)動態(tài)PV,NFS支持的方式NFS-Client,provisioner來適配NFS-Client
NFS-Client-provisioner卷插件
架構(gòu)圖:
實驗演示:
/opt/k8s 20.0.0.0/24(rw,no_root_squash,sync)
vim /etc/exports
systemctl restart rpcbind
systemctl restart nfs
showmount -e
其他節(jié)點查看:
showmount -e 20.0.0.74
、創(chuàng)建 Service Account,用來管理 NFS Provisioner 在 k8s 集群中運行的權(quán)限,
設(shè)置 nfs-client 對 PV,PVC,StorageClass 等的規(guī)則
回到master節(jié)點:
創(chuàng)建serviceAccount:
Nfs provisioner:是一個插件,沒有權(quán)限是無法再集群當中獲取k8s的消息,插件要有權(quán)限能夠監(jiān)聽apiserver,獲取Get,list(獲取集群的列表資源)創(chuàng)建一個資源賬戶
Rbac:Role-base ACCESS CONTORL 定義角色在集群當中可以使用的權(quán)限
#創(chuàng)建集群角色
kubectl explain ClusterRole ?
#查看Kubernetes RBAC(Role-Based Access Control)的 ClusterRole 配置,
命名為 nfs-client-provisioner-clusterrole。這個 ClusterRole 定義了一組權(quán)限規(guī)則,
允許一個特定的服務賬戶(通常是用于 NFS 客戶端 Provisioner 的賬戶)執(zhí)行一些與存儲相關(guān)的操作。
#創(chuàng)建集群角色
kubectl explain ClusterRole ?
#查看Kubernetes RBAC(Role-Based Access Control)的 ClusterRole 配置,
命名為 nfs-client-provisioner-clusterrole。這個 ClusterRole 定義了一組權(quán)限規(guī)則,
允許一個特定的服務賬戶(通常是用于 NFS 客戶端 Provisioner 的賬戶)執(zhí)行一些與存儲相關(guān)的操作。
vim nfs-client-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
??name: nfs-client-provisioner
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
??name: nfs-client-provisioner-clusterrole
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"]
??- apiGroups: [""]
????resources: ["endpoints"]
????verbs: ["create", "delete", "get", "list", "watch", "patch", "update"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
??name: nfs-client-provisioner-clusterrolebinding
subjects:
- kind: ServiceAccount
??name: nfs-client-provisioner
??namespace: default
roleRef:
??kind: ClusterRole
??name: nfs-client-provisioner-clusterrole
??apiGroup: rbac.authorization.k8s.io
部署插件:
NFS-privisioner , deployment來創(chuàng)建插件pod
1.20之后有一個新的機制
SelfLink:API的資源對象之一,表示資源對象在集群當中自身的一個連結(jié),self-Link是一個唯一的標識號,可以用于標識k8s集群當中的每個資源的對象
Self Link的值是一個URL,指向該資源對象的k8s API路徑
更好的實現(xiàn)資源對象的查找和引用
部署插件之前操作:
vim /etc/kubernetes/manifests/kube-apiserver.yaml
- --feature-gates=RemoveSelfLink=false
--feature-gates:在不破壞現(xiàn)有規(guī)則以及功能基礎(chǔ)上引入新功能或者修改現(xiàn)有功能的機制,禁用不影響規(guī)則
kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
kubectl delete pods kube-apiserver -n kube-system
kubectl get pods -n kube-system | grep apiserver
#創(chuàng)建 NFS Provisioner
接下來部署NFS-privisioner插件:
NFS的provisionner的客戶端以pod的方式運行在集群當中,監(jiān)聽k8s集群當中PV的請求,然后動態(tài)的創(chuàng)建于NFS相關(guān)的PV
容器里使用的配置,在provisioner當中定義好環(huán)境變量,傳給容器,storageclass的名稱,NFS服務器的地址,NFS的目錄
vim nfs-client-provisioner.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
??name: nfs1
spec:
??replicas: 1
??selector:
????matchLabels:
??????app: nfs1
??strategy:
????type: Recreate
??template:
????metadata:
??????labels:
????????app: nfs1
????spec:
??????serviceAccountName: nfs-client-provisioner ?????????#指定Service Account賬戶
??????containers:
????????- name: nfs1
??????????image: quay.io/external_storage/nfs-client-provisioner:latest
??????????imagePullPolicy: IfNotPresent
??????????volumeMounts:
????????????- name: nfs
??????????????mountPath: /persistentvolumes
??????????env:
????????????- name: PROVISIONER_NAME
??????????????value: nfs-storage ???????????????#配置provisioner的Name,
????????????- name: NFS_SERVER
??????????????value: 20.0.0.74 ????????????#配置綁定的nfs服務器
????????????- name: NFS_PATH
??????????????value: /opt/k8s ??????????????????#配置綁定的nfs服務器目錄
??????volumes: ?????????????????????????????????#申明nfs數(shù)據(jù)卷
????????- name: nfs
??????????nfs:
????????????server: 20.0.0.74
????????????path: /opt/k8s
運行腳本
定義存儲卷相關(guān)的請求數(shù)據(jù),創(chuàng)建 StorageClass,負責建立 PVC 并調(diào)用 NFS provisioner 進行預定的工作,并讓 PV 與 PVC 建立關(guān)聯(lián)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
??name: nfs-client-storageclass
provisioner: nfs-storage
parameters:
??archiveOnDelete: "false"
reclaimPolicy: Retain
allowVolumeExpansion: true
vim nfs-client-storageclass.yaml
解析:
NAME: storageclass的名稱
PROVISIONER: 對應的創(chuàng)建PV的provision的插件
RECLAIMPOLICY:回收策略,保留
VOLUMEBINDINGMODE:卷綁定模式,immediate表示PVC請求創(chuàng)建PV時,系統(tǒng)會立即綁定一個可用的PV
WaitForFirstConsumer:第一個使用出現(xiàn)之后再綁定PV
ALLOWVOLUMEEXPANSION:表示可以在運行時對PV進行擴容
創(chuàng)建 PVC 和 Pod 測試
vim test-pvc-pod.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
??name: nfs-pvc
spec:
??accessModes:
????- ReadWriteMany
??storageClassName: nfs-client-storageclass
??resources:
????requests:
??????storage: 2Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
??name: test-storageclass-deployment
??labels:
????app: nginx1
spec:
??replicas: 1
??selector:
????matchLabels:
??????app: nginx1
??template:
????metadata:
??????labels:
????????app: nginx1
????spec:
??????containers:
??????- name: nginx1
????????image: nginx:1.22
????????volumeMounts:
????????- name: nfs-pvc
??????????mountPath: /usr/share/nginx/html
??????volumes:
??????- name: nfs-pvc
????????persistentVolumeClaim:
??????????claimName: nfs-pvc
測試
共享成功
//查看 NFS 服務器上是否生成對應的目錄,
自動創(chuàng)建的 PV 會以 ${namespace}-${pvcName}-${pvName} 的目錄格式放到 NFS 服務器上
ls /opt/k8s/
再添加一條測試,看是否能夠同時綁定多條
共享服務器查看
如何刪除恢復
再次使用時數(shù)據(jù)并沒有刪除
如何修改回收策略
沒有回收策略
動態(tài)PV的默認策略是刪除,共享目錄也會被刪除
總結(jié):動態(tài)PV
Provisioner插件---支持NFS
Stroageclass:定義PV的屬性
動態(tài)PV的默認策略是刪除,動態(tài)策略沒有回收
動態(tài)PV刪除PVC之后的狀態(tài),released文章來源:http://www.zghlxwxcb.cn/news/detail-797549.html
總的來說:文章來源地址http://www.zghlxwxcb.cn/news/detail-797549.html
- 創(chuàng)建賬號,給卷插件能夠在集群內(nèi)部運行,獲取資源,監(jiān)聽時間,創(chuàng)建,刪除,更新PV
- 創(chuàng)建插件pod,卷插件的pod創(chuàng)建PV
- Storageclass:給PV賦予權(quán)限(PVC被刪除之后的狀態(tài),以及回收策略)
- 創(chuàng)建PVC----完成
到了這里,關(guān)于k8s存儲卷-動態(tài)PV的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!