主頁 > 作業系統 > Kubernetes K8S之存盤Volume詳解

Kubernetes K8S之存盤Volume詳解

2020-10-23 07:38:21 作業系統

 

K8S之存盤PV-PVC概述與說明,并詳解常用PV-PVC示例

 

概述

與管理計算實體相比,管理存盤是一個明顯的問題,PersistentVolume子系統為用戶和管理員提供了一個API,該API從如何使用存盤中抽象出如何提供存盤的詳細資訊,為此,我們引入了兩個新的API資源:PersistentVolume和PersistentVolumeClaim

 

PV概述

PersistentVolume (PV)是集群中由管理員提供或使用存盤類動態提供的一塊存盤,它是集群中的資源,就像節點是集群資源一樣,

PV是與Volumes類似的卷插件,但其生命周期與使用PV的任何單個Pod無關,由此API物件捕獲存盤的實作細節,不管是NFS、iSCSI還是特定于云提供商的存盤系統,

 

PVC概述

PersistentVolumeClaim (PVC) 是用戶對存盤的請求,它類似于Pod;Pods消耗節點資源,而PVC消耗PV資源,Pods可以請求特定級別的資源(CPU和記憶體),Claim可以請求特定的存盤大小和訪問模式(例如,它們可以掛載一次讀寫或多次只讀),

雖然PersistentVolumeClaims (PVC) 允許用戶使用抽象的存盤資源,但是用戶通常需要具有不同屬性(比如性能)的PersistentVolumes (PV) 來解決不同的問題,集群管理員需要能夠提供各種不同的PersistentVolumes,這些卷在大小和訪問模式之外還有很多不同之處,也不向用戶公開這些卷是如何實作的細節,對于這些需求,有一個StorageClass資源,

 

volume 和 claim的生命周期

PV是集群中的資源,PVC是對這些資源的請求,并且還充當對資源的宣告檢查,PV和PVC之間的互動遵循以下生命周期:

 

供應

有兩種方式配置PV:靜態的或動態的,

 

靜態配置

集群管理員創建一些PV,它們帶有可供集群用戶使用的實際存盤的詳細資訊,存在于Kubernetes API中,可供使用,

 

動態配置

當管理員創建的靜態PV沒有一個與用戶的PersistentVolumeClaim匹配時,集群可能會嘗試動態地為PVC提供一個卷,此配置基于StorageClasses:PVC必須請求存盤類,并且管理員必須已經創建并配置了該類,才能進行動態配置,宣告該類為 "",可以有效地禁用其動態配置,

要啟用基于存盤級別的動態存盤配置,集群管理員需要啟用API Server上的DefaultStorageClass[準入控制器],例如,通過確保DefaultStorageClass位于API Server組件的 --enable-admission-plugins標志,使用逗號分隔的有序值串列中,可以完成此操作,

 

系結

用戶創建(或者在動態配置的情況下,已經創建)具有特定存盤請求量(大小)和特定訪問模式的PersistentVolumeClaim,主控制器中的控制回圈監視新的PV,找到匹配的PV(如果可能的話),并將它們系結在一起,如果PV為新的PVC動態配置,那么回圈始終將該PV系結到PVC,否則,用戶始終至少得到他們所要求的,但是存盤量可能會超過所要求的范圍,

一旦系結,無論是如何系結的,PersistentVolumeClaim系結都是互斥的,PVC到PV的系結是一對一的映射,使用ClaimRef,它是PersistentVolume和PersistentVolumeClaim之間的雙向系結,

如果不存在匹配的卷,宣告(Claims)將無限期保持未系結,隨著匹配量的增加,宣告將受到約束,例如,配備有許多50Gi PV的群集將與請求100Gi的PVC不匹配,當將100Gi PV添加到群集時,可以系結PVC,

注意:靜態時PVC與PV系結時會根據storageClassName(存盤類名稱)和accessModes(訪問模式)判斷哪些PV符合系結需求,然后再根據存盤量大小判斷,首先存PV儲量必須大于或等于PVC宣告量;其次就是PV存盤量越接近PVC宣告量,那么優先級就越高(PV量越小優先級越高),

 

