数据管理 - 每天5分钟玩转 Docker 容器技术(147)
本章將討論 Kubernetes 如何管理存儲資源。
首先我們會學習 Volume,以及 Kubernetes 如何通過 Volume 為集群中的容器提供存儲;然后我們會實踐幾種常用的 Volume 類型并理解它們各自的應用場景;最后,我們會討論 Kubernetes 如何通過 Persistent Volume 和 Persistent Volume Claim 分離集群管理員與集群用戶的職責,并實踐 Volume 的靜態供給和動態供給。
Volume
本節我們討論 Kubernetes 的存儲模型 Volume,學習如何將各種持久化存儲映射到容器。
我們經常會說:容器和 Pod 是短暫的。
其含義是它們的生命周期可能很短,會被頻繁地銷毀和創建。容器銷毀時,保存在容器內部文件系統中的數據都會被清除。
為了持久化保存容器的數據,可以使用 Kubernetes Volume。
Volume 的生命周期獨立于容器,Pod 中的容器可能被銷毀和重建,但 Volume 會被保留。
本質上,Kubernetes Volume 是一個目錄,這一點與 Docker Volume 類似。當 Volume 被 mount 到 Pod,Pod 中的所有容器都可以訪問這個 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 提供了對各種 backend 的抽象,容器在使用 Volume 讀寫數據的時候不需要關心數據到底是存放在本地節點的文件系統中呢還是云硬盤上。對它來說,所有類型的 Volume 都只是一個目錄。
我們將從最簡單的 emptyDir 開始學習 Kubernetes Volume。
emptyDir
emptyDir 是最基礎的 Volume 類型。正如其名字所示,一個 emptyDir Volume 是 Host 上的一個空目錄。
emptyDir Volume 對于容器來說是持久的,對于 Pod 則不是。當 Pod 從節點刪除時,Volume 的內容也會被刪除。但如果只是容器被銷毀而 Pod 還在,則 Volume 不受影響。
也就是說:emptyDir Volume 的生命周期與 Pod 一致。
Pod 中的所有容器都可以共享 Volume,它們可以指定各自的 mount 路徑。下面通過例子來實踐 emptyDir,配置文件如下:
這里我們模擬了一個 producer-consumer 場景。Pod 有兩個容器?producer和?consumer,它們共享一個 Volume。producer?負責往 Volume 中寫數據,consumer?則是從 Volume 讀取數據。
① 文件最底部?volumes?定義了一個?emptyDir?類型的 Volume?shared-volume。
②?producer?容器將?shared-volume?mount 到?/producer_dir?目錄。
③?producer?通過?echo?將數據寫到文件?hello?里。
④?consumer?容器將?shared-volume?mount 到?/consumer_dir?目錄。
⑤?consumer?通過?cat?從文件?hello?讀數據。
執行如下命令創建 Pod:
kubectl logs?顯示容器?consumer?成功讀到了?producer?寫入的數據,驗證了兩個容器共享 emptyDir Volume。
因為 emptyDir 是 Docker Host 文件系統里的目錄,其效果相當于執行了?docker run -v /producer_dir?和?docker run -v /consumer_dir。通過?docker inspect?查看容器的詳細配置信息,我們發現兩個容器都 mount 了同一個目錄:
這里?/var/lib/kubelet/pods/3e6100eb-a97a-11e7-8f72-0800274451ad/volumes/kubernetes.io~empty-dir/shared-volume?就是 emptyDir 在 Host 上的真正路徑。
emptyDir 是 Host 上創建的臨時目錄,其優點是能夠方便地為 Pod 中的容器提供共享存儲,不需要額外的配置。但它不具備持久性,如果 Pod 不存在了,emptyDir 也就沒有了。根據這個特性,emptyDir 特別適合 Pod 中的容器需要臨時共享存儲空間的場景,比如前面的生產者消費者用例。
下一節我們學習 hostPath Volume。
書籍:
1.《每天5分鐘玩轉Kubernetes》
https://item.jd.com/26225745440.html
2.《每天5分鐘玩轉Docker容器技術》
https://item.jd.com/16936307278.html
3.《每天5分鐘玩轉OpenStack》
https://item.jd.com/12086376.html
總結
以上是生活随笔為你收集整理的数据管理 - 每天5分钟玩转 Docker 容器技术(147)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1个穿云箭多少人民币?
- 下一篇: 个人开劳务费发票税率是多少