Kubernetes共享存儲(chǔ)詳解

Kubernetes 對(duì)于有狀態(tài)的容器應(yīng)用或者對(duì)數(shù)據(jù)需要持久化的應(yīng)用,不僅需要將容器內(nèi)的目錄掛載到宿主機(jī)的目錄或者 emptyDir 臨時(shí)存儲(chǔ)卷,而且需要更加可靠的存儲(chǔ)來(lái)保護(hù)應(yīng)用產(chǎn)生的重要數(shù)據(jù),以便容器應(yīng)用在重建之后,仍然可以使用之前的數(shù)據(jù)。不過(guò),存儲(chǔ)資源和計(jì)算資源(GPU/內(nèi)存)的管理方式完全不同。為了能夠屏蔽底層存儲(chǔ)實(shí)現(xiàn)的細(xì)節(jié),讓用戶方便使用,同時(shí)能讓管理員方便管理,Kubernetes從v1.0版本就引入了 PersistentVolumePersistentVolumeClaim 兩個(gè)資源對(duì)象來(lái)實(shí)現(xiàn)對(duì)存儲(chǔ)的管理子系統(tǒng)。

PersistentVolume(PV) 是對(duì)底層網(wǎng)絡(luò)共享存儲(chǔ)的對(duì)象,將共享存儲(chǔ)定義為一種”資源“,比如節(jié)點(diǎn)(Node)也是一種容器應(yīng)用可以”消費(fèi)“的資源。PV由管理員進(jìn)行創(chuàng)建和配置,它與共享存儲(chǔ)的具體實(shí)現(xiàn)直接相關(guān),例如 GlusterFS、iSCSI、RBD或GCE/AWS 公有云提供的共享存儲(chǔ),通過(guò)插件式的機(jī)制完成與共享存儲(chǔ)的對(duì)接,以供應(yīng)用訪問(wèn)和使用。

PersistentVolumeClaim(PVC) 則是用戶對(duì)于存儲(chǔ)資源的一個(gè)”申請(qǐng)“。就像 Pod ”消費(fèi)“ Node 的資源一樣,PVC 會(huì)”消費(fèi)“ PV資源。PVC 可以申請(qǐng)?zhí)囟ǖ拇鎯?chǔ)空間和訪問(wèn)模式。

使用 PVC ”申請(qǐng)“到一定的存儲(chǔ)空間仍然不足以滿足應(yīng)用對(duì)于存儲(chǔ)設(shè)備的各種需求。通常應(yīng)用程序都會(huì)對(duì)存儲(chǔ)設(shè)備的特性和性能有不同的要求,包括讀寫(xiě)速度、并發(fā)性能、數(shù)據(jù)冗余等更高的要求,Kubernetes 從 v1.4 版本開(kāi)始引入了一個(gè)新的資源對(duì)象StorageClass,用于標(biāo)記存儲(chǔ)資源的特性和性能。到v1.6版本時(shí),StorageClass 和動(dòng)態(tài)資源供應(yīng)的機(jī)制得到了完善,實(shí)現(xiàn)了存儲(chǔ)卷的按需創(chuàng)建,在共享存儲(chǔ)的自動(dòng)化管理進(jìn)程中實(shí)現(xiàn)了重要的一步。

通過(guò) StorageClass 的定義,管理員可以將存儲(chǔ)資源定義為某種類別(Class),正如存儲(chǔ)設(shè)備對(duì)于自身的配置描述(Profile),例如"快速存儲(chǔ)"、”慢速存儲(chǔ)“、”有數(shù)據(jù)冗余“、”無(wú)數(shù)據(jù)冗余“等。用戶依據(jù) StorageClass 的描述就能夠直觀得知各種存儲(chǔ)資源的特性,就可以根據(jù)應(yīng)用對(duì)存儲(chǔ)資源的需求去申請(qǐng)存儲(chǔ)資源了。

