はじめに
static podはkubeletが管理し、ノード上で動作し、APIサーバーから監視されないという特徴を持つpodである。
kindでstatic podの挙動を確認したので、その手順をまとめておく。
https://kubernetes.io/ja/docs/tasks/configure-pod-container/static-pod/
確認環境
Component | Version |
---|---|
PC | M1 MacBook Pro |
Docker Desktop | 4.35.1 |
kind | v0.25.0 |
Kubernetes | v1.31.2 |
Kubernetesクラスタを立ち上げる
まずは動作確認に必要なKubernetesクラスタを構築する。
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: sandbox
nodes:
- role: control-plane
- role: worker
kindをインストールした状態で以下のコマンドを実行すれば、1,2分くらいでKubernetesクラスタを構築することができる。
kind create cluster --config kind-sandbox.yaml
ワーカーノードのコンテナでシェルを実行する
kindはノードをコンテナとして立ち上げる。
したがって、docker psコマンドを実行すると以下のようにノードがコンテナとして見える。
❯ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7e09af403c15 kindest/node:v1.31.2 "/usr/local/bin/entr…" 20 minutes ago Up 20 minutes sandbox-worker
6a69944f5122 kindest/node:v1.31.2 "/usr/local/bin/entr…" 20 minutes ago Up 20 minutes 127.0.0.1:50086->6443/tcp sandbox-control-plane
ワーカーノードでbashを実行したい場合は、以下のように実行する。
❯ docker exec -it 7e09af403c15 /bin/bash
static podのmanifestを作成する
kindが作成するkubernetesクラスタのワーカーノードのstaticPodPathは /etc/kubernetes/manifestsである。
root@sandbox-worker:/# grep -i staticpodpath /var/lib/kubelet/config.yaml
staticPodPath: /etc/kubernetes/manifests
/etc/kubernetes/manifestsにstatic podのmanifestを作成する。
cat <<EOF >/etc/kubernetes/manifest/static-web.yaml
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
role: myrole
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
protocol: TCP
EOF
作成し終わったら、kubeletサービスを再起動する。
systemctl restart kubelet
static podの確認
kindを実行しているホストでkubectl get podsを実行するとワーカーノード上に先ほど作成したmanifestでstatic podが起動していることがわかる。
❯ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
static-web-sandbox-worker 1/1 Running 0 20m 10.244.1.2 sandbox-worker <none> <none>
最後に
本手順によってkindでstatic podの挙動を作成して、動作確認までできた。