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 の詳細については、公式ドキュメントをご参照ください。
DaemonSet の作成
コンソールまたは kubectl を使用して DaemonSet を作成できます。
コンソールから作成
Container Service Management Console にログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
「クラスターリスト」ページで、クラスターの名前をクリックします。左側のナビゲーションウィンドウで、「」をクリックします。
-
「Daemon Sets」ページで、イメージによる作成 をクリックします。
-
DaemonSet の特性により、コンソールの設定項目は Deployment と以下の点で異なります。
-
基本情報:DaemonSet の Pod 数はノード数によって決定されるため、Replicas: の設定項目はありません。
-
上級:同様の理由により、DaemonSet には スケーリング の設定項目もありません。
その他の設定項目は Deployment と同一です。設定項目の詳細については、「Deployment の作成」をご参照いただき、DaemonSet の作成にご活用ください。
-
kubectl を使用した DaemonSet の作成
ワークロードを作成する前に、kubectl を使用してクラスターに接続済みであることを確認してください。詳細については、「kubectl を使用したクラスターへの接続」をご参照ください。
-
以下の 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 -
以下のコマンドを実行して DaemonSet を作成します。
kubectl apply -f daemonset.yaml期待される出力:
daemonset.apps/nginx-test created -
以下のコマンドを実行して、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>
参考文献
-
ワークロードの作成時に問題が発生した場合は、「ワークロード よくある質問」をご参照ください。
-
Pod が異常な状態の場合には、「Pod のトラブルシューティング」をご参照ください。