1. 程式人生 > >kubernetes1.4新特性:支援兩種新的卷外掛Quobyte和AzureDisk_Kubernetes中文社群

kubernetes1.4新特性:支援兩種新的卷外掛Quobyte和AzureDisk_Kubernetes中文社群

背景介紹

在Kubernetes中卷的作用在於提供給POD持久化儲存,這些持久化儲存可以掛載到POD中的容器上,進而給容器提供持久化儲存。

從圖中可以看到結構體PodSpec有個屬性是Volumes,通過這個Volumes屬性可以關聯到結構體Volume和結構體VolumeSource,而且這個Volumes屬性是一個數組型別,就是說POD可以關聯到多個不同型別的捲上面。

結構體Container表示POD中的容器,這個結構體有一個屬性VolumeMounts,通過這個屬性讓容器知道具體掛載的儲存路徑,這個VolumeMounts屬性也是一個數組型別,就是說容器可以掛載多個儲存路徑。

支援新的卷外掛

Kubernetes一共支援22種卷外掛。在Kubernetes1.4中又新增了兩種新的卷外掛:Quobyte和AzureDisk。

Quobyte

這是Quobyte公司推出的分散式檔案系統。要想在kubernetes中使用Quobyte儲存,需要提前部署Quobyte軟體,要求必須是1.3以及更高版本,並且在kubernetes管理的節點上面部署Quobyte客戶端。

為什麼要使用1.3以及更高版本?因為這些版本中Quobyte提供了一個特性:fixed-user掛載,這個新特性允許所有Quobyte卷都會被掛載到一個路徑下面,同時又可以按照不同使用者來進行分別使用。所有對Quobyte卷的訪問都是區分使用者和組的,當然也可以不區分,區分的好處就是可以實現多租戶隔離。下圖是一個fixed-user掛載的示例:

容器A設計成只能通過wordpress這個使用者來執行操作,但是對於quobyte來說,容器A實際上是通過使用者job來執行實際讀寫操作的;容器B設計成通過root使用者來執行操作,但是對於quobyte來說,容器B實際上是通過root組中的使用者mike來執行操作的。也就是說做了個使用者對映,而不是使用容器內的使用者來執行讀寫操作。

如何啟用fixed-user掛載這個特性?安裝完Quobyte客戶端後,在配置檔案/etc/quobyte/client.cfg中增加一行allow-usermapping-in-volumename。

如果不使用kubernetes,直接使用Docker,那麼也可以不安裝Quobyte客戶端,而是使用Quobyte提供的Docker外掛,在Docker中,所有Quobyte卷都會掛載到/run/docker/quobyte/mnt目錄下。這個外掛在下面環境中已經測試過:

但是比較遺憾的是Quobyte提供的Docker外掛現在還不支援fixed-user掛載這個特性,如果想使用這個特性,就必須安裝Quobyte客戶端。

下面是quobyte卷對應的結構體:

•       變數Registry:QuoByte註冊服務入口,如果配置了多個註冊服務入口,那麼每個註冊服務入口可以通過分號分割。

•       變數Volume:QuoByte已經建立好的卷。

•       變數ReadOnly:這是一個布林型變數,預設是false,表示可以對QuoByte已經建立好的捲進行讀寫操作,如果配置成true,那麼就表示只能對QuoByte已經建立好的捲進行只讀操作。

•       變數User:操作QuoByte卷的使用者。

•       變數Group:操作QuoByte卷的組。

下面是使用Quobyte卷建立POD的示例檔案quobyte-pod.yaml:

接著通過下面命令建立POD:

在POD建立成功後,可以檢查確認quobyte卷testVolume已經被掛載上了:

AzureDisk

Azure是微軟提供的公有云服務,如果使用Azure上面的虛擬機器來作為Kubernetes叢集使用時,那麼可以通過AzureDisk這種型別的卷外掛來掛載Azure提供的資料磁碟。

下面是Azure上資料磁碟的介紹:

資料磁碟是附加到虛擬機器的 VHD,用於儲存應用程式資料或其他需要保留的資料。資料磁碟註冊為 SCSI 驅動器並且帶有所選擇的字母標記。每個資料磁碟的最大容量為 1023 GB。虛擬機器的大小決定了可附加的磁碟數目,以及可用來託管磁碟的儲存型別。Azure 中使用的 VHD 是在 Azure 的標準或高階儲存帳戶中作為頁 Blob 儲存的 .vhd 檔案。

