您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)怎么進(jìn)行Kubernetes靜態(tài)持久卷的探索學(xué)習(xí),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
Volume
Volume是Pod的掛載接口,生命周期同Pod,可以在Pod內(nèi)的各個(gè)Container之間進(jìn)行共享,主要用于存儲(chǔ)Pod生命周期內(nèi)的臨時(shí)數(shù)據(jù),當(dāng)然,也可以?huà)煸谠贖ost主機(jī)或者其他后端存儲(chǔ)介質(zhì)上實(shí)現(xiàn)永久存儲(chǔ),根據(jù)選用的Volume Type可以實(shí)現(xiàn)不同的存儲(chǔ)需求,下邊是Volume支持的類(lèi)型:
emptyDir
hostPath
gcePersistentDisk
awsElasticBlockStore
nfs
iscsi
flocker
glusterfs
rbd
cephfs
gitRepo
secret
persistentVolumeClaim
downwardAPI
azureFileVolume
azureDisk
vsphereVolume
Quobyte
此處不作一一介紹,可以參考文檔:Volume Docs。
PersistentVolume(PV)
假如有一個(gè)獨(dú)立的存儲(chǔ)后端,底層實(shí)現(xiàn)可以是NFS、GlusterFS、Cinder、HostPath等等,可以使用PV從中劃撥一部分資源用于kubernetes的存儲(chǔ)需求,其生命周期不依賴(lài)于Pod,是一個(gè)獨(dú)立存在的虛擬存儲(chǔ)空間,但是不能直接被Pod的Volume掛載,此時(shí)需要用到PVC。
PV支持的后端存儲(chǔ)插件:
GCEPersistentDisk
AWSElasticBlockStore
AzureFile
AzureDisk
FC (Fibre Channel)
NFS
iSCSI
RBD (Ceph Block Device)
CephFS
Cinder (OpenStack block storage)
Glusterfs
VsphereVolume
HostPath (single node testing only – local storage is not supported in any way and WILL NOT WORK in a multi-node cluster)
PersistentVolumeClaim(PVC)
Pod使用PV資源是通過(guò)PVC來(lái)實(shí)現(xiàn)的,PVC可以理解為資源使用請(qǐng)求,一個(gè)Pod需要先明確使用的資源大小、訪問(wèn)方式,創(chuàng)建PVC申請(qǐng)?zhí)峤坏絢ubernetes中的PersistentVolume Controller,由其調(diào)度合適的PV來(lái)與PVC綁定,然后Pod中的Volume就可以通過(guò)PVC來(lái)使用PV的資源。
StorageClasse
用于定義動(dòng)態(tài)PV資源調(diào)度,相比起靜態(tài)PV資源來(lái)說(shuō),動(dòng)態(tài)PV不需要預(yù)先創(chuàng)建PV,而是通過(guò)PersistentVolume Controller動(dòng)態(tài)調(diào)度,根據(jù)PVC的資源請(qǐng)求,尋找StorageClasse定義的符合要求的底層存儲(chǔ)來(lái)分配資源。
定義PersistentVolume
,這里使用hostPath
作為存儲(chǔ)底層。
kind: PersistentVolume apiVersion: v1 metadata: name: pv001 labels: release: stable spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle hostPath: path: /tmp/data
也可以使用NFS或者其他插件作為存儲(chǔ)底層,需要提前準(zhǔn)備好NFS Server:
Yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv002 labels: release: stable spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle nfs: path: /tmp/data server: 172.17.0.2
capacity
用于定義PV的存儲(chǔ)容量,當(dāng)前只支持定義大小,未來(lái)會(huì)實(shí)現(xiàn)其他能力如:IOPS、吞吐量。
accessModes
用于定義資源的訪問(wèn)方式,受限于存儲(chǔ)底層的支持,訪問(wèn)方式包括以下幾種:
ReadWriteOnce – 被單個(gè)節(jié)點(diǎn)mount為讀寫(xiě)rw模式
ReadOnlyMany – 被多個(gè)節(jié)點(diǎn)mount為只讀ro模式
ReadWriteMany – 被多個(gè)節(jié)點(diǎn)mount為讀寫(xiě)rw模式
下邊途中列舉了k8s支持的存儲(chǔ)插件的訪問(wèn)方式:
persistentVolumeReclaimPolicy
用于定義資源的回收方式,也首先與存儲(chǔ)底層的支持,現(xiàn)有的回收策略:
Retain – 手動(dòng)回收
Recycle – 刪除數(shù)據(jù) (“rm -rf /thevolume/*”)
Delete – 通過(guò)存儲(chǔ)后端刪除卷,后端存儲(chǔ)例如AWS EBS, GCE PD或Cinder等。
目前只有NFS和HostPath支持Recycle策略,AWS EBS、GCE PD、Azure Disk、Cinder支持Delete策略。
注意:Recycle策略會(huì)通過(guò)運(yùn)行一個(gè)busybox容器來(lái)執(zhí)行數(shù)據(jù)刪除命令,默認(rèn)定義的busybox鏡像是:gcr.io/google_containers/busybox:latest
,并且imagePullPolicy: Always
,如果需要調(diào)整配置,需要增加kube-controller-manager 啟動(dòng)參數(shù):--pv-recycler-pod-template-filepath-hostpath=/etc/kubernetes/manifests/recycler.yml
Yaml apiVersion: v1 kind: Pod metadata: name: pv-recycler- namespace: default spec: restartPolicy: Never volumes: - name: vol hostPath: path: [Path of Persistent Volume hosted] containers: - name: pv-recycler image: "gcr.io/google_containers/busybox" imagePullPolicy: IfNotPresent command: ["/bin/sh", "-c", "test -e /scrub && rm -rf /scrub/..?* /scrub/.[!.]* /scrub/* && test -z \"$(ls -A /scrub)\" || exit 1"] volumeMounts: - name: vol mountPath: /scrub
定義PersistentVolumeClaim
。
Yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: myclaim-1 spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi selector: matchLabels: release: stable
accessModes
與PersistentVolume的訪問(wèn)方式一致,PersistentVolume Controller調(diào)度訪問(wèn)方式一致PV資源與PVC綁定。
resources
用于定義申請(qǐng)使用的存儲(chǔ)資源大小,適用于kubernetes的resource模型,具體信息可以查看Resource Model docs。
selector
定義PVC申請(qǐng)過(guò)濾PV卷集,搭配label定義使用,同kubernetes中其他的selector概念一致,用法上稍有不同,增加了匹配選項(xiàng):
matchLabels – 匹配標(biāo)簽,卷標(biāo)簽必須匹配某個(gè)值
matchExpressions – 匹配表達(dá)式,由鍵值對(duì),操作符構(gòu)成,操作符包括 In,NotIn,Exists,和 DoesNotExist。
此外還有volume.beta.kubernetes.io/storage-class
定義,具有相同定義的PV和PVC才會(huì)綁定,具體用法可以查看PersistentVolume docs。
PV和PVC創(chuàng)建并綁定之后,類(lèi)似這樣:
Bash NAME CAPACITY ACCESSMODES RECLAIMPOLICY STATUS CLAIM REASON AGE pv/pv001 5Gi RWO Recycle Bound default/myclaim-1 11m NAME STATUS VOLUME CAPACITY ACCESSMODES AGE pvc/myclaim-1 Bound pv001 5Gi RWO 3s
PersistentVolume有四種狀態(tài):
Available – 可用狀態(tài)
Bound – 綁定到PVC
Released – PVC被刪掉,但是尚未回收
Failed – 自動(dòng)回收失敗
掛載創(chuàng)建好的PVC:myclaim-1到Pod上:
Bash kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: myfrontend image: dockerfile/nginx volumeMounts: - mountPath: "/var/www/html" name: mypd volumes: - name: mypd persistentVolumeClaim: claimName: myclaim-1
掛載成功后,Pod所在的Host上會(huì)自動(dòng)創(chuàng)建/tmp/data
用于存儲(chǔ)數(shù)據(jù),HostPath Volume便于測(cè)試調(diào)試,但是只適用于單節(jié)點(diǎn)環(huán)境,多節(jié)點(diǎn)環(huán)境中如果Pod漂移或者重建后不在原先節(jié)點(diǎn),則無(wú)法訪問(wèn)原來(lái)的數(shù)據(jù)。
看完上述內(nèi)容,你們對(duì)怎么進(jìn)行Kubernetes靜態(tài)持久卷的探索學(xué)習(xí)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。