溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么進(jìn)行Kubernetes靜態(tài)持久卷的探索學(xué)習(xí)

發(fā)布時(shí)間:2021-12-27 14:47:06 來(lái)源:億速云 閱讀:120 作者:柒染 欄目:云計(jì)算

今天就跟大家聊聊有關(guān)怎么進(jìn)行Kubernetes靜態(tài)持久卷的探索學(xué)習(xí),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

1 名詞概念

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)分配資源。

2 創(chuàng)建PersistentVolume

定義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

3 創(chuàng)建PersistentVolumeClaim

定義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。

4 掛載Volume到Pod

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è)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI