はじめに
Podはkube-apiserverで管理されています。Static Podは特殊なPodで、kube-apiserverではなく、kubeletが直接管理するPodです。etcdやkube-apiserverなどがStatic Podとしてデプロイされています。
Static Podをユーザ環境に合わせて追加することはあまりないかも知れませんが、今回はStatic Podの作成方法を確認しましたのでまとめました。
なお、Static Podは今後廃止される可能性があるとのことです。
Static Podの作成
Static PodはMasterノードだけでなくworkerノードにも作ることができます。
今回はworkerノードに作成してみたいと思います。Masterノードに作る場合も同じです。
環境の確認
まずはkubeleteの設定情報を確認します。確認しなくてもデフォルトのままだとは思いますが、念のため確認します。
Configファイルのディレクトリを確認します。「--config」の値を確認します。
[worker01]$ systemctl status kubelet
● kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/kubelet.service.d
mq10-kubeadm.conf
/etc/systemd/system/kubelet.service.d
mq20-extra-args.conf
Active: active (running) since 日 2020-08-02 21:43:32 JST; 15min ago
Docs: https://kubernetes.io/docs/
Main PID: 842 (kubelet)
Tasks: 28
Memory: 110.5M
CGroup: /system.slice/kubelet.service
mq842 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=systemd --netw...
・・・
config.yamlファイルを確認し、「staticPodPath」のディレクトリを確認します。
このディレクトリにStatic Podのマニフェストファイルを保存します。
apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
anonymous:
enabled: false
webhook:
cacheTTL: 0s
enabled: true
x509:
clientCAFile: /etc/kubernetes/pki/ca.crt
authorization:
mode: Webhook
webhook:
cacheAuthorizedTTL: 0s
cacheUnauthorizedTTL: 0s
clusterDNS:
- 10.96.0.10
clusterDomain: cluster.local
cpuManagerReconcilePeriod: 0s
evictionPressureTransitionPeriod: 0s
fileCheckFrequency: 0s
healthzBindAddress: 127.0.0.1
healthzPort: 10248
httpCheckFrequency: 0s
imageMinimumGCAge: 0s
kind: KubeletConfiguration
nodeStatusReportFrequency: 0s
nodeStatusUpdateFrequency: 0s
rotateCertificates: true
runtimeRequestTimeout: 0s
staticPodPath: /etc/kubernetes/manifests
streamingConnectionIdleTimeout: 0s
syncFrequency: 0s
volumeStatsAggPeriod: 0s
staticPodPathを確認します。workerノードにはマニフェストファイルはありません。
[worker01]$ ls -la /etc/kubernetes/manifests/
合計 0
drwxr-xr-x. 2 root root 6 5月 21 02:46 .
drwxr-xr-x. 4 root root 54 2月 26 06:39 ..
Static Podマニフェストファイルの作成
マニフェストファイルを作成し、staticPodPathに保存します。
ここではとりあえずnginxのマニフェストファイルを作成しました。
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: nginx-static
name: nginx-static
spec:
containers:
- image: nginx
name: nginx-static
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
コンテナの確認
マニフェストファイルを作成すると、コンテナが自動で起動します。
[worker01]$ sudo docker ps | grep nginx-static
ba94e5f78d5c nginx "/docker-entrypoint.…" 53 seconds ago Up 53 seconds k8s_nginx-static_nginx-static-k8s-worker01_default_f0ea6bb0822d50cc515c545276d758e8_0
1e43b8139676 k8s.gcr.io/pause:3.1 "/pause" 58 seconds ago Up 57 seconds k8s_POD_nginx-static-k8s-worker01_default_f0ea6bb0822d50cc515c545276d758e8_0
Podの確認(Masterノード)
MasterノードでもStatic Podが起動したことが確認できます。
[master]$ kubectl get pod nginx-static-k8s-worker01 -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-static-k8s-worker01 1/1 Running 0 2m59s 192.168.79.121 k8s-worker01 <none> <none>
まとめ
どういうときにユーザオリジナルのStatic Podを作成するのかわかりませんが、kubeletのConfigファイルの確認から、staticPodPathの確認方法は押さえておこうと思います。