kubeadm, vagrantを使ってsingle node k8s clusterを構築した際のメモ


なぜまとめたか

想定読者: Kuberneteクラスタの構築を手元のマシンでお金をかけずに試す方法を知りたい人

Kubernetesを用意する方法は、マネージドのものを使ったり、minikubeやkindなどの簡易なものを使ったり、Kubernetes Hardwayを実施してみたりと様々な方法がある。
ただ、マネージドやminikube, kindなどは比較的簡単にk8sクラスタを用意できる反面、どのようにk8sクラスタが作られているかなどを実感することができない。
また、kelseyによるKubernetes Hardwayは、GCPを使い切ったものにとっては少しお財布が心配になるため敬遠している。

基本的には下記のマニュアルを参考にすれば良いが、「スワップをオフにする」等と言われても具体的なコマンドの説明は割愛されているのでメモとして残すことにした。
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#installing-kubeadm-kubelet-and-kubectl

コードだけ見たいんだ、という人向け

下記リポジトリに同様の内容を簡潔にまとめています

観測したエラーと回避策

swap復活する問題

swapoff -aコマンドでスワップを無効化するが、/etc/fstab内にswapfile使う設定が記載されていたためVMの再起動ごとにkubeletが落ちるという現象に見舞われた
vagrantでcentos7を作成した場合には、/swapfileにスワップファイルが作成されているため、fstabからこの行を削除し、swapfileファイルの実体も削除することで対応した。

kubelet動かない問題

kubeletが下記のようなエラーで正しく動作しないことがあった。

failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config 

上記のエラーが出てkubeletがうまく動いていない場合、下記コマンドでkubeletが正常に起動する

kubeadm init

この事象と回避策は下記のIssueで報告されている

確認していないがkubeadm initすることで諸々の設定をし直す必要がありそう
下記のあたりの再設定が必要か(未検証)

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

calicoの再デプロイも必要?

kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml

taintの設定も再度必要?

kubectl taint nodes --all node-role.kubernetes.io/master-

補足

vagrant upで作成したマシンを削除

vagrant destroy -f

普通のsshコマンドでVMにアクセスするための設定
ansibleとかでvagrant sshでなく素のssh使いたい時に便利

vagrant ssh-config >> ~/.ssh/config