DaemonSet

本頁面說明 Kubernetes DaemonSet 物件及該物件在 Google Kubernetes Engine 中的使用方式。

什麼是 DaemonSet?

如同其他工作負載物件,「DaemonSet」可以管理複製 Pod 的群組。不過,DaemonSet 會在整個叢集或節點子集合中遵循「每個節點一個 Pod」的模式。當您將節點新增到節點集區,DaemonSet 就會自動將 Pod 新增到需要的新節點中。

DaemonSet 會使用 Pod 範本,範本中包含 Pod 的規格。Pod 規格會決定每個 Pod 的樣子:應在容器內執行哪些應用程式、應掛接哪些磁碟區、標籤、選取器等。

使用模式

DaemonSet 很適合用來部署您必須在所有或特定節點上持續執行,而且不需要使用者介入的背景工作。這類工作的例子有 ceph 之類的儲存精靈、fluentd 之類的記錄收集精靈,以及 collectd 之類的節點監控精靈。

比方說,您可以設定 DaemonSet 在所有節點上執行各種精靈。或者,您也可以針對單一類型的精靈來執行多個 DaemonSet,但將這些精靈設成:依據不同硬體類型和資源需求來使用不同的設定。

建立 DaemonSet

您可以使用 kubectl applykubectl create 建立 DaemonSet。

以下是 DaemonSet 資訊清單檔案的範例:

apiVersion: v1/beta2 # For Kubernetes version 1.9 and later, use apps/v1
kind: DaemonSet
metadata:
  name: fluentd
spec:
  selector:
      matchLabels:
        name: fluentd # Label selector that determines which Pods belong to the DaemonSet
  template:
    metadata:
      labels:
        name: fluentd # Pod template's label selector
    spec:
      nodeSelector:
        type: prod # Node label selector that determines on which nodes Pod should be scheduled
                   # In this case, Pods are only scheduled to nodes bearing the label "type: prod"
      containers:
      - name: fluentd
        image: gcr.io/google-containers/fluentd-elasticsearch:1.20
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi

在本範例中:

  • 建立名為 fluentd 的 DaemonSet,由 metadata: name 欄位指示。
  • DaemonSet 的 Pod 會加上 fluentd 標籤。
  • 節點標籤選取j器 (type: prod) 會宣告 DaemonSet 在哪些加上標籤的節點上排程 Pod。
  • Pod 的容器會提取版本 1.20fluentd-elasticsearch 映像檔。這個容器映像檔由 Container Registry 託管。
  • 這個容器會要求 100m 的 CPU 和 200Mi 記憶體,並將自己的總記憶體使用量限制在 200Mi。

總結來說,Pod 規格包含下列指示:

  • 將 Pod 加上 fluentd 標籤。
  • 使用節點標籤選取器 type: prod 將 Pod 排程到相符的節點,而且「不排程到無法配合標籤選取器的節點上」(或者,省略 nodeSelector 欄位來排程在「所有節點」上)。
  • 執行版本 1.20fluentd-elasticsearch
  • 要求提供一些記憶體和 CPU 資源。

如要進一步瞭解 DaemonSet 設定,請參閱 DaemonSet API 參考資料

更新 DaemonSet

您可以藉由變更 Pod 規格、資源要求和限制、標籤以及註解來更新 DaemonSet。

為了確定更新的處理方式,DaemonSet 會使用在 spec: updateStrategy 中定義的「更新策略」。策略有 OnDeleteRollingUpdate 兩種:

  • 當物件的設定變更時,OnDelete 不會自動刪除和重建 DaemonSet Pod。Pod 必須透過手動方式刪除,使控制器建立可反映您變更的新 Pod。
  • RollingUpdate 會自動刪除並重建 DaemonSet Pod。採用這個策略時,有效變更會自動觸發推行。這是 DaemonSet 的預設更新策略。

您可以執行下列指令來監控更新的推行:

kubectl rollout status ds [DAEMONSET_NAME]

如要進一步瞭解如何更新 DaemonSet,請參閱 Kubernetes 說明文件中的執行 DaemonSet 的輪動式更新

相關資源

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件