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:NoSchedulenode.kubernetes.io/not-ready:NoExecute: ポッドはエビクトされる前に、この汚染を持つノードに 300 秒間残ります。node.kubernetes.io/unreachable:NoExecute: ポッドはエビクトされる前に、この汚染を持つノードに 300 秒間残ります。
ノードセレクタ: DaemonSet ポッドは、
nodeSelectorパラメーターに基づいてスケジュールされます。たとえば、DaemonSet の構成でnodeSelector: { disktype: ssd }が指定されている場合、DaemonSet によってプロビジョニングされたポッドは、disktype=ssdラベルを持つノードのみにスケジュールされます。アフィニティルール: DaemonSet ポッドは、ノードアフィニティ、ノードアンチアフィニティ、ポッドアフィニティ、およびポッドアンチアフィニティルールに基づいてスケジュールされます。
DaemonSet の作成
ACK コンソールまたは kubectl を使用して DaemonSet を作成できます。
ACK コンソール
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけて、その名前をクリックします。左側のペインで、 を選択します。
[daemonset] ページの右上隅にある [イメージから作成] をクリックします。
DaemonSet の特性により、以下の手順のアプリケーションパラメーターは、デプロイメントを作成する場合のパラメーターとは異なります。
[基本情報]: DaemonSet によってプロビジョニングされるポッドの数はクラスタ内のノードの数によって異なるため、[レプリカ] パラメーターは使用できません。
[詳細設定]: DaemonSet によってプロビジョニングされるポッドの数はクラスタ内のノードの数によって異なるため、[スケーリング] セクションは使用できません。
その他のパラメーターは、デプロイメントを作成する場合と同じです。その他のパラメーターの構成方法の詳細については、「デプロイメントを使用してステートレスアプリケーションを作成する」をご参照ください。
kubectl
ワークロードを作成する前に、kubectl を使用してクラスタに接続していることを確認してください。詳細については、「クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する」をご参照ください。
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 の詳細をクエリします。
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>
関連情報
ワークロードの作成時に発生する問題の解決方法の詳細については、「ワークロードに関するよくある質問」をご参照ください。
ポッドの例外のトラブルシューティング方法の詳細については、「ポッドのトラブルシューティング」をご参照ください。