久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Kubernetes volumes有什么用

166次閱讀
沒有評論

共計 3693 個字符,預計需要花費 10 分鐘才能閱讀完成。

這篇文章主要介紹 Kubernetes volumes 有什么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

容器中的磁盤文件生命周期比較短暫,在一些比較復雜的容器應用中會產生一些問題。一、容器 crash 后,kubelet 會重啟該容器,但這些文件會丟失掉。二、pod 中的多個容器經常需要共享文件。因此,Kubernetes 的 Volume 應然而生,用于解決這些問題。

背景

在 Docker 中,也有 volumes 這個概念,volume 只是磁盤上一個簡單的目錄,或者其他容器中的 volume。生命周期也不受管理,并且直到最近他們都是基于本地后端存儲的。Docker 現在也提供了 volume driver,但是現在來說功能也較弱(比如官網提到的 Ceph volume driver,現在已經沒有維護了)。
Kubernetes 的 volume,有著明顯的生命周期——和使用它的 pod 生命周期一致。因此,volume 生命周期就比運行在 pod 中的容器要長久,即使容器重啟,volume 上的數據依然保存著。當然,pod 不再存在時,volume 也就消失了。更重要的是,Kubernetes 支持多種類型的 volume,并且 pod 可以同時使用多種類型的 volume。
內部實現中,volume 只是一個目錄,目錄中可能有一些數據,pod 的容器可以訪問這些數據。這個目錄是如何產生的,它后端基于什么存儲介質,其中的數據內容是什么,這些都由使用的特定 volume 類型來決定。
要使用 volume,pod 需要指定 volume 的類型和內容(spec.volumes 字段),和映射到容器的位置(spec.containers.volumeMounts 字段)。
容器中的進程可以看到 Docker image 和 volumes 組成的文件系統。Docker image 處于文件系統架構的 root,任何 volume 都映射在鏡像的特定路徑上。Volume 不能映射到其他 volume 上,或者硬鏈接到其他 volume。容器中的每個容器必須堵路地指定他們要映射的 volume。

Volume 類型

Kubernetes 支持很多種類的 volume,包括:emptyDir、hostPath、gcePersistentDisk、awsElasticBlockStore、nfs、iscsi、flocker、glusterfs、rbd、cephfs、gitRepo、secret、persistentVolumeClaim、downwardAPI、azureFileVolume、azureDisk、vsphereVolume、Quobyte、PortworxVolume、ScaleIO。

emptyDir

當 Pod 被分配到一個 Node 上時,emptyDir volume 就第一次被創建,只要 Pod 還運行在該 Node 上,該 volume 就一直存在。就像它名字里介紹的一樣,它初始化時是空的。pod 中的容器都能夠完全讀寫 emptyDir volume 中相同文件,即使 volume 可能被映射到每個容器中不同的路徑下。任何情況下,一旦 pod 從該 Node 上移除了,emptyDir volume 中的數據就被永久刪除了。注意:容器 crash 并不會在 Node 上刪除 pod,因此 emptyDir volume 中的數據依然是安全的。
emptyDir volume 的使用場景有:
1) 臨時空間,如基于磁盤的排序場景等;
2) 從 crash 中通過 checkpointing 做長時間的計算恢復;
默認的,emptyDir volume 可以存儲在任何后端介質之上——普通磁盤、ssd 或網絡存儲,這都取決于你的環境。然而,你也可以設置 emptyDir.medium 字段為 Memory,告訴 Kubernetes 映射 tmpfs(基于 RAM 的文件系統)。tmpfs 速度非常快,但要小心它和磁盤不同,一旦機器重啟,tmpfs 就會被清空,并且,tmpfs 上寫文件會受到容器內存的限制。
pod 示例:

apiVersion: v1
kind: Pod
metadata:
 name: test-pd
spec:
 containers:
 - image: gcr.io/google_containers/test-webserver
 name: test-container
 volumeMounts:
 - mountPath: /cache
 name: cache-volume
 volumes:
 - name: cache-volume
 emptyDir: {}

hostPath

