Kubernetesvolumes有什么用

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

成都創(chuàng)新互聯(lián)響應(yīng)式網(wǎng)站特點(diǎn)就是不管在電腦、平板還是手機(jī)上,H5建站都會(huì)根據(jù)屏幕尺寸自動(dòng)調(diào)節(jié)大小、圖片分辨率,并且融入一定的動(dòng)畫特效,讓網(wǎng)站看起來非常的美觀大方。從網(wǎng)站需求對接到網(wǎng)站制作設(shè)計(jì)、從代碼編寫到項(xiàng)目上線運(yùn)維,技術(shù)人員全程跟蹤,快速響應(yīng)

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

背景

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

當(dāng)Pod被分配到一個(gè)Node上時(shí),emptyDir volume就第一次被創(chuàng)建,只要Pod還運(yùn)行在該Node上,該volume就一直存在。就像它名字里介紹的一樣,它初始化時(shí)是空的。pod中的容器都能夠完全讀寫emptyDir volume中相同文件,即使volume可能被映射到每個(gè)容器中不同的路徑下。任何情況下,一旦pod從該Node上移除了,emptyDir volume中的數(shù)據(jù)就被永久刪除了。注意:容器crash并不會(huì)在Node上刪除pod,因此emptyDir volume中的數(shù)據(jù)依然是安全的。
  emptyDir volume的使用場景有:
  1) 臨時(shí)空間,如基于磁盤的排序場景等;
  2) 從crash中通過checkpointing做長時(shí)間的計(jì)算恢復(fù);
  默認(rèn)的,emptyDir volume可以存儲(chǔ)在任何后端介質(zhì)之上——普通磁盤、ssd或網(wǎng)絡(luò)存儲(chǔ),這都取決于你的環(huán)境。然而,你也可以設(shè)置emptyDir.medium字段為Memory,告訴Kubernetes映射tmpfs(基于RAM的文件系統(tǒng))。tmpfs速度非???,但要小心它和磁盤不同,一旦機(jī)器重啟,tmpfs就會(huì)被清空,并且,tmpfs上寫文件會(huì)受到容器內(nèi)存的限制。
  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文件系統(tǒng)中的文件或者目錄到pod里。大多數(shù)Pod都不需要這個(gè)功能,但對于一些特定的場景,該特性還是很有作用的。這些場景包括:
  1) 運(yùn)行的容器需要訪問Docker內(nèi)部結(jié)構(gòu):使用hostPath映射/var/lib/docker
  2) 在容器中運(yùn)行cAdvisor,使用hostPath映射/dev/cgroups
  不過,使用這種volume要小心,因?yàn)椋?br/>  1) 配置相同的pod(如通過podTemplate創(chuàng)建),可能在不同的Node上表現(xiàn)不同,因?yàn)椴煌?jié)點(diǎn)上映射的文件內(nèi)容不同
  2) 當(dāng)Kubernetes增加了資源敏感的調(diào)度程序,hostPath使用的資源不會(huì)被計(jì)算在內(nèi)
  3) 宿主機(jī)下創(chuàng)建的目錄只有root有寫權(quán)限。你需要讓你的程序運(yùn)行在privileged container上,或者修改宿主機(jī)上的文件權(quán)限。
  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設(shè)備映射到pod中。當(dāng)Pod被移除時(shí),emptyDir卷的內(nèi)容會(huì)被清空,和emptyDir不同,rbd卷的內(nèi)容還存在著,僅僅是卷被卸載掉而已。也就是說,rbd卷可以其上的數(shù)據(jù)一起,再次被映射,數(shù)據(jù)也可以在pod之間傳遞。
  重要:在使用rbd卷之前,你必須先安裝Ceph環(huán)境。
  RBD的一個(gè)特性就是能夠以只讀的方式同時(shí)映射給多個(gè)用戶使用。不幸的是,rbd卷只能被一個(gè)用戶已可讀寫的模式映射——不能同時(shí)允許多個(gè)可寫的用戶使用。
  查看RBD example獲取更多細(xì)節(jié)。

cephfs

cephfs卷可以將已經(jīng)存在的CephFS卷映射到pod中。與rbd卷相同,當(dāng)pod被移除時(shí),cephfs卷的內(nèi)容還存在著,僅僅是卷被卸載掉而已。另外一點(diǎn)不同的是,CephFS可以同時(shí)以可讀寫的方式映射給多個(gè)用戶。
  查看CephFS example獲取更多細(xì)節(jié)。

使用subPath

有時(shí),可以在一個(gè)pod中,將同一個(gè)卷共享,使其有多個(gè)用處。volumeMounts.subPath特性可以用來指定卷中的一個(gè)子目錄,而不是直接使用卷的根目錄。
  這里有一個(gè)使用LAMP棧(Linux Apache MySQL PHP)的pod示例,該pod使用了一個(gè)共享的卷。HTML內(nèi)容映射在它的html子目錄,而數(shù)據(jù)庫則保存在它的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卷的存儲(chǔ)介質(zhì)(磁盤,SSD等)取決于kubelet根目錄(如/var/lib/kubelet)所處文件系統(tǒng)的存儲(chǔ)介質(zhì)?,F(xiàn)在沒有限制emptyDir或者hostPath卷能使用的空間大小,也沒有對容器或者pod的資源隔離。
  未來,我們期望emptyDir或者hostPath卷能夠通過resource屬性,來請求指定大小的空間,并且選擇存儲(chǔ)介質(zhì)類型。

以上是“Kubernetes volumes有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前標(biāo)題:Kubernetesvolumes有什么用
當(dāng)前URL:http://bm7419.com/article24/jdiice.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站維護(hù)、微信公眾號(hào)、App設(shè)計(jì)、微信小程序、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)