はじめに
何番煎じかわからないけどkubeadmを使っておうちkubernetesを構築したので忘備録として。
多々間違っているところがあるかもしれないです。
環境
種別 | PC | OS |
---|---|---|
マスター | Mac Mini late 2012 | Ubuntu 20.04.3 LTS |
ワーカー | ラズパイ3B+ | Raspberry Pi OS Lite 32Bit |
共通手順
インストール時にhostnameとかは設定済み
パッケージ周り更新
sudo apt-get update && sudo apt-get -y upgrade
swapを無効化
sudo vim /etc/fstab
# コメントアウトしてswapを無効化
# /swap.img none swap sw 0 0
{{ hostname }}.local でアクセスできるようにする
sudo apt-get install -y avahi-daemon
Dockerをインストール
# インストール
sudo apt-get install -y docker
# dockerをsudoなしで使えるように
sudo usermod -aG docker $USER
# dockerが常時起動されるか確認
systemctl is-enabled docker
# enableが出力されなかった場合は常時起動を有効化
systemctl enable docker
Dockerのcgroup driverをsystemdに変更する
dockerのcgroup driverは cgroupfs
が使用されているが、kubeadmはデフォルトで systemd
を使用するため、cgroup driverを合わせなければいけない。
今回はdockerのcgroup driverを systemd
に変更して合わせるようにした。
# docker daemonの設定を作成
sudo vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
# daemonを再起動
systemctl daemon-restart
systemctl restart docker
Dockerが動くか確認
# dockerコンテナ起動
docker run -p 80:80 nginx
# 疎通確認
curl http://{{ hostname }}.local
# 確認できたらコンテナ削除
docker rm {{ CONTAINER_ID }}
k8s周りのパッケージインストール
# dockerのGPGキーを取得
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
# kubernetesのレポジトリを追加
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
# httpでパッケージ追加できるように
sudo apt-get install -y apt-transport-https
# k8s周りのパッケージインストール
sudo apt-get install -y kubeadm kubelet kubectl kubernetes-cni
マスターノード構築
kubeadmでマスターノード構築
# マスターノード構築 (cirdrはflannelを使用するので固定)
kubeadm init --pod-network-cidr=10.244.0.0/16
# kubeconfig作成
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# ワーカーノードjoin用コマンドをメモしておく
# kubeadm join {{ ip_address }} ~~~ をコピー
kubectlが使えるか確認
kubectl get node
とか
kubectl get pod --all-namespaces
この時点ではcorednsはまだpendingになってておk。
flannel導入
kubectl apply -f https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml
ここで kubectl get pod --all-namespaces
して core-dnsが起動していればおk。
ワーカーノード構築
kubeadmでjoin
# マスターノード構築時にメモったやつ
sudo kubeadm join {{ MASTER_IP }}:6443 --token {{ TOKEN }} --discovery-token-ca-cert-hash {{ SHA256_HASH }}
# 確認(masterで操作)
kubectl get node
# ワーカーノードのstatusがReadyになってればおk
トラブルシューティング
この時点でのトラブルはkubeletの起動周りが多いので、systemctl status kubelet
や journalctl -u kubelet
などでログを確認する。
以下よくハマったやつ。
err="open /run/systemd/resolve/resolv.conf: no such file or directory
これ今の所再起動すると毎回起きる。。。
自分で作ってあげれば解決。
sudo mkdir -p /run/systemd/resolve
sudo ln -s /etc/resolv.conf /run/systemd/resolve/resolv.conf
failed to run Kubelet: misconfiguration: kubelet cgroup driver: "systemd" is different from docker cgroup driver: "cgroupfs"
dockerとkubeletのcgroup driverがあってないやつ。
上の方でやってる /etc/docker/daemon.json
作って再起動すれば解決。