KubernetesのコンテナランタイムとしてDockerの代わりにCRI-Oを用いてみる
前提
OS: Ubuntu 18.04
インストール
コンテナランタイム CRI-Oのインストール
基本的に下記のkubernetes.ioの記事通りに進められる
root@controller-0:~# systemctl start crio
Job for crio.service failed because the control process exited with error code.
See "systemctl status crio.service" and "journalctl -xe" for details.
root@controller-0:~# journalctl -xe
中略
Apr 25 03:08:45 controller-0 crio[3319]: time="2020-04-25 03:08:45.559628306Z" level=fatal msg="runtime config: runtime validation: \"runc\" not found in $PATH: exec: \"runc\": executable file not found in $PATH"
kubeadmのインストール
下記ページを基にサクサク進める
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
kernel parameter少し変更
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
スワップ切っておく
swapoff -a
kubeadm等のインストール
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
kubernetes clusterの構築
出力欄に出てくるコマンドをそれぞれ実行する
クラスタの構築
kubeadm init
略
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.240.0.10:6443 --token 43e76r.pe3ilo6i6908r2og \
--discovery-token-ca-cert-hash sha256:ae956c8edb77cbc9659823b89d7426d4eceb8d4b8cc85b3bf5656f9d1989175d
kubectlを使うための認証情報をユーザのホームに移動する
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
何かしらのCNIを導入する ここではCalicoを選択
kubectl apply -f https://docs.projectcalico.org/v3.11/manifests/calico.yaml
クラスタへのノードの追加
最初のノードと同様にコンテナランタイムとkubeadmのインストールを済ませる
新たに追加するノードに下記を追記する(これを行わないと、vagrantで作成されたeth0のIPが使われてしまい、calicoによるVXLAN構成が失敗する)
vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="KUBELET_EXTRA_ARGS=--node-ip=追加するマシンのIP"
最初のノードの出力にあったkubeadm joinコマンドを実行する
kubeadm join 10.240.0.10:6443 --token rrqz8z.xjln30peilb0efqf --discovery-token-ca-cert-hash sha256:89424e23e88150c521dc7dec53ef95d1afc130c4d4cf0465a12181320c65cf06
joinに成功すると、下記のコマンドにてノードが増えていることを確認できる
root@controller-0:~# kubectl get node
NAME STATUS ROLES AGE VERSION
controller-0 Ready master 34m v1.18.2
controller-1 Ready <none> 33m v1.18.2
ただ、calicoで何かエラーが出ている
追加したノード上のcalico-node podが起動できていないようである
これに伴い、corednsやcalico-kube-controllersも影響を受けていそう。
root@controller-0:~# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-kube-controllers-75d56dfc47-8cg2m 0/1 ContainerCreating 0 31m <none> controller-1 <none> <none>
calico-node-8jjql 1/1 Running 0 31m 10.240.0.10 controller-0 <none> <none>
calico-node-rs9dq 0/1 CrashLoopBackOff 5 8m4s 10.240.0.20 controller-1 <none> <none>
coredns-66bff467f8-96bb5 0/1 ContainerCreating 0 34m <none> controller-1 <none> <none>
coredns-66bff467f8-j2g8v 1/1 Running 0 34m 192.168.192.65 controller-0 <none> <none>
etcd-controller-0 1/1 Running 0 34m 10.240.0.10 controller-0 <none> <none>
kube-apiserver-controller-0 1/1 Running 0 34m 10.240.0.10 controller-0 <none> <none>
kube-controller-manager-controller-0 1/1 Running 0 34m 10.240.0.10 controller-0 <none> <none>
kube-proxy-5njt2 1/1 Running 0 34m 10.240.0.20 controller-1 <none> <none>
kube-proxy-9s5lv 1/1 Running 0 34m 10.240.0.10 controller-0 <none> <none>
kube-scheduler-controller-0 1/1 Running 0 34m 10.240.0.10 controller-0 <none> <none>