下面對(duì)Kubernetes的PV、PVC、StorageClass和動(dòng)態(tài)資源供應(yīng)等共享存儲(chǔ)管理機(jī)制進(jìn)行詳細(xì)說(shuō)明。

PV詳解

PV作為存儲(chǔ)資源,主要包括存儲(chǔ)能力、訪問(wèn)模式、存儲(chǔ)類型、回收策略、后端存儲(chǔ)類型等關(guān)鍵信息的設(shè)置。下面的例子聲明的PV具有如下屬性:5Gi 存儲(chǔ)空間、訪問(wèn)模式為 “ReadWriteOnce”,存儲(chǔ)類型為 “slow” (要求系統(tǒng)中已存在名為 slow 的 StorageClass),回收策略為 “Recycle”,并且后端存儲(chǔ)類型為 “nfs” (設(shè)置了 NFS Server 的IP地址和路徑):

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv1
spec:
  capacity:
    storage: 5Gi
  accessMode:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: slow
  nfs:
    path: /tmp
    server: 172.17.0.2

Kubernetes支持的PV類型如下:

  • gcePersistentDisk:GCE公共云提供的 PersistentDisk。
  • AWSElasticBlockStore:AWS公共云提供的 ElasticBlockStore。
  • AzureFile:Azure公共云提供的File。
  • AzureDisk:Azure公共云提供的Disk。
  • FC(Fibre Channel)
  • Flocker
  • NFS:網(wǎng)絡(luò)文件系統(tǒng)。
  • iSCSI
  • RBD(Rados Block Device):Ceph塊存儲(chǔ)。
  • CephFS
  • GlusterFS
  • Cinder:OpenStack Cinder塊存儲(chǔ)。
  • VsphereVolume
  • Quobyte Volumes
  • VMware Photon
  • Portworx Volumes
  • ScaleIO Volumes
  • HostPath:宿主機(jī)目錄,僅用于單機(jī)測(cè)試。
    每種存儲(chǔ)類型都有各自的特定,在使用時(shí)需要根據(jù)它們各自的參數(shù)進(jìn)行設(shè)置。

1. PV的關(guān)鍵配置參數(shù)

1)存儲(chǔ)能力(Capacity)

描述存儲(chǔ)設(shè)備的能力,目前僅支持對(duì)存儲(chǔ)空間的設(shè)置(storage=xx),未來(lái)可能加入IOPS、吞吐率等指標(biāo)的設(shè)置。

2)訪問(wèn)模式(Access Modes)

對(duì)PV進(jìn)行訪問(wèn)模式的設(shè)置,用于描述用戶應(yīng)用對(duì)存儲(chǔ)資源的訪問(wèn)權(quán)限。訪問(wèn)模式如下:

  • ReadWriteOnce(簡(jiǎn)寫(xiě)為RWO):讀寫(xiě)權(quán)限,并且只能被單個(gè)Node掛載。
  • ReadOnlyMany(簡(jiǎn)寫(xiě)為ROX):只讀權(quán)限,允許被多個(gè)Node掛載。
  • ReadWriteMany(簡(jiǎn)寫(xiě)為RWX):讀寫(xiě)權(quán)限,允許被多個(gè)Node掛載。

某些PV可能支持多種訪問(wèn)模式,但PV在掛載時(shí)只能使用一種訪問(wèn)模式,多種訪問(wèn)模式不能同時(shí)生效。

下表描述了不同的存儲(chǔ)提供者支持的訪問(wèn)模式,在PV的定義時(shí)需要與它們匹配:

3)存儲(chǔ)類別(Class)

PV可以設(shè)定其存儲(chǔ)的類型(Class),通過(guò) storageClassName 參數(shù)指定一個(gè) StorageClass 資源對(duì)象的名稱。具有特定“類別”的 PV 只能與請(qǐng)求了該“類別”的 PVC 進(jìn)行綁定。未設(shè)定 “類別” 的 PV 則只能與不請(qǐng)求任何 “類別” 的 PVC 進(jìn)行綁定。

4)回收策略

