volume
(存儲卷)是pod中可以被多個容器訪問的共享目錄git
volume
被定義在pod上,而後被一個pod的多個容器掛載到具體的文件目錄下volume
和pod的生命週期相同,但與容器的生命週期不相關
spec.volumes
的定義丟失。如下列舉一些常見或者須要瞭解的volume類型:web
hostpath
爲在Pod上掛載宿主機上的文件或者目錄secret volume
爲pod提供加密信息configMap
爲pod提供配置信息git
庫clone
一個repository
以供pod
使用glusterfs
網絡文件系統的目錄掛載到podaws
雲提供volume
,瞭解便可volume
,瞭解便可Azure
提供的volume
,瞭解便可當Pod 被分配給節點時,首先建立emptyDir
卷,而且只要該 Pod 在該節點上運行,該卷就會存在。正如卷的名字所述,它最初是空的。Pod中的容器能夠讀取和寫入emptyDir
卷中的相同文件docker
emptyDir
卷中的數據在容器崩潰時是安全的emptyDir
中的數據將被永久刪除。以下,此時容器c1下的/path1
和容器c2下的/path2
是對應的同一個目錄。api
apiVersion: v1 kind: Pod metadata: name: test-pd spec: containers: - image: lzw5399/tocgenerator name: c1 # 把定義的cache-volume掛在到該容器c1下的/path1路徑 volumeMounts: - mountPath: /path1 name: cache-volume - image: lzw5399/codepie name: c2 # 把定義的cache-volume掛在到該容器c2下的/path2路徑 volumeMounts: - mountPath: /path2 name: cache-volume # 定義一個emptyDir的volume volumes: - name: cache-volume emptyDir: {}
hostPath
卷將主機節點的文件系統中的文件或目錄掛載到集羣中安全
/var/lib/docker
的hostPath
cAdvisor
;使用/dev/cgroups
的hostPath
hostPath
是否應該在 pod運行以前存在,是否應該建立,以及它應該以什麼形式存在除了所需的path屬性以外,用戶還能夠爲hostPath卷制定type:網絡
值 | 行爲 |
---|---|
空字符串 (也是默認的行爲 )用於向後兼容,這意味着在掛載 hostPath 卷以前不會執行任何檢查。 |
|
DirectoryOrCreate | 若是在給定的路徑上沒有任何東西存在,那麼將根據須要在那裏建立一個空目錄,權限設置爲0755,與Kubelet 具備相同的組和全部權。 |
Directory | 給定的路徑下必須存在目錄 |
FileOrCreate | 若是在給定的路徑上沒有任何東西存在,那麼會根據須要建立一個空文件,權限設置爲0644,與Kubelet具備相同的組和全部權。 |
File | 給定的路徑下必須存在文件 |
Socket | 給定的路徑下必須存在UNIX套接字 |
CharDevice | 給定的路徑下必須存在字符設備 |
BlockDevice | 給定的路徑下必須存在塊設備 |
podTemplate
建立的)的pod在不一樣節點上的行爲可能會有所不一樣Kubernetes
按照計劃添加資源感知調度時,將沒法考慮hostPath
使用的資源hostPath
卷apiVersion: v1 kind: Pod metadata: name: test-pd spec: containers: - image: k8s.gcr.io/test-webserver name: test-container volumeMounts: - mountPath: /test-pd name: test-volum # 定義一個hostPath類型的volume volumes: - name: test-volume hostPath: # 路徑掛載到宿主機的/data下 path: /data # (可選) 指定類型,見上面的表 type: Directory