使用

Pods使用宣告(claims)作為卷,集群檢查宣告以找到系結卷并為Pod掛載該卷,對于支持多種訪問模式的卷,用戶在其宣告中作為Pod中卷使用時指定所需的模式,

一旦用戶擁有一個宣告并且該宣告被系結,則系結的PV就屬于該用戶,用戶通過在Pod的卷塊中包含的persistentVolumeClaim部分來調度Pods并訪問其宣告的PV,

 

持久化宣告保護

“使用中的存盤物件保護” :該功能的目的是確保在Pod活動時使用的PersistentVolumeClaims (PVC)和系結到PVC的PersistentVolume (PV)不會從系統中洗掉,因為這可能會導致資料丟失,

如果用戶洗掉了Pod正在使用的PVC,則不會立即洗掉該PVC;PVC的清除被推遲,直到任何Pod不再主動使用PVC,另外,如果管理員洗掉系結到PVC的PV,則不會立即洗掉該PV;PV的去除被推遲,直到PV不再與PVC結合,

 

回收策略

當用戶處理完他們的卷時,他們可以從允許回收資源的API中洗掉PVC物件,PersistentVolume的回收策略告訴集群在釋放卷的宣告后該如何處理它,目前,卷可以被保留、回識訓洗掉

 

Retain (保留)

保留回收策略允許手動回收資源,當PersistentVolumeClaim被洗掉時,PersistentVolume仍然存在,并且該卷被認為是“釋放”的,但是,由于之前宣告的資料仍然存在,因此另一個宣告尚無法得到,管理員可以手動回收卷,

 

Delete (洗掉)

對于支持Delete回收策略的卷插件,洗掉操作會同時從Kubernetes中洗掉PersistentVolume物件以及外部基礎架構中的關聯存盤資產,例如AWS EBS,GCE PD,Azure Disk或Cinder卷,動態配置的卷將繼承其StorageClass的回收策略,默認為Delete,管理員應根據用戶的期望配置StorageClass,

 

Recycle (回收)

