1. 程式人生 > >Kubernetes1.5新特性:自定義資源型別_Kubernetes中文社群

Kubernetes1.5新特性:自定義資源型別_Kubernetes中文社群

一、自定義資源型別

Kubernetes1.5中,在CPU、記憶體、GPU三種類型資源的基礎上新增了一種資源型別:Opaque Integer Resources,從英文直接翻譯成不透明整數資源,但是我覺著應該翻譯成自定義資源型別。

20170105134107

如上圖所示:OpaqueIntResources屬性是一個數組,代表自定義資源型別,這樣其實可以允許管理員給某個節點自定義很多個資源屬性,而不僅僅依賴於系統提供的CPU、記憶體和GPU資源,這些自定義資源屬性都存放在OpaqueIntResources這個陣列中。

自定義好了資源屬性後,在配置POD規格檔案時就可以把自定義資源屬性新增進去,提交給Kubernetes排程器後,排程器會在系統中具備自定義資源的節點上進行查詢,挑選滿足POD規格檔案資源要求的節點來執行POD。

在Kubernetes1.5中,這是一個α特性,也就是說只能應用到開發測試環境中體驗使用,還不能應用於生產環境中使用。

自定義資源型別(Opaque Integer Resources)字首是”pod.alpha.kubernetes.io/opaque-int-resource-“。API server元件限制了自定義資源型別中自定義資源屬性的數值,限制成只能設定成整數,比如可以設定成3、3000m和3Ki,下面是無效的設定值:0.5、1500m(在Kubernetes中500m表示0.5,1500m表示1.5,所以1500m不是整數,是無效的值)。

二、使用自定義資源

要想使用自定義資源,首先管理員需要手動在節點上配置自定義資源,然後使用者在POD規格檔案中配置對自定義資源的使用。因為如果管理員不手動配置自定義資源,那麼Kubernetes只會使用CPU、記憶體、GPU這三種類型資源。

為了在節點上配置自定義資源,需要向API server元件傳送PATCH型別的HTTP請求,在HTTP請求體中配置自定義資源的可用數值,這個數值只能配置成整數。

在節點上配置了一個自定義資源後,其實就是在這個節點對應的結構體NodeStatus上面Capacity屬性中增加了一條記錄,如果配置多個自定義資源,那麼Capacity屬性中就增加了多條記錄。

20170105134142

在kubernetes排程器對POD進行排程的時候,會根據每個節點對應的NodeStatus結構體中Allocatable屬性來判斷,如果POD請求了自定義資源,請求數值小於這個節點上可用自定義資源數值的時候,那麼這個節點就會作為備選節點。排程器對自定義資源的處理功能,其實同對CPU、記憶體、GPU資源的處理功能是相同的。

下面是一個在節點上配置自定義資源的例子:

在節點k8s-node-1上配置了一個自定義資源“foo”,並且將數值設定成5。

  1. PATCH /api/v1/nodes/k8s-node-1/statusHTTP/1.1
  2. Accept: application/json
  3. Content-Type: application/json-patch+json
  4. Host: k8s-master:8080
  5. [
  6.   {
  7.    “op”: “add”,
  8.    “path”:”/status/capacity/pod.alpha.kubernetes.io~1opaque-int-resource-foo”,
  9.    “value”: “5”
  10.   }
  11. ]

這裡面需要注意: 在path變數的賦值中,“~1”是字元“/”的轉義字元。

下面是一個使用自定義資源“foo”的例子。在這個例子中POD,Kubernetes排程元件會查詢同時滿足2核CPU、1個自定義資源“ foo” 的節點,在這些節點上啟動POD。

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4.  name: my-pod
  5. spec:
  6.  containers:
  7.   -name: my-container
  8.    image: myimage
  9.    resources:
  10.      requests:
  11.        cpu: 2
  12.        pod.alpha.kubernetes.io/opaque-int-resource-foo: 1

三、適用場景

通過自定義資源型別這種方式,相當於引入了IPC裡面的訊號量機制,可以限制指定POD在節點上執行的個數,而且還可以動態調整個數。

20170105134151

如上圖所示,在節點(一)上最多隻能執行五個依賴於自定義資源“foo”的POD,在節點(二)上最多隻能執行三個依賴於自定義資源“foo”的POD。