設(shè)計制作網(wǎng)站制作市場營銷四大基本策略
Kubernetes高級存儲
PV PVC
k8s支持的存儲系統(tǒng)很多,全部掌握不現(xiàn)實。為了屏蔽底層存儲實現(xiàn)的細節(jié),方便用戶使用,k8s引入PV和PVC兩種資源對象。
PV(Persistent Volume)持久化卷,對底層共享存儲的抽象,一般由k8s管理員進行創(chuàng)建配置,通過插件完成共享存儲的對接。
PVC(Persistent Volume Claim)持久化聲明,是用戶對于存儲需求的一種聲明。PVC就是用戶向k8s系統(tǒng)發(fā)出的一種資源需求申請。
PV
官方文檔:
Kubernetes 文檔
概念
存儲
持久卷
資源清單:
apiVersion: v1
kind: PersistentVolume
metadata:name: pv2
spec:nfs: # 存儲類型,與底層真正存儲對應(yīng)capacity: # 存儲能力,目前只支持存儲空間的設(shè)置storage: 2GiaccessModes: # 訪問模式storageClassName: # 存儲類別persistentVolumeReclaimPolicy: # 回收策略
參數(shù)說明:
-
存儲類型:
底層實際存儲的類型,kubernetes支持多種存儲類型,每種存儲類型的配置都有所差異
-
存儲能力
目前只支持存儲空間的設(shè)置( storage=1Gi )
-
訪問模式
ReadWriteOnce(RWO):讀寫權(quán)限,但是只能被單個節(jié)點掛載ReadOnlyMany(ROX): 只讀權(quán)限,可以被多個節(jié)點掛載ReadWriteMany(RWX):讀寫權(quán)限,可以被多個節(jié)點掛載
-
回收策略
Retain (保留) 保留數(shù)據(jù),需要管理員手工清理數(shù)據(jù)Recycle(回收) 清除 PV 中的數(shù)據(jù),效果相當于執(zhí)行 rm -rf /thevolume/* Delete (刪除) 與 PV 相連的后端存儲完成 volume 的刪除操作
實驗:
使用NFS作為存儲,創(chuàng)建3個PV,對應(yīng)三個暴露路徑
-
準備環(huán)境
#創(chuàng)建目錄 [root@master ~]# mkdir /root/data/{pv1,pv2,pv3} -pv mkdir: created directory ‘/root/data/pv1’ mkdir: created directory ‘/root/data/pv2’ mkdir: created directory ‘/root/data/pv3’ # 暴露服務(wù) IP網(wǎng)段是你集群節(jié)點所在的網(wǎng)段 [root@master ~]# vim /etc/exports [root@master ~]# more /etc/exports /root/data/pv1 192.168.126.0/24(rw,no_root_squash) /root/data/pv2 192.168.126.0/24(rw,no_root_squash) /root/data/pv3 192.168.126.0/24(rw,no_root_squash) #重啟服務(wù) [root@master ~]# systemctl restart nfs
-
創(chuàng)建pv.yaml
apiVersion: v1 kind: PersistentVolume metadata:name: pv1 spec:capacity: storage: 1GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /root/data/pv1server: 192.168.126.132---apiVersion: v1 kind: PersistentVolume metadata:name: pv2 spec:capacity: storage: 2GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /root/data/pv2server: 192.168.126.132---apiVersion: v1 kind: PersistentVolume metadata:name: pv3 spec:capacity: storage: 3GiaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: Retainnfs:path: /root/data/pv3server: 192.168.126.132
-
操作
[root@master ~]# vim pv.yaml #創(chuàng)建pv [root@master ~]# kubectl create -f pv.yaml persistentvolume/pv1 created persistentvolume/pv2 created persistentvolume/pv3 created #查看pv [root@master ~]# kubectl get pv -o wide NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE VOLUMEMODE pv1 1Gi RWX Retain Available 44s Filesystem pv2 2Gi RWX Retain Available 44s Filesystem pv3 3Gi RWX Retain Available 44s Filesystem
PVC
PVC是資源申請,用來聲明對存儲空間,訪問模式,存儲類別需求信息
資源清單:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pvcnamespace: dev
spec:accessModes: # 訪問模式selector: # 采用標簽對PV選擇storageClassName: # 存儲類別resources: # 請求空間requests:storage: 5Gi
參數(shù)說明:
- 訪問模式:描述用戶應(yīng)用對存儲資源的訪問權(quán)限
- 選擇條件:通過Label Selector使PVC對于系統(tǒng)中已存在的PV進行篩選
- 存儲類別:PVC定義時可設(shè)定需要的后端存儲類別
- 資源請求:描述對存儲資源的請求
實驗:
-
創(chuàng)建pvc.yaml,申請pv
apiVersion: v1 kind: PersistentVolumeClaim metadata:name: pvc1namespace: dev spec:accessModes: - ReadWriteManyresources:requests:storage: 1Gi---apiVersion: v1 kind: PersistentVolumeClaim metadata:name: pvc2namespace: dev spec:accessModes: - ReadWriteManyresources:requests:storage: 1Gi---apiVersion: v1 kind: PersistentVolumeClaim metadata:name: pvc3namespace: dev spec:accessModes: - ReadWriteManyresources:requests:storage: 1Gi
#創(chuàng)建pvc [root@master ~]# kubectl create -f pvc.yaml persistentvolumeclaim/pvc1 created persistentvolumeclaim/pvc2 created persistentvolumeclaim/pvc3 created #查看pvc [root@master ~]# kubectl get pvc -n dev -o wide NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODE pvc1 Bound pv1 1Gi RWX 14s Filesystem pvc2 Bound pv2 2Gi RWX 14s Filesystem pvc3 Bound pv3 3Gi RWX 14s Filesystem #查看pv [root@master ~]# kubectl get pv -o wide NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE VOLUMEMODE pv1 1Gi RWX Retain Bound dev/pvc1 22m Filesystem pv2 2Gi RWX Retain Bound dev/pvc2 22m Filesystem pv3 3Gi RWX Retain Bound dev/pvc3 22m Filesystem
-
創(chuàng)建pods.yaml,實驗pv
apiVersion: v1 kind: Pod metadata:name: pod1namespace: dev spec:containers:- name: busyboximage: busybox:1.30command: ["/bin/sh","-c","while true;do echo pod1 >> /root/out.txt; sleep 10; done;"]volumeMounts:- name: volumemountPath: /root/volumes:- name: volumepersistentVolumeClaim:claimName: pvc1readOnly: false --- apiVersion: v1 kind: Pod metadata:name: pod2namespace: dev spec:containers:- name: busyboximage: busybox:1.30command: ["/bin/sh","-c","while true;do echo pod2 >> /root/out.txt; sleep 10; done;"]volumeMounts:- name: volumemountPath: /root/volumes:- name: volumepersistentVolumeClaim:claimName: pvc2readOnly: false
#創(chuàng)建Pod [root@master ~]# kubectl create -f pods.yaml pod/pod1 created pod/pod2 created #查看Pod [root@master ~]# kubectl get pods -n dev -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES pod1 1/1 Running 0 103s 10.244.1.5 node1 <none> <none> pod2 1/1 Running 0 103s 10.244.2.11 node2 <none> <none> #查看PVC [root@master ~]# kubectl get pvc -n dev -o wide NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE VOLUMEMODE pvc1 Bound pv1 1Gi RWX 10m Filesystem pvc2 Bound pv2 2Gi RWX 10m Filesystem pvc3 Bound pv3 3Gi RWX 10m Filesystem #查看數(shù)據(jù)卷輸出信息 [root@master ~]# more /root/data/pv1/out.txt pod1 pod1 pod1 pod1 pod1 [root@master ~]# more /root/data/pv2/out.txt pod2 pod2 pod2 pod2 pod2#數(shù)據(jù)已經(jīng)同步
生命周期
PV和PVC一一對應(yīng),類似于鍵值對,遵循以下生命周期:
- 資源供應(yīng):手動創(chuàng)建底層存儲和PV
- 資源綁定:PV創(chuàng)建后,k8s負責根據(jù)PVC聲明去尋找PV,并綁定(如果找不到,PVC會一直處于Pending狀態(tài),直到管理員創(chuàng)建了符合要求的PV),PV一旦綁定PVC,就會被這個PVC獨占,不能再與其他PVC進行綁定
- 資源使用:可在Pod里像Volume使用數(shù)據(jù)卷
- 資源釋放:用戶刪除PVC來釋放PV