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

Container Service for Kubernetes:DaemonSet の作成

最終更新日:Mar 07, 2026

DaemonSet は、各ノードに 1 つの Pod を実行することを保証します。クラスターに新しいノードが追加されると、DaemonSet は自動的にそのノード用の Pod を作成します。これは、Fluentd のようなログ収集コンポーネントや、Prometheus Node Exporter のようなノード監視エージェントなどのシナリオに有効です。本トピックでは、DaemonSet の特徴およびコンソールまたは kubectl を使用した DaemonSet の作成方法について説明します。

DaemonSet とは?

デフォルトでは、DaemonSet は各ノードに 1 つの Pod を実行します。ただし、この動作は以下のスケジューリングポリシーの影響を受けます。スケジューリングポリシーの詳細については、「スケジューリング」をご参照ください。

  • Taint と Toleration:DaemonSet の Pod は Taint 制限の対象となり、許容できない Taint が設定されたノードには実行されません。ただし、以下の Taint はデフォルトで許容されます。

    • node.kubernetes.io/unschedulable:NoSchedule

    • node.kubernetes.io/not-ready:NoExecute(300 秒間許容)

    • node.kubernetes.io/unreachable:NoExecute(300 秒間許容)

  • nodeSelector:DaemonSet の Pod は nodeSelector 制限の対象にもなります。たとえば、DaemonSet に nodeSelector: { disktype: ssd } が設定されている場合、disktype=ssd ラベルを持つノードでのみ実行されます。

  • アフィニティ構成:ノードアフィニティおよびポッドアフィニティ/アンチアフィニティ構成も DaemonSet に適用されます。

説明

DaemonSet は一部のスケジューリングポリシーを実装できますが、これは設計上の主目的ではありません。より複雑なスケジューリングを行う場合は、Deployment の使用を検討してください。DaemonSet の詳細については、公式ドキュメントをご参照ください。

kube-proxy の Pod の表示

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

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

期待される出力例を以下に示します。各ノードには 1 つの kube-proxy Pod が存在します。kube-proxy は hostNetwork モード(hostNetwork: true)を使用しているため、Pod の IP アドレスはそのノードの 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 の作成

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

コンソールから作成

  1. Container Service Management Console にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。

  2. クラスターリスト」ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、「ワークロード > Daemon Sets」をクリックします。

  3. Daemon Sets」ページで、イメージによる作成 をクリックします。

  4. DaemonSet の特性により、コンソールの設定項目は Deployment と以下の点で異なります。

    • 基本情報:DaemonSet の Pod 数はノード数によって決定されるため、Replicas: の設定項目はありません。

    • 上級:同様の理由により、DaemonSet には スケーリング の設定項目もありません。

    その他の設定項目は Deployment と同一です。設定項目の詳細については、「Deployment の作成」をご参照いただき、DaemonSet の作成にご活用ください。

kubectl を使用した DaemonSet の作成

重要

ワークロードを作成する前に、kubectl を使用してクラスターに接続済みであることを確認してください。詳細については、「kubectl を使用したクラスターへの接続」をご参照ください。

  1. 以下の YAML コンテンツをコピーし、ファイル名を `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 の Pod の詳細を照会します。

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

    以下の出力例から、各ノードで 1 つの Pod が実行されていることが確認できます。

    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>

参考文献