なぜまとめたか
想定読者: 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