Azure資料磁碟的核心就是Blob,Blob 就是儲存大型二進位制物件,比如用來儲存檔案、圖片、文件等二進位制格式的檔案。

Blob 分為兩種型別:

1、Block Blob (塊 Blob)。這種型別適合儲存二進位制檔案,支援斷點續傳,可以最大以 4M 為一個區塊單位,單一檔案最大可以儲存 200GB,且區塊不會連續儲存,可能會在不同的儲存伺服器分塊存放。為了適應檔案的上傳和下載而專門進行了優化。Block Blob 可以通過 2 種方式建立。不超過 64MB 的 Block Blobs 可以通過呼叫 PutBlob 操作進行上傳。大於 64M 的 Block Blobs 必須分塊上傳,且每塊的大小不能超過 4MB。Block Blob 可以近似理解為網盤。

2、Page Blob (頁 Blob)。這類儲存優化了隨機訪問。它會在儲存區中劃分一個連續的區域供應用程式存放資料,可以用來存放 VHD,單一檔案最大可以儲存1TB。

Blob 服務由 Blob 本身以及其收納容器 (Container) 構成,容器可以視為一般本機上的資料夾。

你可以通過 REST API 來訪問 Blob:

http://.blob.core.chinacloudapi.cn//

•       accountname 表示哪個 Azure 儲存賬號下的資源,是全域性唯一的。

•       blob.core.chinacloudapi.cn 表示 azure chinablob 儲存資源,是固定的。

•       containername 表示容器的名字,可以認為是訪問某一資料夾下的資源

•       blobname 表示要訪問的資源名稱,可以認為是一個 mp3 檔案,或者是一個 jpg 檔案。

舉例說明:

儲存在 leizhangstorage 儲存賬號下,containername 為 photo,blobname 為 myphoto.jpg。則這個 URL 地址為:

http://leizhangstorage.blob.core.chinacloudapi.cn/photo/myphoto.jpg

儲存在 leizhangstorage 儲存賬號下,containername 為 vhd,blobname 為 myvm.vhd。則這個 URL 地址為:

http://leizhangstorage.blob.core.chinacloudapi.cn/vhd/myvm.vhd

Container 的命名規則:

•       containername 只能是一級目錄,沒有辦法在containername 下再設定下一級別 containername

•       必須以英文或數字開頭,且名稱內只能有英文、數字及 dash(-)

•       不能以 dash(-) 開頭或結尾,dash(-) 不能連續出現

•       所有英文的字元必須是小寫

•       長度為 3-63 之間

Blob 的命名規則:

•       除了 url 的保留字元以外,其他的字元組合都可以使用

•       長度為 1-1024 個字元

•       儘量避免以 dot(.) 或者是 forward slash(/) 結尾。否則會造成 Blob Service 誤判。

下面是Kubernetes中AzureDisk卷對應的結構體:

•       變數DiskName:必選引數,表示資料磁碟的名稱。

•       變數DataDiskURI:必選引數,表示資料磁碟的訪問路徑。

•       變數CachingMode:可選引數,表示資料磁碟緩衝模式,可以選擇None、ReadOnly和ReadWrite,預設是None。

•       變數FSType:可選引數,表示資料磁碟掛載到作業系統上之後格式化成的檔案系統型別,比如:”ext4″、”xfs”、”ntfs”,預設是”ext4″。

•       變數ReadOnly:可選引數,這是一個布林型變數,表示資料磁碟是否為只讀使用,預設是false,表示可以進行讀寫操作。

下面是使用AzureDisk卷建立POD的示例檔案azuredisk-pod.yaml:

接著通過下面命令建立POD:

 總結

Kubernetes1.4一共支援22種卷外掛,從這些卷外掛就可以看出Kubernetes社群參與廠家越來越多了,這22種卷外掛可以覆蓋GoogleCompute Engine公有云、Amazon WebService公有云、Microsoft Azure公有云、基於OpenStack的公有云、基於VMware vSphere的私有云,在Kubernetes 1.4版本中又加入了第三方商用分散式儲存廠商Quobyte的支援,可以看出來,Kubernetes的影響力在擴大,將來一定會有更多廠商提供對Kubernetes的支援。

從這麼多鍾卷外掛也可以看出來,Kubernetes1.3開始推出了跨雲的Kubernetes叢集管理特性:“叢集聯盟”,也就意味著Kubernetes將來會利用目世界範圍內公有云IaaS資源,成為一個可以橫跨不同公有云IaaS資源的超級叢集管理工具,實現在全球快速部署和管理應用。