您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關怎么進行Kubernetes靜態持久卷的探索學習,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
Volume
Volume是Pod的掛載接口,生命周期同Pod,可以在Pod內的各個Container之間進行共享,主要用于存儲Pod生命周期內的臨時數據,當然,也可以掛在在Host主機或者其他后端存儲介質上實現永久存儲,根據選用的Volume Type可以實現不同的存儲需求,下邊是Volume支持的類型:
emptyDir
hostPath
gcePersistentDisk
awsElasticBlockStore
nfs
iscsi
flocker
glusterfs
rbd
cephfs
gitRepo
secret
persistentVolumeClaim
downwardAPI
azureFileVolume
azureDisk
vsphereVolume
Quobyte
此處不作一一介紹,可以參考文檔:Volume Docs。
PersistentVolume(PV)
假如有一個獨立的存儲后端,底層實現可以是NFS、GlusterFS、Cinder、HostPath等等,可以使用PV從中劃撥一部分資源用于kubernetes的存儲需求,其生命周期不依賴于Pod,是一個獨立存在的虛擬存儲空間,但是不能直接被Pod的Volume掛載,此時需要用到PVC。
PV支持的后端存儲插件:
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資源是通過PVC來實現的,PVC可以理解為資源使用請求,一個Pod需要先明確使用的資源大小、訪問方式,創建PVC申請提交到kubernetes中的PersistentVolume Controller,由其調度合適的PV來與PVC綁定,然后Pod中的Volume就可以通過PVC來使用PV的資源。
StorageClasse
用于定義動態PV資源調度,相比起靜態PV資源來說,動態PV不需要預先創建PV,而是通過PersistentVolume Controller動態調度,根據PVC的資源請求,尋找StorageClasse定義的符合要求的底層存儲來分配資源。
定義PersistentVolume
,這里使用hostPath
作為存儲底層。
kind: PersistentVolume apiVersion: v1 metadata: name: pv001 labels: release: stable spec: capacity: storage: 5Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle hostPath: path: /tmp/data
也可以使用NFS或者其他插件作為存儲底層,需要提前準備好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的存儲容量,當前只支持定義大小,未來會實現其他能力如:IOPS、吞吐量。
accessModes
用于定義資源的訪問方式,受限于存儲底層的支持,訪問方式包括以下幾種:
ReadWriteOnce – 被單個節點mount為讀寫rw模式
ReadOnlyMany – 被多個節點mount為只讀ro模式
ReadWriteMany – 被多個節點mount為讀寫rw模式
下邊途中列舉了k8s支持的存儲插件的訪問方式:
persistentVolumeReclaimPolicy
用于定義資源的回收方式,也首先與存儲底層的支持,現有的回收策略:
Retain – 手動回收
Recycle – 刪除數據 (“rm -rf /thevolume/*”)
Delete – 通過存儲后端刪除卷,后端存儲例如AWS EBS, GCE PD或Cinder等。
目前只有NFS和HostPath支持Recycle策略,AWS EBS、GCE PD、Azure Disk、Cinder支持Delete策略。
注意:Recycle策略會通過運行一個busybox容器來執行數據刪除命令,默認定義的busybox鏡像是:gcr.io/google_containers/busybox:latest
,并且imagePullPolicy: Always
,如果需要調整配置,需要增加kube-controller-manager 啟動參數:--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的訪問方式一致,PersistentVolume Controller調度訪問方式一致PV資源與PVC綁定。
resources
用于定義申請使用的存儲資源大小,適用于kubernetes的resource模型,具體信息可以查看Resource Model docs。
selector
定義PVC申請過濾PV卷集,搭配label定義使用,同kubernetes中其他的selector概念一致,用法上稍有不同,增加了匹配選項:
matchLabels – 匹配標簽,卷標簽必須匹配某個值
matchExpressions – 匹配表達式,由鍵值對,操作符構成,操作符包括 In,NotIn,Exists,和 DoesNotExist。
此外還有volume.beta.kubernetes.io/storage-class
定義,具有相同定義的PV和PVC才會綁定,具體用法可以查看PersistentVolume docs。
PV和PVC創建并綁定之后,類似這樣:
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有四種狀態:
Available – 可用狀態
Bound – 綁定到PVC
Released – PVC被刪掉,但是尚未回收
Failed – 自動回收失敗
掛載創建好的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上會自動創建/tmp/data
用于存儲數據,HostPath Volume便于測試調試,但是只適用于單節點環境,多節點環境中如果Pod漂移或者重建后不在原先節點,則無法訪問原來的數據。
看完上述內容,你們對怎么進行Kubernetes靜態持久卷的探索學習有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。