YOKOHEI.COM

YOKOHEI.COM

›Kubernetes Basics

Kubernetes Basics

  • Kubernetes Basics
  • Commands
  • Static Pod
  • Drain & Uncordon
  • Cluster Upgrade
  • Backup & Restore
  • Certification
  • RBAC
  • CNI
  • CoreDNS
  • Ingress

Kubernetes the Hard Way

  • the Hard Way?
  • AWS Prerequisites
  • CA and TLS
  • Configuration Files
  • Data Encryption
  • Bootstrapping etcd
  • Bootstrapping Control Plane
  • Bootstrapping Worker Node
  • kubectl configuraton
  • Pod Network
  • RBAC for Kubelet
  • Coredns Add-On
  • Test
  • TLS Bootstrapping

Amazon EKS

  • EKS Introduction
  • Ingress with ALB
  • PersistentVolume with EBS
  • NetworkPolicy with Calico
  • Secret with KMS
  • EKS Hands-On

Static Pod の取り扱い

基本

Static Pod 用のディレクトリが存在しており、そこに Pod の manifest file を配置することで kubelet が Pod 作成を行う。
また、 kubelet がその Pod を稼働し続けることを面倒見てくれる。
このディレクトリからファイルを削除することで Pod も削除される。
なお、この方法で作成できるのは Pod のみであり、 ReplicaSet や Deployment などのリソースは作成できない。

イメージ図は以下。

ディレクトリの決定

このディレクトリはどうやって決まるのか。
具体的は 2 パターンある。

kubelet 起動時に渡される

kubelet 起動時に pod-manifest-path オプションが利用され、以下のような形で渡される。

--pod-manifest-path=/etc/Kubernetes/manifests

config 内に記載する

config ファイル自体のパスを起動時に渡して、その中で書くこともできる。
kubelet 起動時に config オプションが利用され、以下のような形で渡される。

--config=kubeconfig.yaml

config.yaml の中では staticPodPath として指定される。

...
staticPodPath: /etc/kubernetes/dev/manifests

Pod の確認

Node がクラスタに属している場合は、kubectl get pods で static Pod も表示される。
しかし、Read Only Mirror として表示されるので、編集も削除もできない。
staticPodPath 内の、実ファイルを操作する必要がある。

操作例

staticPodPath の特定

ps コマンドから起動時に渡されたオプションを確認する。

$ ps -aux | grep kubelet
root      2053  5.5  4.6 944284 95720 ?        Ssl  18:58   0:09 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=cgroupfs --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --network-plugin=cni

--config=/var/lib/kubelet/config.yaml という設定ファイルの中に書かれている、ということがわかる。

Static Pod の作成

kubectl run コマンドを --dry-run で実行し、マニフェストファイルを staticPodPath に出力する。
以下のようなコマンドを投げると楽かな。

$ kubectl run --restart=Never --image=nginx static-nginx --dry-run -o yaml > /etc/kubernetes/manifests/static-nginx.yaml

Static Pod の編集

シンプルに staticPodPath のマニフェストを編集して保存するだけでよい。

おまけ

Udemy 教材の問題の解答。

以下の Pod static-greenbox-node01 を削除しろという問題。

master $ kubectl get pods --all-namespaces
NAMESPACE     NAME                             READY     STATUS    RESTARTS   AGEdefault       static-greenbox-node01           1/1       Running   0          47skube-system   coredns-78fcdf6894-pk9jv         1/1       Running   0          7mkube-system   coredns-78fcdf6894-sh9fk         1/1       Running   0          7mkube-system   etcd-master                      1/1       Running   0          6mkube-system   kube-apiserver-master            1/1       Running   0          6mkube-system   kube-controller-manager-master   1/1       Running   0          6mkube-system   kube-proxy-hcdn8                 1/1       Running   0          7mkube-system   kube-proxy-hq87r                 1/1       Running   0          7m
kube-system   kube-scheduler-master            1/1       Running   0          6m
kube-system   weave-net-htmw8                  2/2       Running   1          7m
kube-system   weave-net-rsk8d                  2/2       Running   1          7m

Pod が動いている Node を特定し ssh する。

master $ kubectl get nodes -o wide
NAME      STATUS    ROLES     AGE       VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
master    Ready     master    7m        v1.11.3   172.17.0.78   <none>        Ubuntu 16.04.2 LTS   4.4.0-62-generic    docker://1.13.1
node01    Ready     <none>    7m        v1.11.0   172.17.0.82   <none>        Ubuntu 16.04.2 LTS   4.4.0-146-generic   docker://17.3.2
master $ ssh 172.17.0.82

Static Pod の削除はファイルの削除が必要なので staticPodPath を探す。

node01 $ ps -aux | grep kubelet
root      5646  3.1  2.1 623720 87036 ?        Ssl  19:06   0:02 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=systemd --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --network-plugin=cni
root      6459  0.0  0.0  14228   924 pts/1    S+   19:07   0:00 grep --color=auto kubelet

node01 $ cat /var/lib/kubelet/config.yaml | grep staticPodPath
staticPodPath: /etc/just-to-mess-with-you

実ファイルを削除。

node01 $ rm -f /etc/just-to-mess-with-you/greenbox.yaml
← CommandsDrain & Uncordon →
▼ Codes ▼
LeetCodeGitHub
▼ Profile ▼
LinkedInFlickr
▼ Logo made with DesignEvo ▼
DesignEvo
Copyright © 2020 Kohei Yoshida