Raspberry Pi 2上に構築しようと思っていたのだが、メモリが足りなくてまともに使用するのは無理そうなため、取り合えず仮想環境上に構築したメモ。
1. スワップ無効化
無効化しなくても動くらしいが、パフォーマンスを良くするのために、無効化が推奨らしい。
2. dockerインストールに必要なソフトウェアをインストール
sudo apt install apt-transport-https ca-certificates curl software-properties-common
sudo apt update
sudo apt upgrade
3. dockerインストール
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update
apt-cache policy docker-ce
#Kubernetesの動作保証はv19までであるが、今回は最新バージョンで試した
sudo apt install docker-ce
sudo systemctl status docker
#dockerの操作をsudo無しで出来るようにするため、ログインユーザーをdockerグループに追加
sudo usermod -aG docker ユーザーID
4. docker設定
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload
sudo systemctl restart docker
#ブリッジ接続を有効化
sudo sysctl net.bridge.bridge-nf-call-iptables=1
#カーネルオプションに下記を設定し再起動
sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
sudo update-grub
sudo shutdown -r now
5. kubernetesインストール
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 update
sudo apt install kubelet kubeadm kubectl
6. kubernetes設定(マスター)
sudo kubeadm init --apiserver-advertise-address=192.168.xx.xx
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#Weave Netを設定
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
7. kubernetes設定(マスター以外)
dockerのインストール、設定共にマスターと同様に実施する。5. kubernetesのインストールまで同様に実施する。
sudo kubeadm join 192.168.xx.xx:6443 --token 「initしたときに表示されたトークン」 --discovery-token-ca-cert-hash 「initしたときに表示されたハッシュコード」
8. 確認
#マスターでノードが追加されたか確認
kubectl get nodes
#ラベルを付ける
kubectl label node 「ノード名」 node-role.kubernetes.io/worker=