Open5
おうちKubernetesにリベンジ
はじめに
1年くらい前におうちk8s環境を作ろうとしてintel nuc(いつの間にかasusに売却されてた)を買って取り組んだが、control-planeがうまく起動しなかった。GWで時間ができたのでリベンジする。
基本的にドキュメント通りに進める。(ある程度進めた後で書いているのでこの通りに動かないかも)
ゴール
Kubernetes クラスターにnginxのpodをデプロイしてアクセスできること
コンテナランタイムのインストール
IPv4フォワーディングを有効化し、iptablesからブリッジされたトラフィックを見えるようにする
いちおうスワップもoffにしておく。
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
sudo swapoff -a
# この構成に必要なカーネルパラメーター、再起動しても値は永続します
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
# 再起動せずにカーネルパラメーターを適用
sudo sysctl --system
containerdインストール
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install containerd.io
パッケージからインストールするとCRI統合プラグインが無効になっているっぽいので設定変更する。
(ここを対応してなかったのでcontrol-planeが動いていなかった)
containerd config default > /etc/containerd/config.toml
systemd cgroupドライバーを使用するように以下の通り修正し、再起動する。
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
sudo systemctl restart containerd
kubeadm、kubelet、kubectlのインストール
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
コントロールプレーンノードの初期化
# コントロールプレーンのノードの初期化
sudo kubeadm init --pod-network-cidr=10.0.0.0/16
# root user 以外でもkubectlコマンド打てるように
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# nodeの確認
kubectl get node
今回はコントロールプレーンノードにもpodをスケジュールさせたいのでその設定を入れる。
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
calico install
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml
wget https://projectcalico.docs.tigera.io/manifests/custom-resources.yaml
# pod networkを書き換える
kubectl apply -f custom-resources.yaml
# すべてのpodがrunningになっていれば大丈夫そう
kubectl get pods --all-namespaces