現在表示しているのは、次のバージョン向けのドキュメントです。Kubernetesバージョン: v1.32

Kubernetes v1.32 のドキュメントは積極的にメンテナンスされていません。現在表示されているバージョンはスナップショットです。最新のドキュメントはこちらです: 最新バージョン

基本的なDaemonSetを構築する

このページでは、Kubernetesクラスターの全てのノード上でPodを実行する、基本的なDaemonSetを構築する方法について示します。 ホストからファイルをマウントし、Initコンテナを使用してその内容をログに記録して、pauseコンテナを利用するという単純なユースケースを取り上げます。

始める前に

Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、minikubeを使って作成するか、 以下のいずれかのKubernetesプレイグラウンドも使用できます:

DaemonSetの動作を示すために、少なくとも2つのノード(1つのコントロールプレーンと1つのワーカーノード)を持つKubernetesクラスターを用意します。

DaemonSetの定義

このタスクでは、Podのコピーが全てのノード上でスケジュールされるようにする、基本的なDaemonSetが作成されます。 PodはInitコンテナを使用してホストから/etc/machine-idの内容を読み込んでログに記録し、メインのコンテナはPodを実行し続けるpauseコンテナとなります。

apiVersion: apps/v1 kind: DaemonSet metadata:  name: example-daemonset spec:  selector:  matchLabels:  app.kubernetes.io/name: example  template:  metadata:  labels:  app.kubernetes.io/name: example  spec:  containers:  - name: pause  image: registry.k8s.io/pause  initContainers:  - name: log-machine-id  image: busybox:1.37  command: ['sh', '-c', 'cat /etc/machine-id > /var/log/machine-id.log']  volumeMounts:  - name: machine-id  mountPath: /etc/machine-id  readOnly: true  - name: log-dir  mountPath: /var/log  volumes:  - name: machine-id  hostPath:  path: /etc/machine-id  type: File  - name: log-dir  hostPath:  path: /var/log 
  1. (YAML)マニフェストに基づいたDaemonSetを作成します:

    kubectl apply -f https://k8s.io/examples/application/basic-daemonset.yaml 
  2. 適用すると、DaemonSetがクラスター内の全てのノードでPodを実行していることを確認できます:

    kubectl get pods -o wide 

    出力には、以下のようにノード毎に1つのPodが一覧表示されます:

    NAME READY STATUS RESTARTS AGE IP NODE example-daemonset-xxxxx 1/1 Running 0 5m x.x.x.x node-1 example-daemonset-yyyyy 1/1 Running 0 5m x.x.x.x node-2 
  3. ホストからマウントされたログディレクトリをチェックすることで、ログに記録された/etc/machine-idファイルの内容を調べることができます:

    kubectl exec <pod-name> -- cat /var/log/machine-id.log 

    <pod-name>は1つのPodの名前です。

クリーンアップ

DaemonSetを削除するためには、次のコマンドを実行します:

kubectl delete --cascade=foreground --ignore-not-found --now daemonsets/example-daemonset 

この単純なDaemonSetの例では、Initコンテナやホストパスボリュームなどの主要なコンポーネントを紹介しており、より高度なユースケースに応じて拡張することができます。 詳細についてはDaemonSetを参照してください。

次の項目