摘要:背景中有的概念,其中對它的管理有點松散。鏡像是文件系統層次的根,任何被掛載到鏡像中的特定目錄上。中的每個容器必須獨立指定每個的位置。當一個由于某種原因從節點上移除,中的數據也會被永久刪除。
容器中的磁盤文件是易失的,這給運行在容器中的大型應用帶來了一些麻煩。首先,當一個容器崩潰,kubelet會重啟它,但是之前存儲的文件會丟失 - 容器以一個初始的狀態重建。第二,當在一個Pod中運行多個container,這些container之間常常需要共享文件。Kubernetes的Volume抽象解決了這些問題。
背景Docker中有Volumes的概念,其中對它的管理有點松散。在Docker中,一個volume就簡單的是個磁盤或者其他容器中的目錄,它的生命周期是不被管理的,并且在最近的Docker版本中還只支持基于本地磁盤的volume。Docker最新版本已經提供了volume驅動,但是它的功能目前還非常有限(例如,Docker 1.7中每個容器只允許有一個volume驅動,并且不能向volume傳參)。
Kubernetes的volume有一個顯式的生命周期 - 和持有它的Pod的生命周期相同。因此,一個volume比它所在Pod中的任何一個容器的生命周期都要長,并且容器重啟后數據仍在。當然了,如果一個Pod不存在了,它的volume也就不存在了。更重要的是,Kubernetes支持不同類型的volume,并且一個Pod可以同時使用多個類型的volume。
一個volume只是一個目錄,可能其中有一些數據,對于Pod中的容器是可訪問的。這個目錄是哪兒來的,支撐它的介質,以及它的內容物,都是由使用的特定volume類型決定的。
要使用一個volume,一個Pod指定提供給它的那些volume(.spec.volumes字段)以及掛載到容器的位置(.soec.containers.volumeMounts字段)。
容器中的一個進程,它看待文件系統是由Docker鏡像以及一個或多個volume組成的。Docker鏡像是文件系統層次的根,任何volume被掛載到鏡像中的特定目錄上。volume不能掛載到其他volume或者有到其他volume的硬鏈接(hard links)。Pod中的每個容器必須獨立指定mount每個volume的位置。
Volume的類型Kubernetes支持多種volume類型:
awsElasticBlockStore
azureDisk
azureFile
cephfs
configMap
csi
downwardAPI
emptyDir
fc (fibre channel)
flocker
gcePersistentDisk
gitRepo (deprecated)
glusterfs
hostPath
iscsi
local
nfs
persistentVolumeClaim
projected
portworxVolume
quobyte
rbd
scaleIO
secret
storageos
vsphereVolume
awsElasticBlockStoreawsElasticBlockStore卷在Pod中掛載一個Amazon Web Services(AWS)EBS Volume。不同于emptyDir在Pod移除時做擦除,一個EBS卷的內容一直保留,并且卷很少被卸載。這意味著一個EBS卷可以被預填充數據,并且數據可以在Pod間進行傳遞。
重要:在使用之前你必須使用aws ec2 create-volume或者AWS API創建一個EBS卷。
使用一個awsElasticBlockStore卷時,有幾個限制:
Pod運行的Node必須是一個AWS EC2實例
這些實例需要和EBS卷處于相同范圍(region)以及可用區域(availability-zone)
一個多帶帶的EC2實例只支持掛載一個EBS卷
創建一個EBS卷aws ec2 create-volume --availability-zone=eu-west-1a --size=10 --volume-type=gp2
要保證zone和k8s集群相同。(并需要檢查size以及EBS卷類型是否合理)
AWS EBS實例配置apiVersion: v1 kind: Pod metadata: name: test-ebs spec: containerss: - image: k8s.gcr.io/test-webserver name: test-container volumeMounts: - mountPath: /test-ebs name: test-volume volumes: - name: test-volume # This AWS EBS volume must already exist. awsElasticBlockStore: volumeID:azureDiskfsType: ext4
azureDisk用于將一個Microsoft Azure Data Disk掛載到一個Pod中。
更多細節敲這里。
emptyDir一個emptyDir卷在Pod分配給Node時首次創建,并且只要Pod在節點上運行,它就一直存在。正如它的名字所說,它初始是空的。Pod中的容器可以在一個emptyDir卷中讀寫到相同文件,盡管這個卷可以掛載到不同容器的相同或不同的路徑。當一個Pod由于某種原因從節點上移除,emptyDir中的數據也會被永久刪除。
注意:一個容器崩潰并不會從一個節點移除所在Pod,因此在容器崩潰的條件下,emptyDir卷中的數據是安全的。
emptyDir的應用場景:
臨時的空間,例如用于一個基于磁盤的merge sort
用于從崩潰恢復的長時計算
保存一個內容管理容器獲取的數據,這些數據用于一個webserver容器對外提供服務
默認情況下,emptyDir卷可以基于節點上的任何介質進行存儲 - 可能是磁盤或者SSD或者網絡存儲,這取決于你的環境。你也可以設置emptyDir.medium字段為Memory,以告知Kubernetes為你掛載一個tmpfs(基于內存的文件系統)。不同于磁盤,tmpfs非常快,并且tmpfs在節點重啟時會被擦除并且你寫入的數據量取決于你的容器內存大小。
示例PodapiVersion: v1 kind: Pod metadata: name: test-pd spec: containers: - image: k8s.gcr.io/test-webserver name: test-container volumnMounts: - mountPath: /cache name: cache-volume volumes: - name: cache-volumne emptyDir: {}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32711.html
摘要:標識是與操作對象間的紐帶。集群為每個對象維護三類信息對象元數據期望狀態與實際狀態元數據指對象的基本信息,比如命名標簽注釋等等,用于識別對象期望狀態一般由用戶配置來描述的實際狀態是由集群各個組件上報的集群實際的運行情況。 綜述 學習Kubernetes時,發現它的概念和術語還是比較多的,光靠啃官方文檔比較晦澀。所以邊學習邊整理,對主要的概念和術語做一下分類及簡要說明。感覺把重要概念都理解...
摘要:功能強大擴展性高,在許多人看來,它正在成為云計算的終極解決方案。我已經多次給具有豐富存儲和云計算經驗的人解釋過這些問題,他們幾乎都是抓耳撓腮,不明白這是怎么回事。和可能因為和使用起來太麻煩了,在年月,隨著版本的發布,引入了動態納管和的概念。 Kubernetes存儲全解!你知道PV和PVC的區別嗎?storage class和provisioner是什么關系?VolumeClaimTe...
摘要:這與不同,因為將繼續存在于系統中,直到用戶刪除它。和持久卷聲明之間很容易弄混淆。該在直接和使用前必須已經存在。這對于需要持久化儲存但只有本地卷可用的工作負載,這非常有用。此外,由于缺少,會失去使用自動伸縮的能力。 showImg(https://segmentfault.com/img/remote/1460000017071596?w=1920&h=1080); 回 顧 在本系列...
摘要:基本架構彩色版基本概念節點運行著集群管理相關的一組進程這些進程實現了整個集群的資源管理調度彈性伸縮安全控制系統監控糾錯等管理功能。內置了透明的負載均衡以及故障恢復的機制。標簽解決與之間的關聯問題。 基本架構 showImg(https://segmentfault.com/img/bVuv7w); 彩色版 showImg(https://segmentfault.com/img/bVu...
閱讀 2805·2021-11-22 14:44
閱讀 545·2021-11-22 12:00
閱讀 3686·2019-08-30 15:54
閱讀 1576·2019-08-29 17:15
閱讀 1903·2019-08-29 13:50
閱讀 1113·2019-08-29 13:17
閱讀 3519·2019-08-29 13:05
閱讀 1184·2019-08-29 11:31