如果基礎卷插件支持,Recycle回收策略將rm -rf /thevolume/*對該卷執行基本的擦除并使其可用于新的宣告,

 

Persistent Volumes型別

PersistentVolume型別作為插件實作,Kubernetes當前支持以下插件:

 1 GCEPersistentDisk
 2 AWSElasticBlockStore
 3 AzureFile
 4 AzureDisk
 5 CSI
 6 FC (Fibre Channel)
 7 FlexVolume
 8 Flocker
 9 NFS
10 iSCSI
11 RBD (Ceph Block Device)
12 CephFS
13 Cinder (OpenStack block storage)
14 Glusterfs
15 VsphereVolume
16 Quobyte Volumes
17 HostPath (僅用于單節點測驗——本地存盤不受任何方式的支持,也不能在多節點集群中作業)
18 Portworx Volumes
19 ScaleIO Volumes
20 StorageOS

 

PV示例與引數說明

PV示例

 1 apiVersion: v1
 2 kind: PersistentVolume
 3 metadata:
 4   name: pv0003
 5 spec:
 6   capacity:
 7     storage: 5Gi
 8   volumeMode: Filesystem
 9   accessModes:
10     - ReadWriteOnce
11   persistentVolumeReclaimPolicy: Recycle
12   storageClassName: slow
13   mountOptions:
14     - hard
15     - nfsvers=4.1
16   nfs:
17     path: /tmp
18     server: 172.17.0.2

Capacity:通常,PV將具有特定的存盤容量設定,當前,存盤大小是可以設定或請求的唯一資源,將來的屬性可能包括IOPS,吞吐量等,

volumeMode:可選引數,為Filesystem或Block,Filesystem是volumeMode省略引數時使用的默認模式,

accessModes:PersistentVolume可以通過資源提供者支持的任何方式安裝在主機上,如下文表中所示,提供商將具有不同的功能,并且每個PV的訪問模式都將設定為該特定卷支持的特定模式,例如,NFS可以支持多個讀/寫客戶端,但是特定的NFS PV可能以只讀方式在服務器上匯出,每個PV都有自己的一組訪問模式,用于描述該特定PV的功能,

訪問方式為:

1 ReadWriteOnce-該卷可以被單個節點以讀寫方式掛載
2 ReadOnlyMany-該卷可以被許多節點以只讀方式掛載
3 ReadWriteMany-該卷可以被多個節點以讀寫方式掛載

 

在CLI命令列中,訪問模式縮寫為:

1 RWO-ReadWriteOnce
2 ROX-ReadOnlyMany
3 RWX-ReadWriteMany

說明:一個卷一次只能使用一種訪問模式掛載,即使它支持多種訪問模式,

storageClassName:PV可以有一個類,通過將storageClassName屬性設定為一個StorageClass的名稱來指定這個類,特定類的PV只能系結到請求該類的PVC,沒有storageClassName的PV沒有類,只能系結到不請求特定類的PVC,

persistentVolumeReclaimPolicy:當前的回收政策是:Retain (保留)-手動回收、Recycle (回收)-基本擦除(rm -rf /thevolume/*)、Delete (洗掉)-洗掉相關的存盤資產 (例如AWS EBS,GCE PD,Azure Disk或OpenStack Cinder卷),

備注:當前,僅NFS和HostPath支持回收,AWS EBS,GCE PD,Azure Disk和Cinder卷支持洗掉,

 

PV卷狀態

卷將處于以下某種狀態:

  • Available:尚未系結到宣告(claim)的空閑資源
  • Bound:卷已被宣告系結
  • Released:宣告已被洗掉,但群集尚未回收該資源
  • Failed:該卷自動回收失敗

CLI將顯示系結到PV的PVC的名稱,

 

PV型別與支持的訪問模式

Volume PluginReadWriteOnceReadOnlyManyReadWriteMany
AWSElasticBlockStore ? - -
AzureFile ? ? ?
AzureDisk ? - -
CephFS ? ? ?
Cinder ? - -
CSI depends on the driver depends on the driver depends on the driver
FC ? ? -
FlexVolume ? ? depends on the driver
Flocker ? - -
GCEPersistentDisk ? ? -
Glusterfs ? ? ?
HostPath ? - -
iSCSI ? ? -
Quobyte ? ? ?
NFS ? ? ?
RBD ? ? -
VsphereVolume ? - - (works when Pods are collocated)
PortworxVolume ? - ?
ScaleIO ? ? -
StorageOS ? - -

 

PV-PVC示例

主機資訊

服務器名稱(hostname)系統版本配置內網IP外網IP(模擬)部署模塊
k8s-master CentOS7.7 2C/4G/20G 172.16.1.110 10.0.0.110 k8s-master
k8s-node01 CentOS7.7 2C/4G/20G 172.16.1.111 10.0.0.111 k8s-node
k8s-node02 CentOS7.7 2C/4G/20G 172.16.1.112 10.0.0.112 k8s-node
k8s-node03 CentOS7.7 2C/2G/20G 172.16.1.113 10.0.0.113 NFS

存盤使用NFS,在k8s-node03機器區域署NFS服務,沒有部署K8S

 

NFS服務部署

文章參考:「NFS 服務搭建與配置」

所有機器操作

1 # 所需安裝包
2 yum install nfs-utils rpcbind -y

 

NFS服務端k8s-node03機器操作

 1 [root@k8s-node03 ~]# mkdir -p /data/nfs1 /data/nfs2 /data/nfs3 /data/nfs4 /data/nfs5 /data/nfs6
 2 [root@k8s-node03 ~]# chown -R nfsnobody.nfsnobody /data/  
 3 [root@k8s-node03 ~]# 
 4 [root@k8s-node03 ~]# ll /data/
 5 total 0
 6 drwxr-xr-x 2 nfsnobody nfsnobody 6 Jun 14 16:30 nfs1
 7 drwxr-xr-x 2 nfsnobody nfsnobody 6 Jun 14 16:30 nfs2
 8 drwxr-xr-x 2 nfsnobody nfsnobody 6 Jun 14 16:30 nfs3
 9 drwxr-xr-x 2 nfsnobody nfsnobody 6 Jun 14 16:30 nfs4
10 drwxr-xr-x 2 nfsnobody nfsnobody 6 Jun 14 16:30 nfs5
11 drwxr-xr-x 2 nfsnobody nfsnobody 6 Aug 22 16:25 nfs6
12 [root@k8s-node03 ~]# vim /etc/exports
13 /data/nfs1  172.16.1.0/24(rw,sync,root_squash,all_squash)
14 /data/nfs2  172.16.1.0/24(rw,sync,root_squash,all_squash)
15 /data/nfs3  172.16.1.0/24(rw,sync,root_squash,all_squash)
16 /data/nfs4  172.16.1.0/24(rw,sync,root_squash,all_squash)
17 /data/nfs5  172.16.1.0/24(rw,sync,root_squash,all_squash)
18 /data/nfs6  172.16.1.0/24(rw,sync,root_squash,all_squash)
19 ### 啟動NFS服務
20 [root@k8s-node03 ~]# systemctl start rpcbind.service  
21 [root@k8s-node03 ~]# systemctl start nfs.service 
22 ### 檢查NFS服務 , 其中 172.16.1.113 為服務端IP
23 [root@k8s-node03 ~]# showmount -e 172.16.1.113
24 Export list for 172.16.1.113:
25 /data/nfs6 172.16.1.0/24
26 /data/nfs5 172.16.1.0/24
27 /data/nfs4 172.16.1.0/24
28 /data/nfs3 172.16.1.0/24
29 /data/nfs2 172.16.1.0/24
30 /data/nfs1 172.16.1.0/24

 

NFS客戶端驗證

在k8s-node02機器驗證

1 # 查看rpcbind服務,默認是啟動的,如果沒有啟動則啟動并加入開機自啟動
2 [root@k8s-node02 ~]# systemctl status rpcbind.service
3 # 查看NFS服務資訊
4 [root@k8s-node02 ~]# showmount -e 172.16.1.113
5 ………………
6 # 掛載,并進行讀寫驗證
7 [root@k8s-node02 ~]# mount -t nfs 172.16.1.113:/data/nfs1 /mnt
8 # 驗證完畢,去掉NFS掛載
9 [root@k8s-node02 ~]# umount -lf 172.16.1.113:/data/nfs1

 

PV部署

yaml檔案

 1 [root@k8s-master pv-pvc]# pwd
 2 /root/k8s_practice/pv-pvc
 3 [root@k8s-master pv-pvc]# cat pv.yaml 
 4 apiVersion: v1
 5 kind: PersistentVolume
 6 metadata:
 7   name: pv-nfs1
 8 spec:
 9   capacity:
10     storage: 1Gi
11   accessModes:
12     - ReadWriteOnce
13   persistentVolumeReclaimPolicy: Recycle
14   storageClassName: nfs
15   nfs:
16     path: /data/nfs1
17     server: 172.16.1.113
18 ---
19 apiVersion: v1
20 kind: PersistentVolume
21 metadata:
22   name: pv-nfs2
23 spec:
24   capacity:
25     storage: 3Gi
26   accessModes:
27     - ReadWriteOnce
28   persistentVolumeReclaimPolicy: Recycle
29   storageClassName: nfs
30   nfs:
31     path: /data/nfs2
32     server: 172.16.1.113
33 ---
34 apiVersion: v1
35 kind: PersistentVolume
36 metadata:
37   name: pv-nfs3
38 spec:
39   capacity:
40     storage: 5Gi
41   accessModes:
42     - ReadWriteOnce
43   persistentVolumeReclaimPolicy: Recycle
44   storageClassName: slow
45   nfs:
46     path: /data/nfs3
47     server: 172.16.1.113
48 ---
49 apiVersion: v1
50 kind: PersistentVolume
51 metadata:
52   name: pv-nfs4
53 spec:
54   capacity:
55     storage: 10Gi
56   accessModes:
57     - ReadWriteOnce
58   persistentVolumeReclaimPolicy: Recycle
59   storageClassName: nfs
60   nfs:
61     path: /data/nfs4
62     server: 172.16.1.113
63 ---
64 apiVersion: v1
65 kind: PersistentVolume
66 metadata:
67   name: pv-nfs5
68 spec:
69   capacity:
70     storage: 5Gi
71   accessModes:
72     - ReadWriteMany
73   persistentVolumeReclaimPolicy: Recycle
74   storageClassName: nfs
75   nfs:
76     path: /data/nfs5
77     server: 172.16.1.113
78 ---
79 apiVersion: v1
80 kind: PersistentVolume
81 metadata:
82   name: pv-nfs6
83 spec:
84   capacity:
85     storage: 5Gi
86   accessModes:
87     - ReadWriteOnce
88   persistentVolumeReclaimPolicy: Recycle
89   storageClassName: nfs
90   nfs:
91     path: /data/nfs6
92     server: 172.16.1.113

 

啟動PV,并查看狀態

 1 [root@k8s-master pv-pvc]# kubectl apply -f pv.yaml 
 2 persistentvolume/pv-nfs1 created
 3 persistentvolume/pv-nfs2 created
 4 persistentvolume/pv-nfs3 created
 5 persistentvolume/pv-nfs4 created
 6 persistentvolume/pv-nfs5 created
 7 persistentvolume/pv-nfs6 created
 8 [root@k8s-master pv-pvc]# 
 9 [root@k8s-master pv-pvc]# kubectl get pv -o wide
10 NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE   VOLUMEMODE
11 pv-nfs1   1Gi        RWO            Recycle          Available           nfs                     11s   Filesystem
12 pv-nfs2   3Gi        RWO            Recycle          Available           nfs                     11s   Filesystem
13 pv-nfs3   5Gi        RWO            Recycle          Available           slow                    11s   Filesystem
14 pv-nfs4   10Gi       RWO            Recycle          Available           nfs                     11s   Filesystem
15 pv-nfs5   5Gi        RWX            Recycle          Available           nfs                     11s   Filesystem
16 pv-nfs6   5Gi        RWO            Recycle          Available           nfs                     11s   Filesystem

 

StatefulSet創建并使用PVC

StatefulSet 需要 headless 服務 來負責 Pod 的網路標識,因此需要負責創建此服務,

yaml檔案

 1 [root@k8s-master pv-pvc]# pwd
 2 /root/k8s_practice/pv-pvc
 3 [root@k8s-master pv-pvc]# cat sts-pod-pvc.yaml 
 4 apiVersion: v1
 5 kind: Service
 6 metadata:
 7   name: nginx
 8   labels:
 9     app: nginx
10 spec:
11   ports:
12   - port: 80
13     name: web
14   clusterIP: None
15   selector:
16     app: nginx
17 ---
18 apiVersion: apps/v1
19 kind: StatefulSet
20 metadata:
21   name: web
22 spec:
23   selector:
24     matchLabels:
25       app: nginx # has to match .spec.template.metadata.labels
26   serviceName: "nginx"
27   replicas: 3 # by default is 1
28   template:
29     metadata:
30       labels:
31         app: nginx # has to match .spec.selector.matchLabels
32     spec:
33       terminationGracePeriodSeconds: 100
34       containers:
35       - name: nginx
36         image: registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17
37         ports:
38         - containerPort: 80
39           name: web
40         volumeMounts:
41         - name: www
42           mountPath: /usr/share/nginx/html
43   volumeClaimTemplates:
44   - metadata:
45       name: www
46     spec:
47       accessModes: [ "ReadWriteOnce" ]
48       storageClassName: "nfs"
49       resources:
50         requests:
51           storage: 3Gi

 

啟動pod并查看狀態

 1 [root@k8s-master pv-pvc]# kubectl apply -f sts-pod-pvc.yaml 
 2 service/nginx created
 3 statefulset.apps/web created
 4 [root@k8s-master pv-pvc]# 
 5 [root@k8s-master pv-pvc]# kubectl get svc -o wide
 6 NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE   SELECTOR
 7 kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   24d   <none>
 8 nginx        ClusterIP   None         <none>        80/TCP    17s   app=nginx
 9 [root@k8s-master pv-pvc]# 
10 [root@k8s-master pv-pvc]# kubectl get sts -o wide
11 NAME   READY   AGE   CONTAINERS   IMAGES
12 web    3/3     82m   nginx        registry.cn-beijing.aliyuncs.com/google_registry/nginx:1.17
13 [root@k8s-master pv-pvc]# 
14 [root@k8s-master pv-pvc]# kubectl get pod -o wide
15 NAME    READY   STATUS              RESTARTS   AGE   IP       NODE         NOMINATED NODE   READINESS GATES
16 web-0   0/1     ContainerCreating   0          3s    <none>   k8s-node01   <none>           <none>
17 [root@k8s-master pv-pvc]# 
18 [root@k8s-master pv-pvc]# kubectl get pod -o wide
19 NAME    READY   STATUS              RESTARTS   AGE   IP             NODE         NOMINATED NODE   READINESS GATES
20 web-0   1/1     Running             0          11s   10.244.4.135   k8s-node01   <none>           <none>
21 web-1   1/1     Running             0          6s    10.244.2.171   k8s-node02   <none>           <none>
22 web-2   0/1     ContainerCreating   0          3s    <none>         k8s-node01   <none>           <none>
23 [root@k8s-master pv-pvc]# 
24 [root@k8s-master pv-pvc]# kubectl get pod -o wide
25 NAME    READY   STATUS    RESTARTS   AGE     IP             NODE         NOMINATED NODE   READINESS GATES
26 web-0   1/1     Running   0          8m23s   10.244.2.174   k8s-node02   <none>           <none>
27 web-1   1/1     Running   0          8m20s   10.244.4.139   k8s-node01   <none>           <none>
28 web-2   1/1     Running   0          8m17s   10.244.2.175   k8s-node02   <none>           <none>

 

PV和PVC狀態資訊查看

 1 ### 注意掛載順序
 2 [root@k8s-master pv-pvc]# kubectl get pv -o wide
 3 NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM               STORAGECLASS   REASON   AGE    VOLUMEMODE
 4 pv-nfs1   1Gi        RWO            Recycle          Available                       nfs                     116s   Filesystem
 5 pv-nfs2   3Gi        RWO            Recycle          Bound       default/www-web-0   nfs                     116s   Filesystem
 6 pv-nfs3   5Gi        RWO            Recycle          Available                       slow                    116s   Filesystem
 7 pv-nfs4   10Gi       RWO            Recycle          Bound       default/www-web-2   nfs                     116s   Filesystem
 8 pv-nfs5   5Gi        RWX            Recycle          Available                       nfs                     116s   Filesystem
 9 pv-nfs6   5Gi        RWO            Recycle          Bound       default/www-web-1   nfs                     116s   Filesystem
10 [root@k8s-master pv-pvc]# 
11 [root@k8s-master pv-pvc]# kubectl get pvc -o wide
12 NAME        STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE   VOLUMEMODE
13 www-web-0   Bound    pv-nfs2   3Gi        RWO            nfs            87s   Filesystem
14 www-web-1   Bound    pv-nfs6   5Gi        RWO            nfs            84s   Filesystem
15 www-web-2   Bound    pv-nfs4   10Gi       RWO            nfs            82s   Filesystem

PVC與PV系結時會根據storageClassName(存盤類名稱)和accessModes(訪問模式)判斷哪些PV符合系結需求,然后再根據存盤量大小判斷,首先存PV儲量必須大于或等于PVC宣告量;其次就是PV存盤量越接近PVC宣告量,那么優先級就越高(PV量越小優先級越高),

 

curl訪問驗證

在NFS服務端k8s-node03(172.16.1.113)對應NFS共享目錄創建檔案

1 echo "pv-nfs2===" > /data/nfs2/index.html
2 echo "pv-nfs4+++" > /data/nfs4/index.html
3 echo "pv-nfs6---" > /data/nfs6/index.html

 

curl訪問pod

 1 [root@k8s-master pv-pvc]# kubectl get pod -o wide
 2 NAME    READY   STATUS    RESTARTS   AGE     IP             NODE         NOMINATED NODE   READINESS GATES
 3 web-0   1/1     Running   0          8m23s   10.244.2.174   k8s-node02   <none>           <none>
 4 web-1   1/1     Running   0          8m20s   10.244.4.139   k8s-node01   <none>           <none>
 5 web-2   1/1     Running   0          8m17s   10.244.2.175   k8s-node02   <none>           <none>
 6 [root@k8s-master pv-pvc]# 
 7 [root@k8s-master pv-pvc]# curl 10.244.2.174
 8 pv-nfs2===
 9 [root@k8s-master pv-pvc]# 
10 [root@k8s-master pv-pvc]# curl 10.244.4.139
11 pv-nfs6---
12 [root@k8s-master pv-pvc]# 
13 [root@k8s-master pv-pvc]# curl 10.244.2.175
14 pv-nfs4+++

即使洗掉其中一個pod,pod被拉起來后也能正常訪問,

 

洗掉sts并回收PV

洗掉statefulset

1 [root@k8s-master pv-pvc]# kubectl delete -f sts-pod-pvc.yaml 
2 service "nginx" deleted
3 statefulset.apps "web" deleted
4 [root@k8s-master pv-pvc]# 
5 [root@k8s-master pv-pvc]# kubectl get pod -o wide
6 No resources found in default namespace.

 

查看PVC和PV,并洗掉PVC

 1 [root@k8s-master pv-pvc]# kubectl get pvc -o wide
 2 NAME        STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE   VOLUMEMODE
 3 www-web-0   Bound    pv-nfs2   3Gi        RWO            nfs            24m   Filesystem
 4 www-web-1   Bound    pv-nfs6   5Gi        RWO            nfs            24m   Filesystem
 5 www-web-2   Bound    pv-nfs4   10Gi       RWO            nfs            24m   Filesystem
 6 [root@k8s-master pv-pvc]# 
 7 [root@k8s-master pv-pvc]# kubectl get pv -o wide
 8 NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM               STORAGECLASS   REASON   AGE   VOLUMEMODE
 9 pv-nfs1   1Gi        RWO            Recycle          Available                       nfs                     26m   Filesystem
10 pv-nfs2   3Gi        RWO            Recycle          Bound       default/www-web-0   nfs                     26m   Filesystem
11 pv-nfs3   5Gi        RWO            Recycle          Available                       slow                    26m   Filesystem
12 pv-nfs4   10Gi       RWO            Recycle          Bound       default/www-web-2   nfs                     26m   Filesystem
13 pv-nfs5   5Gi        RWX            Recycle          Available                       nfs                     26m   Filesystem
14 pv-nfs6   5Gi        RWO            Recycle          Bound       default/www-web-1   nfs                     26m   Filesystem
15 [root@k8s-master pv-pvc]# 
16 [root@k8s-master pv-pvc]# kubectl delete pvc www-web-0 www-web-1 www-web-2
17 persistentvolumeclaim "www-web-0" deleted
18 persistentvolumeclaim "www-web-1" deleted
19 persistentvolumeclaim "www-web-2" deleted

 

回收PV

 1 ### 由下可見,還有一個pv雖然宣告被洗掉,但資源尚未回收;我們只需等一會兒即可
 2 [root@k8s-master pv-pvc]# kubectl get pv -o wide
 3 NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM               STORAGECLASS   REASON   AGE   VOLUMEMODE
 4 pv-nfs1   1Gi        RWO            Recycle          Available                       nfs                     90m   Filesystem
 5 pv-nfs2   3Gi        RWO            Recycle          Available                       nfs                     90m   Filesystem
 6 pv-nfs3   5Gi        RWO            Recycle          Available                       slow                    90m   Filesystem
 7 pv-nfs4   10Gi       RWO            Recycle          Available                       nfs                     90m   Filesystem
 8 pv-nfs5   5Gi        RWX            Recycle          Available                       nfs                     90m   Filesystem
 9 pv-nfs6   5Gi        RWO            Recycle          Released    default/www-web-1   nfs                     90m   Filesystem
10 [root@k8s-master pv-pvc]# 
11 ### 可見該pv還有參考
12 [root@k8s-master pv-pvc]# kubectl get pv pv-nfs6 -o yaml
13 apiVersion: v1
14 kind: PersistentVolume
15 metadata:
16 ………………
17 spec:
18   accessModes:
19   - ReadWriteOnce
20   capacity:
21     storage: 5Gi
22   ################### 可見仍然在被使用
23   claimRef:
24     apiVersion: v1
25     kind: PersistentVolumeClaim
26     name: www-web-1
27     namespace: default
28     resourceVersion: "1179810"
29     uid: d4d8943c-6b16-45a5-8ffc-691fcefc4f88
30   ###################
31   nfs:
32     path: /data/nfs6
33     server: 172.16.1.113
34   persistentVolumeReclaimPolicy: Recycle
35   storageClassName: nfs
36   volumeMode: Filesystem
37 status:
38   phase: Released

 

在NFS服務端查看結果如下,可見/data/nfs6資源尚未回收,而/data/nfs2/、/data/nfs4/資源已經被回收,

 1 [root@k8s-node03 ~]# tree /data/
 2 /data/
 3 ├── nfs1
 4 ├── nfs2
 5 ├── nfs3
 6 ├── nfs4
 7 ├── nfs5
 8 └── nfs6
 9     └── index.html
10 
11 5 directories, 2 files

針對這種情況有兩種處理方式:

1、我們什么也不用做,等一會兒集群就能回收該資源

2、我們進行手動回收,操作如下

手動回收資源
 1 [root@k8s-master pv-pvc]# kubectl edit pv pv-nfs6
 2 ### 去掉claimRef: 部分
 3 ### 再次查看pv資訊
 4 [root@k8s-master pv-pvc]# kubectl get pv -o wide
 5 NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE    VOLUMEMODE
 6 pv-nfs1   1Gi        RWO            Recycle          Available           nfs                     108m   Filesystem
 7 pv-nfs2   3Gi        RWO            Recycle          Available           nfs                     108m   Filesystem
 8 pv-nfs3   5Gi        RWO            Recycle          Available           slow                    108m   Filesystem
 9 pv-nfs4   10Gi       RWO            Recycle          Available           nfs                     108m   Filesystem
10 pv-nfs5   5Gi        RWX            Recycle          Available           nfs                     108m   Filesystem
11 pv-nfs6   5Gi        RWO            Recycle          Available           nfs                     108m   Filesystem

 

之后到NFS服務端操作,清除該pv下的資料

[root@k8s-node03 ~]# rm -fr /data/nfs6/*

到此,手動回收資源操作成功!

 

StatefulSet網路標識與PVC

1、匹配StatefulSet的Pod name(網路標識)的模式為:$(statefulset名稱)-$(序號),比如StatefulSet名稱為web,副本數為3,則為:web-0、web-1、web-2

2、StatefulSet為每個Pod副本創建了一個DNS域名,這個域名的格式為:$(podname).(headless service name),也就意味著服務之間是通過Pod域名來通信而非Pod IP,當Pod所在Node發生故障時,Pod會被漂移到其他Node上,Pod IP會發生改變,但Pod域名不會變化

3、StatefulSet使用Headless服務來控制Pod的域名,這個Headless服務域名的為:$(service name).$(namespace).svc.cluster.local,其中 cluster.local 指定的集群的域名

4、根據volumeClaimTemplates,為每個Pod創建一個PVC,PVC的命令規則為:$(volumeClaimTemplates name)-$(pod name),比如volumeClaimTemplates為www,pod name為web-0、web-1、web-2;那么創建出來的PVC為:www-web-0、www-web-1、www-web-2

5、洗掉Pod不會洗掉對應的PVC,手動洗掉PVC將自動釋放PV,

 

相關閱讀

1、NFS 服務搭建與配置

2、Kubernetes K8S 資源控制器StatefulSets詳解

完畢!

 


 

 

———END———
如果覺得不錯就關注下唄 (-^O^-) !

 

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/186815.html

標籤:Linux

上一篇:chrome插件問題。

下一篇:Linux高并發調優

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more