これは、このセクションの複数ページの印刷可能なビューです。 印刷するには、ここをクリックしてください.
クラスターデーモンの管理
1 - 基本的な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
(YAML)マニフェストに基づいたDaemonSetを作成します:
kubectl apply -f https://k8s.io/examples/application/basic-daemonset.yaml
適用すると、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
ホストからマウントされたログディレクトリをチェックすることで、ログに記録された
/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を参照してください。