您好,登錄后才能下訂單哦!
Kubernetes如何管理存儲(chǔ)資源,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
首先我們會(huì)學(xué)習(xí) Volume,以及 Kubernetes 如何通過(guò) Volume 為集群中的容器提供存儲(chǔ);然后我們會(huì)實(shí)踐幾種常用的 Volume 類型并理解它們各自的應(yīng)用場(chǎng)景;最后,我們會(huì)討論 Kubernetes 如何通過(guò) Persistent Volume 和 Persistent Volume Claim 分離集群管理員與集群用戶的職責(zé),并實(shí)踐 Volume 的靜態(tài)供給和動(dòng)態(tài)供給。
本節(jié)我們討論 Kubernetes 的存儲(chǔ)模型 Volume,學(xué)習(xí)如何將各種持久化存儲(chǔ)映射到容器。
我們經(jīng)常會(huì)說(shuō):容器和 Pod 是短暫的。
其含義是它們的生命周期可能很短,會(huì)被頻繁地銷毀和創(chuàng)建。容器銷毀時(shí),保存在容器內(nèi)部文件系統(tǒng)中的數(shù)據(jù)都會(huì)被清除。
為了持久化保存容器的數(shù)據(jù),可以使用 Kubernetes Volume。
Volume 的生命周期獨(dú)立于容器,Pod 中的容器可能被銷毀和重建,但 Volume 會(huì)被保留。
本質(zhì)上,Kubernetes Volume 是一個(gè)目錄,這一點(diǎn)與 Docker Volume 類似。當(dāng) Volume 被 mount 到 Pod,Pod 中的所有容器都可以訪問(wèn)這個(gè) Volume。Kubernetes Volume 也支持多種 backend 類型,包括 emptyDir、hostPath、GCE Persistent Disk、AWS Elastic Block Store、NFS、Ceph 等,完整列表可參考 https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes
Volume 提供了對(duì)各種 backend 的抽象,容器在使用 Volume 讀寫(xiě)數(shù)據(jù)的時(shí)候不需要關(guān)心數(shù)據(jù)到底是存放在本地節(jié)點(diǎn)的文件系統(tǒng)中呢還是云硬盤(pán)上。對(duì)它來(lái)說(shuō),所有類型的 Volume 都只是一個(gè)目錄。
我們將從最簡(jiǎn)單的 emptyDir 開(kāi)始學(xué)習(xí) Kubernetes Volume。
emptyDir 是最基礎(chǔ)的 Volume 類型。正如其名字所示,一個(gè) emptyDir Volume 是 Host 上的一個(gè)空目錄。
emptyDir Volume 對(duì)于容器來(lái)說(shuō)是持久的,對(duì)于 Pod 則不是。當(dāng) Pod 從節(jié)點(diǎn)刪除時(shí),Volume 的內(nèi)容也會(huì)被刪除。但如果只是容器被銷毀而 Pod 還在,則 Volume 不受影響。
也就是說(shuō):emptyDir Volume 的生命周期與 Pod 一致。
Pod 中的所有容器都可以共享 Volume,它們可以指定各自的 mount 路徑。下面通過(guò)例子來(lái)實(shí)踐 emptyDir,配置文件如下:
這里我們模擬了一個(gè) producer-consumer 場(chǎng)景。Pod 有兩個(gè)容器 producer
和 consumer
,它們共享一個(gè) Volume。producer
負(fù)責(zé)往 Volume 中寫(xiě)數(shù)據(jù),consumer
則是從 Volume 讀取數(shù)據(jù)。
① 文件最底部 volumes
定義了一個(gè) emptyDir
類型的 Volume shared-volume
。
② producer
容器將 shared-volume
mount 到 /producer_dir
目錄。
③ producer
通過(guò) echo
將數(shù)據(jù)寫(xiě)到文件 hello
里。
④ consumer
容器將 shared-volume
mount 到 /consumer_dir
目錄。
⑤ consumer
通過(guò) cat
從文件 hello
讀數(shù)據(jù)。
執(zhí)行如下命令創(chuàng)建 Pod:
這里 /var/lib/kubelet/pods/3e6100eb-a97a-11e7-8f72-0800274451ad/volumes/kubernetes.io~empty-dir/shared-volume
就是 emptyDir 在 Host 上的真正路徑。
emptyDir 是 Host 上創(chuàng)建的臨時(shí)目錄,其優(yōu)點(diǎn)是能夠方便地為 Pod 中的容器提供共享存儲(chǔ),不需要額外的配置。但它不具備持久性,如果 Pod 不存在了,emptyDir 也就沒(méi)有了。根據(jù)這個(gè)特性,emptyDir 特別適合 Pod 中的容器需要臨時(shí)共享存儲(chǔ)空間的場(chǎng)景,比如前面的生產(chǎn)者消費(fèi)者用例。
看完上述內(nèi)容,你們掌握 Kubernetes如何管理存儲(chǔ)資源的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(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)容。