0Pricing
DevOps Bootcamp · レッスン

ノード固有タスクのDaemonSet

DaemonSetを使って、クラスター内のすべてまたは選択したノードでPodのコピーを実行し、クラスター全体の操作を行います。

「ノード固有タスクのDaemonSet」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全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.nodeName

YAML の主な構成要素

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.nodeName

DaemonSet の起動

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.nodeName

DaemonSet の機能

DaemonSets の仕組みを学びました。理解度を確認してみましょう。

DaemonSets: 重要なポイント

よくできました。Kubernetes DaemonSets についてしっかり学習できました。

  • DaemonSetsは、対象となるすべてのノードで Pod が実行されるようにします。
  • ロギング、監視、ストレージエージェントなどのノードレベルの操作に不可欠です。
  • nodeSelectorを使用して、特定のノードを対象にできます。
  • DaemonSets はkind: DaemonSetで定義し、Deployments と同様に Pod テンプレートを使用します。

次は、ステートフルアプリケーションを管理する StatefulSets について学びます。

よくある質問

「ノード固有タスクのDaemonSet」レッスンは無料ですか?

はい。「ノード固有タスクのDaemonSet」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。

「ノード固有タスクのDaemonSet」で何を学びますか?

DaemonSetを使って、クラスター内のすべてまたは選択したノードでPodのコピーを実行し、クラスター全体の操作を行います。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

DevOps Bootcampを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「ノード固有タスクのDaemonSet」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDevOps Bootcampレッスンでコードを書いて実行できますか?

はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. ステートフルアプリのStatefulSet
  2. ノード固有タスクのDaemonSet
  3. Kubernetes Operatorを理解する
  4. カスタムリソース定義(CRD)
← DevOps Bootcampに戻る