Kubernetes DaemonSets の作成
適用対象: AKS on Azure Stack HCI 22H2、Windows Server 上の AKS
この記事では、Azure Arc で有効になっている AKS で Kubernetes DaemonSet を作成して使用し、クラスター内のすべてのワーカー ノードでポッドのコピーを常に使用できるようにする方法について説明します。 DaemonSet を使用すると、アプリがすべてのワーカー ノードで実行されるようにしてクラスターのパフォーマンスを向上させ、メンテナンスを行い、ノードのサポート サービスを提供するポッドをデプロイできます。
DaemonSets の概要
DaemonSet は Kubernetes オブジェクトです。これにより、構成で定義されているポッドのコピーが、クラスター内のすべてのワーカー ノードで常に使用できるようになります。 新しいノードがクラスターに追加されると、デーモンセットによってそのノードにポッドが自動的に割り当てられます。
同様に、ノードが削除されると、ノードで実行されているポッドも削除され、別のノードで再スケジュールされません (たとえば、 ReplicaSets で発生します)。 これにより、Kubernetes のスケジュール制限を克服し、特定のアプリケーションがクラスター内のすべてのノードにデプロイされるようにすることができます。
デーモンセットを使用すると、クラスター全体のパフォーマンスを向上させることができます。 たとえば、それらを使用して、すべてのノードに対してメンテナンス タスクとサポート サービスを実行するポッドをデプロイできます。
Fluentd
やLogstash
などのログ 収集デーモンを実行します。Prometheus
などのノード監視デーモンを実行します。glusterd
やceph
などのクラスター ストレージ デーモンを実行します。
既定では、デーモンセットによってすべてのノードにポッドが作成されますが、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: null
labels:
app: nginx
containers: null
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 を削除すると、デプロイされたすべてのポッドがクリーンアップされるためです。