Kubernetes DaemonSets の作成

適用対象: AKS on Azure Stack HCI 22H2、AKS on Windows Server

この記事では、Azure Arc によって有効になっている AKS で Kubernetes DaemonSet を作成して使用し、クラスター内のすべてのワーカー ノードでポッドのコピーを常に使用できるようにする方法について説明します。 DaemonSet を使用すると、アプリがすべてのワーカー ノードで確実に実行されるようにしてクラスターのパフォーマンスを向上させ、メンテナンスを行い、ノードのサポート サービスを提供するポッドをデプロイできます。

DaemonSets の概要

"デーモンセット" は、構成で定義されているポッドのコピーを、クラスター内のすべてのワーカー ノードで常に使用できるようにする Kubernetes オブジェクトです。 新しいノードがクラスターに追加されると、デーモンセットによってそのノードにポッドが自動的に割り当てられます。

同様に、ノードが削除されると、ノードで実行されているポッドも削除され、別のノードで再スケジュールされません ( ReplicaSets の場合など)。 これにより、Kubernetes のスケジュールの制限を克服し、特定のアプリケーションがクラスター内のすべてのノードにデプロイされていることを確認できます。

デーモンセットを使用すると、クラスター全体のパフォーマンスを向上させることができます。 たとえば、それらを使用して、すべてのノードに対してメンテナンス タスクとサポート サービスを実行するポッドをデプロイできます。

  • LogstashなどのFluentdログ 収集デーモンを実行します。
  • などの Prometheusノード監視デーモンを実行します。
  • cephなどのglusterdクラスター ストレージ デーモンを実行します。

既定では、デーモンセットによってすべてのノードにポッドが作成されますが、YAML ファイルでノード セレクター フィールドを事前に定義することで、許容されるノードの数を制限できます。 DaemonSet コントローラーは、ノード セレクターに一致するノードにのみポッドを作成します。

通常、1 つのデーモンセットにより、1 種類のデーモンがすべてのノードにデプロイされますが、異なるラベルを使用することで、複数のデーモンセットで 1 種類のデーモンを制御できます。 Kubernetes ラベルにより、個々のノードの特性に基づいてデプロイ ルールを指定します。

DaemonSets の使用方法の詳細については、「 Kubernetes DaemonSets」を参照してください。

デーモンセットを作成する

YAML ファイルを使用してデーモンセットを記述し、kubectl create または kubectl apply コマンド (たとえば、kubectl create –f example-daemon.yaml) を使用してデーモンセットを作成します。

次の例は、nginx イメージを使用したデーモンセット構成ファイルの機能を示しています。

apiVersion: apps/v1  
kind: DaemonSet  
metadata: 
      labels: 
         app: nginx
      name: example-daemon
spec:  
  template:
    metadata:
    labels:
             app: nginx
          spec:  
    containers:  
        -name: nginx  
         image: nginx

デーモンセットの現在の状態を確認するには、kubectl describe コマンド (たとえば、kubectl describe daemonset example-daemon) を使用します。

デーモンセットを特定のノードに制限する

既定では、デーモンセットによってクラスター内のすべてのノードにポッドが作成されますが、ノード セレクターを使用すると、特定のノードにのみポッドを作成するようにデーモンセットを構成できます。 デーモンセットを特定のノードに制限する場合、kubectl label コマンドを使用します。

デーモンセットを更新する

kubectl edit ds<NAME> コマンドを使用してデーモンセットを更新できます。 ただし、元の構成ファイルを編集してから、最初に作成したときに コマンドを kubectl apply 使用することをお勧めします。 更新プログラムを適用した後は、 コマンドを使用して更新の状態を kubectl rollout status ds <daemonset-name> 表示できます。

デーモンセットを削除する

デーモンセットを削除するには、kubectl delete コマンド (たとえば、kubectl delete –f example-daemon.yaml -n monitoring) を使用します。 DaemonSet ファイルの名前を指定するときは、DaemonSet を削除すると、デプロイされたすべてのポッドがクリーンアップされるため、注意が必要です。

次の手順