すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:DaemonSet の作成

最終更新日:Mar 21, 2025

DaemonSet は、クラスタ内の各ノードで DaemonSet によってプロビジョニングされたポッドが 1 つだけ実行されるようにします。クラスタに新しいノードが追加されると、DaemonSet によって新しいポッドがプロビジョニングされ、そのノードにスケジュールされます。DaemonSet は、Fluentd などのログ収集コンポーネントや、Prometheus Node Exporter などのノード監視エージェントのデプロイに適しています。このトピックでは、DaemonSet について紹介し、Container Service for Kubernetes(ACK)コンソールまたは kubectl を使用して DaemonSet を作成する方法について説明します。

DaemonSet の概要

デフォルトでは、DaemonSet は、クラスタ内の各ノードで DaemonSet によってプロビジョニングされたポッドが 1 つだけ実行されるようにします。ただし、DaemonSet のスケジューリング結果は、以下のスケジューリングポリシーの影響を受けます。スケジューリングポリシーの詳細については、「スケジューリング」をご参照ください。

  • 汚染と許容: DaemonSet ポッドは、DaemonSet によって許容されていない汚染を持つノードにはスケジュールされません。デフォルトでは、DaemonSet は以下の汚染を許容します。

    • node.kubernetes.io/unschedulable:NoSchedule

    • node.kubernetes.io/not-ready:NoExecute: ポッドはエビクトされる前に、この汚染を持つノードに 300 秒間残ります。

    • node.kubernetes.io/unreachable:NoExecute: ポッドはエビクトされる前に、この汚染を持つノードに 300 秒間残ります。

  • ノードセレクタ: DaemonSet ポッドは、nodeSelector パラメーターに基づいてスケジュールされます。たとえば、DaemonSet の構成で nodeSelector: { disktype: ssd } が指定されている場合、DaemonSet によってプロビジョニングされたポッドは、disktype=ssd ラベルを持つノードのみにスケジュールされます。

  • アフィニティルール: DaemonSet ポッドは、ノードアフィニティ、ノードアンチアフィニティ、ポッドアフィニティ、およびポッドアンチアフィニティルールに基づいてスケジュールされます。

説明

DaemonSet は、さまざまなスケジューリングポリシーに基づいてポッドのスケジューリング要件を満たすように設計されていません。複雑なポッドスケジューリングが必要な場合は、デプロイメントを使用してください。DaemonSet の詳細については、「DaemonSet」を参照してください。

kube-proxy ポッドの表示

Kubernetes のデフォルトコンポーネントである kube-proxy は、各ノードに DaemonSet としてデプロイされます。次のコマンドを実行して、kube-proxy のポッドを表示できます。

kubectl get pods --all-namespaces -o wide | grep kube-proxy

次の出力は、各ノードで kube-proxy ポッドが実行されていることを示しています。kube-proxy は、ノードのホストネットワーク(hostNetwork: true)を使用します。したがって、kube-proxy ポッドは、ポッドをホストするノードの IP アドレスを使用します。

kube-system     kube-proxy-worker-hfzkh     1/1     Running     0          2d21h   192.168.*.92    cn-shanghai.192.168.*.92   <none>           <none>
kube-system     kube-proxy-worker-pxnnf     1/1     Running     0          2d21h   192.168.*.11    cn-shanghai.192.168.*.11   <none>           <none>
kube-system     kube-proxy-worker-r2t26     1/1     Running     0          2d21h   192.168.*.7     cn-shanghai.192.168.*.7    <none>           <none>

DaemonSet の作成

ACK コンソールまたは kubectl を使用して DaemonSet を作成できます。

ACK コンソール

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、管理するクラスタを見つけて、その名前をクリックします。左側のペインで、[ワークロード] > [daemonset] を選択します。

  3. [daemonset] ページの右上隅にある [イメージから作成] をクリックします。

  4. DaemonSet の特性により、以下の手順のアプリケーションパラメーターは、デプロイメントを作成する場合のパラメーターとは異なります。

    • [基本情報]: DaemonSet によってプロビジョニングされるポッドの数はクラスタ内のノードの数によって異なるため、[レプリカ] パラメーターは使用できません。

    • [詳細設定]: DaemonSet によってプロビジョニングされるポッドの数はクラスタ内のノードの数によって異なるため、[スケーリング] セクションは使用できません。

    その他のパラメーターは、デプロイメントを作成する場合と同じです。その他のパラメーターの構成方法の詳細については、「デプロイメントを使用してステートレスアプリケーションを作成する」をご参照ください。

kubectl

重要

ワークロードを作成する前に、kubectl を使用してクラスタに接続していることを確認してください。詳細については、「クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する」をご参照ください。

  1. daemonset.yaml という名前のファイルを作成し、次の内容をファイルにコピーします。

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: nginx-test
      namespace: default  # 業務要件に基づいて名前空間を変更します。
      labels:
        app: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            resources:
              limits:
                cpu: '1'
                memory: 2Gi
              requests:
                cpu: 500m
                memory: 512Mi
  2. 次のコマンドを実行して、DaemonSet を作成します。

    kubectl apply -f daemonset.yaml

    予想される出力:

    daemonset.apps/nginx-test created
  3. 次のコマンドを実行して、DaemonSet の詳細をクエリします。

    kubectl get pods --all-namespaces -o wide | grep nginx-test

    次の出力は、各ノードで DaemonSet によってプロビジョニングされたポッドが実行されていることを示しています。

    default     nginx-test-8mqvh     1/1     Running     0          3m38s   192.168.*.**    cn-shanghai.192.168.**.250   <none>           <none>
    default     nginx-test-ltlx6     1/1     Running     0          3m38s   192.168.*.**    cn-shanghai.192.168.**.98    <none>           <none>
    default     nginx-test-n6zrv     1/1     Running     0          3m38s   192.168.*.**    cn-shanghai.192.168.**.17    <none>           <none>

関連情報