hostPath volume 映射 node 文件系統中的文件或者目錄到 pod 里。大多數 Pod 都不需要這個功能,但對于一些特定的場景,該特性還是很有作用的。這些場景包括:
1) 運行的容器需要訪問 Docker 內部結構:使用 hostPath 映射 /var/lib/docker
2) 在容器中運行 cAdvisor,使用 hostPath 映射 /dev/cgroups
不過,使用這種 volume 要小心,因為:
1) 配置相同的 pod(如通過 podTemplate 創建),可能在不同的 Node 上表現不同,因為不同節點上映射的文件內容不同
2) 當 Kubernetes 增加了資源敏感的調度程序,hostPath 使用的資源不會被計算在內
3) 宿主機下創建的目錄只有 root 有寫權限。你需要讓你的程序運行在 privileged container 上,或者修改宿主機上的文件權限。
pod 示例:

apiVersion: v1
kind: Pod
metadata:
 name: test-pd
spec:
 containers:
 - image: gcr.io/google_containers/test-webserver
 name: test-container
 volumeMounts:
 - mountPath: /test-pd
 name: test-volume
 volumes:
 - name: test-volume
 hostPath:
 # directory location on host
 path: /data

rbd

rbd 卷可以將 Rados Block Device 設備映射到 pod 中。當 Pod 被移除時,emptyDir 卷的內容會被清空,和 emptyDir 不同,rbd 卷的內容還存在著,僅僅是卷被卸載掉而已。也就是說,rbd 卷可以其上的數據一起,再次被映射,數據也可以在 pod 之間傳遞。
重要:在使用 rbd 卷之前,你必須先安裝 Ceph 環境。
RBD 的一個特性就是能夠以只讀的方式同時映射給多個用戶使用。不幸的是,rbd 卷只能被一個用戶已可讀寫的模式映射——不能同時允許多個可寫的用戶使用。
查看 RBD example 獲取更多細節。

cephfs

cephfs 卷可以將已經存在的 CephFS 卷映射到 pod 中。與 rbd 卷相同,當 pod 被移除時,cephfs 卷的內容還存在著,僅僅是卷被卸載掉而已。另外一點不同的是,CephFS 可以同時以可讀寫的方式映射給多個用戶。
查看 CephFS example 獲取更多細節。

使用 subPath

有時,可以在一個 pod 中,將同一個卷共享,使其有多個用處。volumeMounts.subPath 特性可以用來指定卷中的一個子目錄,而不是直接使用卷的根目錄。
這里有一個使用 LAMP 棧(Linux Apache Mysql PHP)的 pod 示例,該 pod 使用了一個共享的卷。HTML 內容映射在它的 html 子目錄,而數據庫則保存在它的 mysql 目錄。

apiVersion: v1
kind: Pod
metadata:
 name: my-lamp-site
spec:
 containers:
 - name: mysql
 image: mysql
 volumeMounts:
 - mountPath: /var/lib/mysql
 name: site-data
 subPath: mysql
 - name: php
 image: php
 volumeMounts:
 - mountPath: /var/www/html
 name: site-data
 subPath: html
 volumes:
 - name: site-data
 persistentVolumeClaim:
 claimName: my-lamp-site-data

資源

emptyDir 或者 hostPath 卷的存儲介質(磁盤,SSD 等)取決于 kubelet 根目錄(如 /var/lib/kubelet)所處文件系統的存儲介質。現在沒有限制 emptyDir 或者 hostPath 卷能使用的空間大小,也沒有對容器或者 pod 的資源隔離。
未來,我們期望 emptyDir 或者 hostPath 卷能夠通過 resource 屬性,來請求指定大小的空間,并且選擇存儲介質類型。

以上是“Kubernetes volumes 有什么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注丸趣 TV 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計3693字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 八宿县| 白银市| 肥西县| 桦南县| 海口市| 利津县| 兖州市| 漳浦县| 阿拉善右旗| 成安县| 甘肃省| 澄江县| 荆州市| 福鼎市| 松潘县| 邳州市| 玉龙| 西吉县| 丹棱县| 顺平县| 宜昌市| 南部县| 南皮县| 天等县| 刚察县| 土默特左旗| 龙胜| 乌拉特后旗| 讷河市| 新蔡县| 浏阳市| 桂平市| 县级市| 左云县| 天水市| 丹寨县| 乃东县| 虹口区| 桓台县| 保亭| 西安市|