目前支持如下三種回收策略:

  • 保留(Retain):保留數(shù)據(jù),需要手工處理。
  • 回收空間(Recycle):簡(jiǎn)單清除文件的操作(例如執(zhí)行 rm -rf /thevolume/* 命令)。
  • 刪除(Delete):與 PV 向量的后端存儲(chǔ)完成 volume 的刪除操作;如 AWS EBS、 GCE PD、Azure Disk 和 Cinder volumes 支持 “Delete” 策略。

目前,只有 NFS 和 HostPath 兩種類型的存儲(chǔ)設(shè)備支持 “Recycle” 策略; AWS EBS、 GCE PD、Azure Disk 和 Cinder volumes 支持 “Delete” 策略。

2. PV 生命周期的各個(gè)階段(Phase)

某個(gè) PV 在生命周期中,可以處于以下4個(gè)階段之一:

  • Available:可用狀態(tài),還未與某個(gè) PVC 綁定。
  • Bound:已與某個(gè) PVC 綁定。
  • Released:綁定的 PVC 已經(jīng)刪除,資源已釋放,但沒(méi)有被集群回收。
  • Failed:自動(dòng)資源回收失敗。

3. PV 的掛載參數(shù)(Mount Options)

在將PV掛載到一個(gè) Node 上時(shí),根據(jù)后端存儲(chǔ)的特點(diǎn),可能需要設(shè)置額外的掛載參數(shù),目前可以通過(guò)在PV的定義中,設(shè)置一個(gè)名為“volume.beta.kubernetes.io/mount-options”的 annotation 來(lái)實(shí)現(xiàn)。下面的例子對(duì)一個(gè)類型的 gcePersistentDisk 的 PV 設(shè)置了掛載參數(shù) “discard”:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: gce-disk-1
  annotations:
    volume.beta.kubernetes.io/mount-options: discard
  spec:
    capacity:
      storage: 10Gi
    accessMode:
      - ReadWriteOnce
    gcePersistentDisk:
      fsType: ext4
      pdName: gce-disk-1

并非所有類型的存儲(chǔ)都支持設(shè)置掛載參數(shù)。從 Kubernetes v1.6 版本開(kāi)始,以下存儲(chǔ)類型支持設(shè)置掛載參數(shù):

  • gcePersistentDisk
  • AWSElasticBlockStore
  • AzureFile
  • AzureDisk
  • NFS
  • iSCSI
  • RBD(Rados Block Device)
  • CephFS
  • GlusterFS
  • Cinder
  • VsphereVolume
  • Quobyte Volumes
  • VMware Photon

定義了 PV 以后如何使用呢?這是就需要用到 PVC 了。

PVC詳解

PVC 作為用戶對(duì)存儲(chǔ)資源的需求申請(qǐng),主要包括存儲(chǔ)空間請(qǐng)求、訪問(wèn)模式、PV 選擇條件和存儲(chǔ)類別等信息的設(shè)置。下面的例子聲明的 PVC 具有如下屬性:申請(qǐng)8Gi存儲(chǔ)空間,訪問(wèn)模式為 “ReadWriteOnce”, PV 選擇條件為包含標(biāo)簽 “release=stable” 并且包含條件為 “environment In [dev]”的標(biāo)簽,存儲(chǔ)類別為 “slow” (要求系統(tǒng)中已存在名為 slow 的 StorageClass):

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  resources:
   requests:
     storage: 8Gi
   storageClassName: slow
   selector:
     matchLabels:
       release: stable
     matchExpressions:
       - {key: environment, operator: In, values: [dev]}

PVC的關(guān)鍵配置參數(shù)說(shuō)明如下:

  • 資源請(qǐng)求(Resources):描述對(duì)存儲(chǔ)資源的請(qǐng)求,目前僅支持 request.storage 的設(shè)置,即存儲(chǔ)空間大小。
  • 訪問(wèn)模式(Access Modes):PVC 也可以設(shè)置訪問(wèn)模式,用于描述用戶應(yīng)用對(duì)存儲(chǔ)資源的訪問(wèn)權(quán)限??梢栽O(shè)置的三種訪問(wèn)模式與 PV 的設(shè)置相同。
  • PV選擇條件(Selector):通過(guò) Label Selector 的設(shè)置,可使 PVC 對(duì)應(yīng)系統(tǒng)中已存在的各種 PV 進(jìn)行篩選。系統(tǒng)將根據(jù)標(biāo)簽選擇出合適的 PV 與該 PVC 進(jìn)行綁定。選擇條件可以使用 matchLabelsmatchExpressions 進(jìn)行設(shè)置,如果兩個(gè)字段都設(shè)置了,則 Selector 的邏輯將是兩組條件同時(shí)滿足才能完成匹配。
  • 存儲(chǔ)類別(Class):PVC 在定義時(shí)可以設(shè)定需要的后端存儲(chǔ)的“類別”(通過(guò) storageClassName 字段指定),以降低對(duì)后端存儲(chǔ)特性的詳細(xì)信息的依賴。只有設(shè)置了該 Class 的 PV 才能被系統(tǒng)選出,并與該 PVC 進(jìn)行綁定。

PVC 也可以不設(shè)置 Class 需求。如果 storageClassName 字段的值被設(shè)置為空(storageClassName=“”),則表示該 PVC 不要求特定的 Class,系統(tǒng)將只選擇未設(shè)定 Class 的 PV 與之匹配和綁定。 PVC 也可以完全不設(shè)置 storageClassName 字段,此時(shí)系統(tǒng)將根據(jù)系統(tǒng)是否啟用了名為 “DefaultStorageClass” 的 admission controller 進(jìn)行相應(yīng)的操作。

  • 未啟用 DefaultStorageClass:等效于 PVC 設(shè)置 storageClassName 的值為空(storageClassName=“”),即只能選擇未設(shè)定 Class 的 PV 與之匹配和綁定。
  • 啟用DefaultStorageClass:要求極其管理員已定義默認(rèn)的 StorageClass。如果系統(tǒng)中不存在默認(rèn)的 StorageClass, 則等效于不啟用 DefaultStorageClass 的情況。如果存在默認(rèn)的 StorageClass,則系統(tǒng)將自動(dòng)為 PVC 創(chuàng)建一個(gè) PV(使用默認(rèn) StorageClass 的后端存儲(chǔ)),并將它們進(jìn)行綁定。集群管理員設(shè)置默認(rèn) StorageClass 的方法為,在 StorageClass 的定義中加上一個(gè) annotation “storageclass.kubernetes.io/is-default-class=true”,如果管理員將多個(gè) StorageClass 都定義為default,則由于不唯一,系統(tǒng)將無(wú)法為 PVC 創(chuàng)建相應(yīng)的 PV。

注意,PVC 和 PV 都受限于 namespace,PVC 在選擇 PV 時(shí)受到 namespace 的限制,只有相同 namespace 中的 PV 才可能與 PVC 綁定。 Pod 在應(yīng)用 PVC 時(shí)同樣受到 namespace 的限制,只有相同 namespace 中的 PVC 才能掛載到 Pod 內(nèi)。

當(dāng) Selector 中的 Class 都進(jìn)行設(shè)置時(shí),系統(tǒng)將選擇兩個(gè)條件同時(shí)滿足的 PV 與之匹配。

另外,如果資源供應(yīng)使用的是動(dòng)態(tài)模式,即管理員沒(méi)有預(yù)先定義 PV,僅通過(guò) StorageClass 交給系統(tǒng)自動(dòng)完成 PV 的動(dòng)態(tài)創(chuàng)建,那么 PVC 再設(shè)定 Selector 時(shí),系統(tǒng)將無(wú)法為其供應(yīng)任何存儲(chǔ)資源了。

在啟用動(dòng)態(tài)供應(yīng)模式的情況下,一旦用戶刪除了 PVC, 與之綁定的 PV 將根據(jù)其默認(rèn)的回收策略 “Delete” 也會(huì)被刪除。如果需要保留 PV (用戶數(shù)據(jù)),則在動(dòng)態(tài)綁定成功后,用戶需要將系統(tǒng)自動(dòng)生成 PV 的回收策略從“Delete” 改成 “Retain”。

PV 和 PVC 的生命周期

PV 可以看做可用的存儲(chǔ)資源, PVC則是對(duì)存儲(chǔ)資源的需求,PV 和 PVC 的相互關(guān)系遵循如下圖所示的聲明周期:

PV 和 PVC的生命周期

1.資源供應(yīng)(Provisioning)

Kubernetes 支持兩種資源的供應(yīng)模式:靜態(tài)模式(Static)和動(dòng)態(tài)模式(Dynamic)。資源供應(yīng)的結(jié)果就是創(chuàng)建好的 PV。

  • 靜態(tài)模式:集群管理員手工創(chuàng)建許多 PV,在定義 PV 時(shí)需要將后端存儲(chǔ)的特性進(jìn)行設(shè)置。
  • 動(dòng)態(tài)模式:集群管理員無(wú)需手工創(chuàng)建 PV,而是通過(guò) StorageClass 的設(shè)置對(duì)后端存儲(chǔ)進(jìn)行描述,標(biāo)記為某種“類型(Class)”。此時(shí)要求 PVC 對(duì)存儲(chǔ)的類型進(jìn)行聲明,系統(tǒng)將自動(dòng)完成 PV 的創(chuàng)建及與 PVC 的綁定。PVC 可以聲明 Class 為 "",說(shuō)明該 PVC 禁止使用動(dòng)態(tài)模式。

2.資源綁定(Binding)

在用戶定義好 PVC 之后,系統(tǒng)將根據(jù) PVC 對(duì)存儲(chǔ)資源的請(qǐng)求(存儲(chǔ)空間和訪問(wèn)模式)在已存在的 PV 中選擇一個(gè)滿足 PVC 要求的 PV,一旦找到,就將該 PV 與用戶定義的 PVC 進(jìn)行綁定,然后用戶的應(yīng)用就可以使用這個(gè) PVC 了。如果系統(tǒng)中沒(méi)有滿足 PVC 要求的 PV, PVC則會(huì)無(wú)限期處于 Pending 狀態(tài),知道等到系統(tǒng)管理員創(chuàng)建了一個(gè)符合其要求的 PV。PV 一旦綁定到某個(gè) PVC 上,就被這個(gè) PVC 獨(dú)占,不能再與其他 PVC 進(jìn)行綁定了。在這種情況下,當(dāng) PVC 申請(qǐng)的存儲(chǔ)空間比 PV 少時(shí),整個(gè) PV 的空間都能夠?yàn)?PVC 所用,可能會(huì)造成資源的浪費(fèi),如果資源供應(yīng)使用的是動(dòng)態(tài)模式,則系統(tǒng)在為 PVC 找到合適的 StorageClass 后,將自動(dòng)創(chuàng)建一個(gè) PV 并完成與 PVC 的綁定。

3.資源使用(Using)

Pod 使用 volume 的定義,將 PVC 掛載到容器內(nèi)的某個(gè)路徑進(jìn)行使用。volume 的類型為 “persistentVolumeClaim”,在后面的示例中再進(jìn)行詳細(xì)說(shuō)明。在容器應(yīng)用掛載了一個(gè) PVC 后,就能被持續(xù)獨(dú)占使用。不過(guò),多個(gè) Pod 可以掛載同一個(gè) PVC,應(yīng)用程序需要考慮多個(gè)實(shí)例共同訪問(wèn)一塊存儲(chǔ)空間的問(wèn)題。

4.資源釋放(Releasing)

當(dāng)用戶對(duì)存儲(chǔ)資源使用完畢后,用戶可以刪除 PVC,與該 PVC 綁定的 PV 將會(huì)被標(biāo)記為“已釋放”,但還不能立刻與其他 PVC 進(jìn)行綁定。通過(guò)之前 PVC 寫(xiě)入的數(shù)據(jù)可能還留在存儲(chǔ)設(shè)備上,只有在清除之后該 PV 才能再次使用。

5.資源回收(Reclaiming)

對(duì)于 PV,管理員可以設(shè)定回收策略(Reclaim Policy),用于設(shè)置與之綁定的 PVC 釋放資源之后,對(duì)于遺留數(shù)據(jù)如何處理。只有 PV 的存儲(chǔ)空間完成回收,才能供新的 PVC 綁定和使用?;厥詹呗栽斠?jiàn)下節(jié)的說(shuō)明。
下面通過(guò)兩張圖分別對(duì)在靜態(tài)資源供應(yīng)模式和動(dòng)態(tài)資源供應(yīng)模式下,PV、PVC、StorageClass 及 Pod 使用 PVC 的原理進(jìn)行說(shuō)明。

下圖描述了在靜態(tài)資源供應(yīng)模式下,通過(guò) PV 和 PVC 完成綁定,并供 Pod 使用的存儲(chǔ)管理機(jī)制。

在靜態(tài)模式下的PV和PVC原理

下圖描述了在動(dòng)態(tài)資源供應(yīng)模式下,通過(guò) StorageClass 和 PVC 完成資源動(dòng)態(tài)綁定(系統(tǒng)自動(dòng)生成 PV),并供 Pod 使用的存儲(chǔ)管理機(jī)制。


在動(dòng)態(tài)模式下的 StorageClass、PV 和 PVC 原理

接下來(lái),我們?cè)倏纯?StorageClass 的概念和用法。

StorageClass 詳解

StorageClass 作為對(duì)存儲(chǔ)資源的抽象定義,對(duì)用戶設(shè)置的 PVC 申請(qǐng)屏蔽后端資源存儲(chǔ)的細(xì)節(jié),一方面減輕用戶對(duì)存儲(chǔ)資源細(xì)節(jié)的關(guān)注,另一方面也減輕了管理員手工管理 PV 的工作,由系統(tǒng)自動(dòng)完成 PV 的創(chuàng)建和綁定,實(shí)現(xiàn)了動(dòng)態(tài)的資源供應(yīng)。使用基于 StorageClass 的動(dòng)態(tài)資源供應(yīng)模式將逐步成為云平臺(tái)的標(biāo)準(zhǔn)存儲(chǔ)配置模式。

StorageClass 的定義主要包括名稱、后端存儲(chǔ)的提供者(Provisioner)和后端存儲(chǔ)的相關(guān)參數(shù)配置。StorageClass 一旦被創(chuàng)建出來(lái),將無(wú)法修改。如果需要更改,則只能刪除原 StorageClass 的定義重建。下面的例子定義了一個(gè)名為 “standard” 的 StorageClass,提供者為 aws-ebs,其參數(shù)設(shè)置了一個(gè) type=gp2。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: standard
provisioner: kubernetes.io/aws-ebs
parameters:

1.StorageClass 的關(guān)鍵配置參數(shù)

1) 提供者(Provisioner)

描述存儲(chǔ)資源的提供者,也可以看做后端存儲(chǔ)驅(qū)動(dòng)。目前 Kubernetes 支持的 Provisioner 都以 “kubernetes.io/” 為開(kāi)頭,用戶也可以使用自定義的后端存儲(chǔ)提供者。為了符合 StorageClass 的用法,自定義 Provisioner 需要符合存儲(chǔ)卷的開(kāi)發(fā)規(guī)范。

2)參數(shù)(Parameters)

后端存儲(chǔ)資源提供者的參數(shù)設(shè)置,不同的 Provisioner 包括不同的參數(shù)設(shè)置。某些參數(shù)可以不顯示設(shè)定, Provisioner 將使用其默認(rèn)值。
接下來(lái)通過(guò)幾種常見(jiàn)的 Provisioner 對(duì) StorageClass 的定義進(jìn)行詳細(xì)說(shuō)明:
AWS EBS 存儲(chǔ)卷

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: slow
provisioner: kubernetes.io/aws-ebs
parameters:
  type: io1
  zone: us-east-1d
  iopsPerGB: "10"

參數(shù)說(shuō)明如下(詳細(xì)說(shuō)明請(qǐng)參數(shù) AWS EBS文檔):

  • type:可選項(xiàng)為io1,gp2,sc1,st1,默認(rèn)值為gp2
  • zone:AWS zone的名稱
  • iopsPerGB:及用于io1類型的volume,意為每秒GiB的I/O操作數(shù)量
  • encrypted:是否加密
  • kmsKeyId:加密時(shí)的 Amazon Resource Name

GCE PD 存儲(chǔ)卷

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: slow
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  zone: us-centrall-a

參數(shù)說(shuō)明如下(詳細(xì)說(shuō)明請(qǐng)參考GCE文檔):

  • type:可選項(xiàng)為pd-standard、pd-ssd,默認(rèn)值為pd-standard
  • zone:GCE zone名稱

GlusterFS 存儲(chǔ)卷

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: slow
provisioner: kubernetes.io/glusterfs
parameters:
  resturl: "http://127.0.0.1:8081"
  clusterid: "2bce7ww8rwruisfdfuuy67wer"
  restauthenabled: "true"
  restuser: "admin"
  restuserkey: "My Secret"
  secretNamespace: "default"
  secretName: "heketi-secret"
  gidMin: "40000"
  gidMax: "50000"
  volumetype: "replicate:3"

參數(shù)說(shuō)明如下(詳細(xì)說(shuō)明請(qǐng)參數(shù) GlusterFS 和 Heketi 的文檔):
-resturl:Gluster REST服務(wù)(Heketi)的URL地址,用于自動(dòng)完成 GlusterFSvolume的設(shè)置。
-restauthenabled:是否對(duì) Gluster REST服務(wù)啟用安全機(jī)制。
-restuser:訪問(wèn)Gluster REST服務(wù)的用戶名。
-secretNamespace 和 secretName:保存訪問(wèn) Gluster REST服務(wù)密碼的 Secret 資源對(duì)象名。
-clusterid:GlusterFS 的 Cluster ID。
-gidMin 和 gidMax:StorageClass 的 GID 范圍,用于動(dòng)態(tài)資源供應(yīng)時(shí)為 PV 設(shè)置的 GID。
-volumetype:GlusterFS 的 volume 類型設(shè)置,例如 replicate:3 (Replicate類型,3份副本);disperse:4:2(Disperse類型,數(shù)據(jù)4份,冗余2份);“none”(Distribute類型)。

OpenStack Cinder存儲(chǔ)卷

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: gold
provisioner: kubernetes.io/cinder
parameters:
  type: fast
  availability: nova

參數(shù)說(shuō)明如下:

  • type:Cinder 的 VolumeType,默認(rèn)值為空。
  • availability:Availability Zone,默認(rèn)值為空。
    其他 Provisioner 的 StorageClass 相關(guān)參數(shù)設(shè)置請(qǐng)參考它們各自的配置手冊(cè)。

2.設(shè)置默認(rèn)的(Default)StorageClass

要在系統(tǒng)中設(shè)置一個(gè)默認(rèn)的 StorageClass,首先需要啟用名為“DefaultStorageClass”的 admission controller,即在 kube-apiserver 的命令行參數(shù) --admission-control 中增加:

--admission-control=...,DefaultStorageClass

然后,在 StorageClass 的定義中設(shè)置一個(gè) annotation:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: gold
  annotations:
    storageclass.beta.kubernetes.io/is-default-class="true"
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-ssd

通過(guò) kubectl create命令創(chuàng)建成功后,查看 StorageClass 列表,可以看到名為 gold 的 StorageClass 被標(biāo)記為“default”:

# kubectl get sc
NAME               TYPE
gold(default)           kubernetes.io/gce-pd
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容