(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】StaticPodのディレクトリの場所とその役割

スポンサーリンク

はじめに

Kubernetesの世界でPodを展開するには一般的にkubectl run podkubectl apply -fを行います。
特殊な例としてcurlコマンドコマンドを押下することはあれ、基本的にはapiserverを介してPodをスケジュールしてもらいます

一方、それとは別にPodを展開する機構に「StaticPod」があります。
本記事ではStaticPodの説明とkubeadmで入れたMasterを利用したハンズオンを記載しました。

環境情報
  • kubeadm v1.15.1

staticPodPathとは?

staticPodPathとはディレクトリのパスを指し、そのディレクトリに配置されたyamlは自動的に起動されます。

ファイルの場所に関してはkubeletを実行する際に読み込むconfig.yamlの中身を見てみると以下のような構造です。

apiVersion: kubelet.config.k8s.io/v1beta1
authentication:
  anonymous:
    enabled: false
  webhook:
    cacheTTL: 0s
    enabled: true
  x509:
    clientCAFile: /etc/kubernetes/pki/ca.crt
...
staticPodPath: /etc/kubernetes/manifests
...

この「staticPodPath」に記載のあるパスに置かれているyamlファイルはkubeletにて起動されています。
つまり、同ディレクトリにyamlファイルを配置するだけで同ファイルが起動され、削除すれば停止します。

Masterの/etc/kubernetes/manifestsを例に

デフォルトで以下の4ファイルが格納されています。

# ls /etc/kubernetes/manifests
etch.yaml kube-apiserver.yaml kube-controller-manager.yaml kube-scheduler.yaml

例えばkube-apiserver.yamlの中身を見ると以下のようにPodとして起動しているのでdeleteすると自動で復旧は行われませんが

apiVersion: v1
kind: Pod
...

以下のように削除するも自動で復旧してきます。

# kubectl delete pod kube-apiserver-master01 -n kube-system
pod "kube-apiserver-master01" deleted

終わりに

上記のようにPodを落としてもDeploymentのように普及してきますが、逆にファイルを削除すると自動でPodが停止します。

以上、ご参考になれば幸いです。