ノード固有タスクのDaemonSet
DaemonSetを使って、クラスター内のすべてまたは選択したノードでPodのコピーを実行し、クラスター全体の操作を行います。
「ノード固有タスクのDaemonSet」はCoddyKit上の無料Kubernetes Basicsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKubernetes Basics学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kubernetes Basicsコースには全4レッスンが含まれています。
DaemonSets とは
クラスター内のすべてのサーバーで特定のツールやサービスを実行する必要がある場面を想像してください。たとえば、各マシンからログを収集するロギングエージェントなどです。
このような場合にDaemonSetsを使用します。クラスター内のどこかで一定数の Pod を実行し続けることを目的とする Deployments とは異なり、DaemonSet はすべてのノード(または選択したノード)で Pod のコピーを 1 つ実行します。
DaemonSet の一般的な用途
DaemonSets は、ノードレベルで実行する必要があるタスクに最適です。一般的な例を次に示します。
- ロギングエージェント: 各ノードからログを収集する Fluentd や Logstash などのツール。
- 監視エージェント: すべてのサーバーからメトリクスを収集する Prometheus Node Exporter。
- ストレージデーモン: 各ノードで分散ストレージを提供する GlusterFS や Ceph などのサービス。
- ネットワークプロキシ: Kubernetes 自身の Kube-proxy は、ネットワークルールを管理するために DaemonSet として実行されます。
基本的な DaemonSet マニフェスト
DaemonSet の定義は Deployment とよく似ています。主な違いはkind: DaemonSetです。基本的な構成を見てみましょう。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemonset
spec:
selector:
matchLabels:
app: my-daemonset-app
template:
metadata:
labels:
app: my-daemonset-app
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "echo 'Hello from DaemonSet on node $(NODE_NAME)'; sleep 3600"]
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeNameYAML の主な構成要素
DaemonSet マニフェストの重要なセクションを分解して見てみましょう。
kind: DaemonSet: ノード固有の Pod を管理することを Kubernetes に伝えます。spec.selector: 重要な項目です。ラベルを使用して、DaemonSet が Pod を検出し管理する方法を定義します。spec.template: Pod 自体の定義です。Deployment にある Pod テンプレートとほぼ同じです。各ノードで実行される Pod のコンテナ、ボリューム、その他の設定を記述します。
すべてのノードへのデプロイ
これは、対象となるすべてのノードでbusyboxコンテナを実行するシンプルな DaemonSet です。実行先のノードを示すメッセージを出力します。
これは、クラスター全体でエージェントを実行する一般的なパターンです。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-hello-daemon
spec:
selector:
matchLabels:
app: node-hello
template:
metadata:
labels:
app: node-hello
spec:
containers:
- name: hello-container
image: busybox
command: ["sh", "-c", "while true; do echo 'Hello from node: $(NODE_NAME)'; sleep 5; done"]
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeNameDaemonSet の起動
Kubernetes クラスターに DaemonSet を作成するには、先ほど示した YAML ファイルに、使い慣れたkubectl applyコマンドを使用します。
kubectl apply -f node-hello-daemonset.yaml
すると Kubernetes は、DaemonSet の条件に一致するすべてのノードに Pod がスケジュールされるようにします。
DaemonSet の状態を確認する
適用後は、DaemonSet と、それによって作成された Pod の状態を確認できます。
- DaemonSet を表示するには:
kubectl get ds - 各ノードで実行されている個々の Pod を表示するには:
kubectl get pods -l app=node-hello -o wide
-o wideオプションを使用すると、各 Pod がどのノードにスケジュールされているかを確認できます。
選択したノードでの DaemonSets
DaemonSet を一部のノードだけで実行したい場合はどうすればよいでしょうか。たとえば、GPU を搭載したノードだけ、またはストレージ専用のノードだけで実行する場合です。
この場合はnodeSelectorを使用できます。Pod のspec(DaemonSet のテンプレート内)にあるこのフィールドで、Pod をスケジュールするノードが持っている必要のあるノードラベルを指定できます。
YAML での Node Selectors の使用
先ほどの DaemonSet を変更して、disktype: ssdというラベルが付いたノードでのみ実行されるようにしましょう。まず、ノードにラベルを付ける必要があります。例: kubectl label node <node-name> disktype=ssd。
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ssd-monitor-daemon
spec:
selector:
matchLabels:
app: ssd-monitor
template:
metadata:
labels:
app: ssd-monitor
spec:
nodeSelector:
disktype: ssd # Only runs on nodes with this label
containers:
- name: monitor-container
image: busybox
command: ["sh", "-c", "while true; do echo 'Monitoring SSD on node: $(NODE_NAME)'; sleep 10; done"]
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeNameDaemonSet の機能
DaemonSets の仕組みを学びました。理解度を確認してみましょう。
DaemonSets: 重要なポイント
よくできました。Kubernetes DaemonSets についてしっかり学習できました。
- DaemonSetsは、対象となるすべてのノードで Pod が実行されるようにします。
- ロギング、監視、ストレージエージェントなどのノードレベルの操作に不可欠です。
nodeSelectorを使用して、特定のノードを対象にできます。- DaemonSets は
kind: DaemonSetで定義し、Deployments と同様に Pod テンプレートを使用します。
次は、ステートフルアプリケーションを管理する StatefulSets について学びます。
よくある質問
「ノード固有タスクのDaemonSet」レッスンは無料ですか?
はい。「ノード固有タスクのDaemonSet」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kubernetes Basicsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kubernetes Basicsコースには全4レッスンが含まれています。
「ノード固有タスクのDaemonSet」で何を学びますか?
DaemonSetを使って、クラスター内のすべてまたは選択したノードでPodのコピーを実行し、クラスター全体の操作を行います。 ブラウザで直接実行するハンズオンコードでKubernetes Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kubernetes Basicsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKubernetes Basicsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「ノード固有タスクのDaemonSet」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKubernetes Basicsレッスンでコードを書いて実行できますか?
はい。すべてのKubernetes Basicsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- ステートフルアプリのStatefulSet
- ノード固有タスクのDaemonSet
- Kubernetes Operatorを理解する
- カスタムリソース定義(CRD)