kubernetes使用NFS共享存儲有兩種方式:
- (1)手動方式靜態(tài)創(chuàng)建所需要的PV和PVC(見本文1.3.2小節(jié))。
- (2)通過創(chuàng)建PVC動態(tài)地申請PV(見本文1.4.2小節(jié))。
一、Storage
Volume地址
:https://kubernetes.io/docs/concepts/storage/
1.1、Volume
1.1.1、Volume簡介
volume(/?v?lju?m/,IT詞匯–百度百科): 在電腦中, volume(文件集)是一個可辨認(rèn)的數(shù)據(jù)存儲(storage)單元。
Volume地址
:https://kubernetes.io/docs/concepts/storage/volumes/容器中的磁盤文件是臨時的,這對于在容器中運行的非平凡(重大)應(yīng)用程序會帶來一些問題:
- (1)容器崩潰時文件丟失。
- (2)Kubelet重新啟動容器后為clean狀態(tài)。
在Pod中一起運行的容器之間共享文件時,會出現(xiàn)第二個問題。
Kubernetes的Volume抽象地解決了這兩個問題。
1.2.1、Host類型volume實戰(zhàn)
思路: 查看volume掛載目錄是否同步。
定義一個Pod,其中包含兩個Container,都使用Pod的Volume。
(1)創(chuàng)建volume-pod.yaml
創(chuàng)建volume-pod.yaml:
[root@m test]# mkdir volume
[root@m test]# cd volume
[root@m volume]# vi volume-pod.yaml
內(nèi)容:
apiVersion: v1
kind: Pod
metadata:
name: volume-pod
spec:
containers:
- name: nginx-container
image: nginx
ports:
- containerPort: 80
volumeMounts:
- name: volume-pod
mountPath: /nginx-volume
- name: busybox-container
image: busybox
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
volumeMounts:
- name: volume-pod
mountPath: /busybox-volume
volumes:
- name: volume-pod
hostPath:
path: /tmp/volume-pod
(2)創(chuàng)建pod
[root@m volume]# kubectl apply -f volume-pod.yaml
pod/volume-pod created
[root@m volume]#
[root@m volume]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
volume-pod 2/2 Running 0 82s 192.168.80.248 w2 <none> <none>
[root@m volume]#
(3)查看pod的容器ID
在volume-pod所在的集群節(jié)點,查看容器ID:
[root@w2 ~]# docker ps | grep volume
容器busybox-volume的ID為:a91b394009ff
容器nginx-volume的ID為:3a7201c4a656
(4)測試volume掛載目錄是否同步
① 在宿主系統(tǒng)中/tmp/volume-pod目錄創(chuàng)建1.txt:
[root@w2 ~]# cd /tmp/volume-pod
[root@w2 volume-pod]# vi 1.txt
[root@w2 volume-pod]# ls
1.txt
[root@w2 volume-pod]#
② 進(jìn)入nginx-volume容器查看/nginx-volume目錄
[root@w2 volume-pod]# docker exec -it a91b394009ff sh
/ # ls /busybox-volume
1.txt
/ # cat /busybox-volume/1.txt
1234
/ # exit
[root@w2 volume-pod]#
③ 進(jìn)入busybox-volume容器查看/busybox-volume目錄
[root@w2 volume-pod]# docker exec -it 3a7201c4a656 sh
# ls /nginx-volume
1.txt
# cat /nginx-volume/1.txt
1234
# exit
[root@w2 volume-pod]#
(5)測試結(jié)果
總結(jié):
volume掛載目錄是同步的
。
(6)刪除測試資源
[root@m volume]# kubectl delete -f volume-pod.yaml
[root@m volume]# rm volume-pod.yaml
1.2.3、查看pod中的容器里面的hosts文件
查看nginx-volume容器hosts
[root@w2 volume-pod]# docker exec -it 3a7201c4a656 cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
192.168.80.248 volume-pod
[root@w2 volume-pod]#
查看busybox-volume容器的hosts文件
[root@w2 volume-pod]# docker exec -it a91b394009ff cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
192.168.80.248 volume-pod
[root@w2 volume-pod]#
結(jié)論:
發(fā)現(xiàn)兩個容器的hosts是一樣的,并且都是由pod管理的。所以一般container中的存儲或網(wǎng)絡(luò)內(nèi)容,不要在container層面直接修改,而是在pod中進(jìn)行修改。
1.2、PersistentVolume(PV)
官網(wǎng)
:https://kubernetes.io/docs/concepts/storage/persistent-volumes/
PersistentVolume(PV)是已經(jīng)由管理員提供或者動態(tài)使用供應(yīng)的集群中的一塊存儲的存儲類。它是集群中的資源,就像節(jié)點是集群資源一樣。PV是類似于Volumes的卷插件,但是其生命周期獨立于使用PV的任何單個Pod。
yaml示例:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi # 存儲空間大小
volumeMode: Filesystem
accessModes:
- ReadWriteOnce # 只允許一個Pod進(jìn)行獨占式讀寫操作
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
mountOptions:
- hard
- nfsvers=4.1
nfs:
path: /tmp # 遠(yuǎn)端服務(wù)器的目錄
server: 172.17.0.2 # 遠(yuǎn)端的服務(wù)器
PV是K8s中的資源,是volume的plugin實現(xiàn),生命周期獨立于Pod,封裝了底層存儲卷實現(xiàn)的細(xì)節(jié)。
注意
:PV的維護(hù)通常是由運維人員、集群管理員進(jìn)行維護(hù)的。
1.3、PersistentVolumeClaim(PVC)
1.3.1、PVC簡介
官網(wǎng)
:https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims有了PV,那Pod如何使用呢?為了方便使用,我們可以設(shè)計出一個PVC來綁定PV,然后把PVC交給Pod來使用即可,且聽下面的分析。
PersistentVolumeClaim(PVC)是由用戶進(jìn)行存儲的請求,它類似于pod,容器消耗節(jié)點資源,PVC消耗PV資源,Pod可以請求特定級別的資源(CPU和內(nèi)存),聲明可以請求特定的大小和訪問模式(例如,可以將它們安裝為ReadWriteOnce,ReadOnlyMany或ReadWriteMany)。
yaml示例:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 8Gi
storageClassName: slow
selector:
matchLabels:
release: "stable"
matchExpressions:
- {key: environment, operator: In, values: [dev]}
Pod中如何使用PVC示例:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim
PVC會匹配滿足要求的PV[是根據(jù)size和訪問模式進(jìn)行匹配的],進(jìn)行一一綁定,然后它們的狀態(tài)都會變成Bound,即PVC負(fù)責(zé)請求PV的大小和訪問方式,然后Pod中就可以直接使用PVC了。
?注意
:PVC通常由開發(fā)小伙伴維護(hù),開發(fā)小伙伴無需關(guān)注與存儲細(xì)節(jié)。
pod、pvc、pv關(guān)系圖:
1.3.2、Pod中使用PVC實戰(zhàn)
背景
:使用nginx持久化存儲演示
?
(1) 共享存儲使用nfs,比如選擇在master節(jié)點。
(2) 創(chuàng)建pv和pvc。
(3) nginx pod中使用pvc。
(1)master節(jié)點搭建nfs
nfs(network file system)網(wǎng)絡(luò)文件系統(tǒng),是FreeBSD支持的文件系統(tǒng)中的一種,允許網(wǎng)絡(luò)中的計算機(jī)之間通過TCP/IP網(wǎng)絡(luò)共享資源。
在master節(jié)點上搭建一個NFS服務(wù)器,目錄為/nfs/data
01 選擇k8s集群的master節(jié)點作為nfs的server,所以在master節(jié)點上
# 安裝nfs
yum install -y nfs-utils
# 創(chuàng)建nfs目錄
mkdir -p /nfs/data/
mkdir -p /nfs/data/mysql
# 授予權(quán)限
chmod -R 777 /nfs/data
# 編輯export文件
vi /etc/exports
內(nèi)容:/nfs/data *(rw,no_root_squash,sync)
# 使得配置生效
exportfs -r
# 查看生效
exportfs
# 啟動rpcbind、nfs服務(wù)(并設(shè)置開機(jī)啟動)
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs && systemctl enable nfs
# 查看rpc服務(wù)的注冊情況
rpcinfo -p localhost
# showmount測試
showmount -e
02 所有k8s集群node上都需要安裝客戶端,并啟動
yum -y install nfs-utils
systemctl start nfs && systemctl enable nfs
(2)為nfs服務(wù)器創(chuàng)建測試目錄(/nfs/data/nginx)
[root@m /]# mkdir -p /nfs/data/nginx
(3)創(chuàng)建nginx-pv-demo.yaml
在master節(jié)點,創(chuàng)建nginx-pv-demo.yaml,定義PV、PVC、Nginx:
[root@m /]# vi nginx-pv-demo.yaml
yaml內(nèi)容(修改nfs服務(wù)器IP
):
# 定義PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: nginx-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 2Gi
nfs:
path: /nfs/data/nginx
server: 192.168.116.170
---
# 定義PVC,用于消費PV
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nginx-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
---
# 定義Pod,指定需要使用的PVC
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: mysql
ports:
- containerPort: 80
volumeMounts:
- name: nginx-persistent-storage
mountPath: /usr/share/nginx/html
volumes:
- name: nginx-persistent-storage
persistentVolumeClaim:
claimName: nginx-pvc
(4)創(chuàng)建PV&PVC&Nginx
根據(jù)nginx-pv-demo.yaml配置創(chuàng)建資源,并查看資源:
#(1)創(chuàng)建資源
[root@m /]# kubectl apply -f nginx-pv-demo.yaml
persistentvolume/nginx-pv created
persistentvolumeclaim/nginx-pvc created
deployment.apps/nginx created
[root@m /]#
#(2)查看pod
[root@m /]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-c4998fd44-8bwt2 1/1 Running 0 24s 192.168.80.249 w2 <none> <none>
[root@m /]#
#(3)查看pv和pvc
[root@m /]# kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/nginx-pv 2Gi RWX Retain Bound default/nginx-pvc 28s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/nginx-pvc Bound nginx-pv 2Gi RWX 28s
[root@m /]#
(5)測試目錄同步
說明: 這里創(chuàng)建的nginx的pod的IP,在k8s的其他集群節(jié)點,ping不通,所以只能在w2(worker02)集群節(jié)點執(zhí)行curl測試。
#(1)創(chuàng)建任意測試文件test.html(內(nèi)容:abcd1234)
[root@m /]# vi /nfs/data/nginx/test.html
#(2)查看pod的IP
[root@m /]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-c4998fd44-8bwt2 1/1 Running 0 19m 192.168.80.249 w2 <none> <none>
[root@m /]#
#(3)curl訪問pod測試(需要在w2(worker02)集群節(jié)點執(zhí)行)
[root@w2 ~]# curl 192.168.80.249/test.html
abcd1234
[root@w2 ~]#
#(4)進(jìn)入nginx容器,查看同步目錄
[root@m /]# kubectl exec -it nginx-c4998fd44-8bwt2 -- bash
root@nginx-c4998fd44-8bwt2:/# cat /usr/share/nginx/html/test.html
abcd1234
root@nginx-c4998fd44-8bwt2:/# exit
exit
[root@m /]#
(6)測試持久化存儲
#(1)刪除pod(deployment會自動維護(hù)創(chuàng)建新pod)
[root@m /]# kubectl delete pod nginx-c4998fd44-8bwt2
pod "nginx-c4998fd44-8bwt2" deleted
[root@m /]#
#(2)查看新pod的IP
[root@m /]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-c4998fd44-j7mlf 1/1 Running 0 42s 192.168.80.250 w2 <none> <none>
[root@m /]#
#(3)curl再次訪問pod測試(需要在w2(worker02)集群節(jié)點執(zhí)行)
[root@w2 ~]# curl 192.168.80.250/test.html
abcd1234
[root@w2 ~]#
(7)刪除測試資源
[root@m /]# kubectl delete -f nginx-pv-demo.yaml
[root@m /]# rm nginx-pv-demo.yaml
1.4、StorageClass
上面手動管理PV的方式還是有點low,能不能更加靈活一點呢?
1.4.1、StorageClass簡介
官網(wǎng)
:https://kubernetes.io/docs/concepts/storage/storage-classes/
nfs github
:https://github.com/kubernetes-incubator/external-storage/tree/master/nfs
????StorageClass為管理員提供了一種描述它們提供的存儲“classes”的方法。不同的classes可以映射到服務(wù)質(zhì)量級別、備份策略或集群管理員確定的任意策略。
????每個StorageClass都包含fields provisioner、parameters和reclaimPolicy,當(dāng)需要dynamically provisioned屬于該類的PersistentVolume(PV)時,就使用這些字段。
????StorageClass對象的名稱很重要的,它是用戶請求特定類的方式。管理員在首次創(chuàng)建StorageClass對象時設(shè)置類的名稱和其他參數(shù),創(chuàng)建對象后就不能再次更新對象。
?
????StorageClass聲明存儲插件,用于自動創(chuàng)建PV。
?????創(chuàng)建PV的模板,其中有兩個重要部分:PV屬性和創(chuàng)建此PV所需要的插件,這樣PVC就可以按“Class”來匹配PV。也可以為PV指定storageClassName屬性,標(biāo)識PV歸屬于哪一個Class。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
- debug
volumeBindingMode: Immediate
(1)對于PV或者StorageClass只能對應(yīng)一種后端存儲
(2)對于手動的情況,一般我們會創(chuàng)建很多的PV,等有PVC需要使用的時候就可以直接使用了
(3)對于自動的情況,那么就由StorageClass來自動管理創(chuàng)建
(4)如果Pod想要使用共享存儲,一般會在創(chuàng)建PVC,PVC中描述了想要什么類型的后端存儲、空間等,K8s從而會匹配對應(yīng)的PV,如果沒有匹配成功,Pod就會處于Pending狀態(tài)。Pod中使用只需要像使用volumes一樣,指定名字就可以使用了
(5)一個Pod可以使用多個PVC,一個PVC也可以給多個Pod使用
(6)一個PVC只能綁定一個PV,一個PV只能對應(yīng)一種后端存儲
有了StorageClass之后的PVC如下:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-claim1
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
storageClassName: nfs
StorageClass之所以能夠動態(tài)供給PV,是因為Provisioner,也就是Dynamic Provisioning。但是NFS這種類型,K8s中默認(rèn)是沒有Provisioner插件的,需要自己創(chuàng)建。
1.4.2、StorageClass實戰(zhàn)
github
:https://github.com/kubernetes-incubator/external-storage/tree/master/nfs
StorageClass之所以能夠動態(tài)供給PV,是因為Provisioner,也就是Dynamic Provisioning。但是NFS這種類型,K8s中默認(rèn)是沒有Provisioner插件的,需要自己創(chuàng)建。
(1)nfs準(zhǔn)備
nfs(network file system),已搭建在k8s集群的master節(jié)點。
nfs所在節(jié)點IP:192.168.116.170
(2)為nfs創(chuàng)建持久化目錄(/nfs/data/jack)
[root@m /]# mkdir -p /nfs/data/jack
(3)根據(jù)rbac.yaml(身份驗證)創(chuàng)建資源
① 創(chuàng)建yaml文件
[root@m test]# vi rbac.yaml
內(nèi)容:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-provisioner-runner
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: ["create", "update", "patch"]
- apiGroups: [""]
resources: ["services", "endpoints"]
verbs: ["get"]
- apiGroups: ["extensions"]
resources: ["podsecuritypolicies"]
resourceNames: ["nfs-provisioner"]
verbs: ["use"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: run-nfs-provisioner
subjects:
- kind: ServiceAccount
name: nfs-provisioner
# replace with namespace where provisioner is deployed
namespace: default
roleRef:
kind: ClusterRole
name: nfs-provisioner-runner
apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-provisioner
rules:
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-provisioner
subjects:
- kind: ServiceAccount
name: nfs-provisioner
# replace with namespace where provisioner is deployed
namespace: default
roleRef:
kind: Role
name: leader-locking-nfs-provisioner
apiGroup: rbac.authorization.k8s.io
② 根據(jù)yaml創(chuàng)建資源
[root@m test]# kubectl apply -f rbac.yaml
(4)根據(jù)deployment.yaml文件創(chuàng)建資源
① 創(chuàng)建yaml文件
[root@m test]# vi deployment.yaml
內(nèi)容(注意修改nfs的IP地址
):
apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-provisioner
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: nfs-provisioner
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-provisioner
spec:
serviceAccount: nfs-provisioner
containers:
- name: nfs-provisioner
image: registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: example.com/nfs
- name: NFS_SERVER
value: 192.168.116.170
- name: NFS_PATH
value: /nfs/data/jack
volumes:
- name: nfs-client-root
nfs:
server: 192.168.116.170
path: /nfs/data/jack
② 根據(jù)yaml創(chuàng)建并查看資源
[root@m test]# kubectl apply -f deployment.yaml
[root@m test]# kubectl get pod -o wide
(5)根據(jù)class.yaml創(chuàng)建資源
① 創(chuàng)建yaml文件
[root@m test]# vi class.yaml
內(nèi)容:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: example-nfs
provisioner: example.com/nfs
② 根據(jù)yaml創(chuàng)建資源
[root@m test]# kubectl apply -f class.yaml
(5)根據(jù)pvc.yaml創(chuàng)建資源
① 創(chuàng)建yaml文件
[root@m test]# vi pvc.yaml
內(nèi)容:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
# 這個名字要和上面class.yaml中創(chuàng)建的storageclass名稱一致
storageClassName: example-nfs
② 根據(jù)yaml創(chuàng)建并查看資源
[root@m test]# kubectl apply -f pvc.yaml
[root@m test]# kubectl get pvc
狀態(tài)已經(jīng)變成了Bound狀態(tài),已經(jīng)動態(tài)創(chuàng)建了:
(6)根據(jù)nginx-pod創(chuàng)建資源
① 創(chuàng)建yaml文件
[root@m test]# vi nginx-pod
內(nèi)容:
kind: Pod
apiVersion: v1
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: my-pvc
mountPath: "/usr/jack"
restartPolicy: "Never"
volumes:
- name: my-pvc
persistentVolumeClaim:
claimName: my-pvc
② 根據(jù)yaml創(chuàng)建資源
[root@m test]# kubectl apply -f nginx-pod
[root@m test]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nfs-provisioner-8688c9fd67-42g2k 1/1 Running 0 9m21s 192.168.190.106 w1 <none> <none>
nginx 1/1 Running 0 11s 192.168.80.251 w2 <none> <none>
[root@m test]#
(7)測試目錄同步
我們首先查看nfs的測試目錄/nfs/data/jack
,發(fā)現(xiàn)它已經(jīng)為我們創(chuàng)建好了一個同步目錄(如下圖):
在同步目錄創(chuàng)建測試文件my.html:
#(1)進(jìn)入同步目錄
[root@m jack]# cd /nfs/data/jack/default-my-pvc-pvc-348bb4cd-559c-11eb-b58e-005056284f30
[root@m default-my-pvc-pvc-348bb4cd-559c-11eb-b58e-005056284f30]#
#(2)創(chuàng)建測試文件my.html(內(nèi)容:1234567890)
[root@m default-my-pvc-pvc-348bb4cd-559c-11eb-b58e-005056284f30]# vi my.html
進(jìn)入nginx容器內(nèi)部,查看對應(yīng)同步目錄:
[root@m ~]# kubectl exec -it nginx -- bash
root@nginx:/#
root@nginx:/# ls /usr/jack
my.html
root@nginx:/#
root@nginx:/# cat /usr/jack/my.html
1234567890
root@nginx:/#
結(jié)論: 發(fā)現(xiàn)內(nèi)容同步成功,即pvc動態(tài)幫我們創(chuàng)建了pv,且測試同步成功。
1.5、PV的狀態(tài)和回收策略
- PV的狀態(tài)
Available:表示當(dāng)前的pv沒有被綁定
Bound:表示已經(jīng)被pvc掛載
Released:pvc沒有在使用pv, 需要管理員手工釋放pv
Failed:資源回收失敗
- PV回收策略
Retain:表示刪除PVC的時候,PV不會一起刪除,而是變成Released狀態(tài)等待管理員手動清理
Recycle:在Kubernetes新版本就不用了,采用動態(tài)PV供給來替代
Delete:表示刪除PVC的時候,PV也會一起刪除,同時也刪除PV所指向的實際存儲空間
注意:目前只有NFS和HostPath支持Recycle策略。AWS EBS、GCE PD、Azure Disk和Cinder支持Delete策略。
文章來源:http://www.zghlxwxcb.cn/news/detail-852700.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-852700.html
到了這里,關(guān)于Kubernetes(K8S)學(xué)習(xí)(四):K8S之Storage的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!