はじめに
Kubernetesの世界でPodを展開するには一般的にkubectl run pod
やkubectl 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が停止します。
以上、ご参考になれば幸いです。