Kubernetes DaemonSets の作成

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

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

DaemonSets の概要

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

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

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

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

既定では、デーモンセットによってすべてのノードにポッドが作成されますが、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 を削除すると、デプロイされたすべてのポッドがクリーンアップされるためです。

次のステップ