kubeadm
k8s setup tool
なんか知らんが他のツールよりはセットアップが面倒らしいが、勉強にはなるでしょう
Ubunut 24.04 memo
1台構成
構築手順
container runtime install
参考: https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/
module 有効化
code:sh
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# この構成に必要なカーネルパラメーター、再起動しても値は永続します
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
EOF
# 再起動せずにカーネルパラメーターを適用
sudo sysctl --system
# swap off
swapoff -a
modprobe br_netfilter
sysctl -w net.ipv4.ip_forward=1
sudo vi /etc/fstab
systemd cgroups driver
kubeletとCRIの両方が同じ経路でcgroupsを扱うべき
最新のlinux distro だとcgroup2 = systemd cgroupsである可能性が高い
KubeletConfigurationでも指定する必要あるらしい
CRI-Oを使う場合はsystemd cgroupsを使うことが必須
参考: https://kubernetes.io/ja/docs/setup/production-environment/container-runtimes/#systemd-cgroup-driver
cri-o, kubeadm kubelet, kubectl install
kubenestus 、cri-o version 対応に細かく対応指定があるので注意。当時は1.33だった
deb pkg経由でcri-o kubeadm kubelet kubectlと対応するもの全部入れてくれる
下記手順はrootユーザーで実行したほうがよい
手順の中でkubeadm initまで実行しているが引数指定するのでやらないこと
code:sh
sudo su -
KUBERNETES_VERSION=v1.33
CRIO_VERSION=v1.33
上記変数設定後に実行
https://github.com/cri-o/packaging/blob/main/README.md#distributions-using-deb-packages
kubeadmi create cluster
kubeadm initに 引数を入れること
CNIの要求で--pod--network-ciderを指定しておきたいとか
flunnelは10.244.0.0/16を前提にしてたりする
後でマルチなコントロールプレーンに変更したいならcontrole-plane-endpointとか
一度シングルコントロールプレーンで作ると後でマルチに変えるサポートがkubeadm自体にはない
--control-plane-endpoint自体は引数でIPかDNS名を指定
要はcontrol plane endpontをIP anycastやDNSで冗長化させる
あとでkubeadm joinするときも--control-plane-endpointで指定すること
code:sh
# single 構成ならcluster-endpointはひとまずは/etc/hostsで127.0.0.1で解決しておけばよい
# マルチクラスターにするさいにVIP, anycast , dns roundrobin等で対応すればよい
echo "127.0.0.1 cluster-endpoint.lan" | tee -a /etc/hosts
kubeadm init --control-plane-endpoint cluster-endpoint.lan
kubectl setting
code:sh
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
CNI setup
flannel
Cilium
join worker
https://kubernetes.io/ja/docs/tasks/administer-cluster/kubeadm/adding-linux-nodes/
cri-o, kubeadm kubelet, kubectl installを実施
最後にkubeadm token create --print-join-commandで生成されたcmdをworkerで実施
LoadBalancer問題
bare metalで構築時のk8sはリソースタイプload-balancerを実装していない
IaaSではそれぞれサポートされているので気にしなくてよい
MetalLBを使えとのこと
MetalLB
CiliumならLB resouce同梱している
参考
https://qiita.com/zhangyangfeng1994/items/e1436c3844e6b30b4028
https://kubernetes.io/ja/docs/setup/production-environment/container-runtimes/
https://blog.drbd.jp/2020/09/kubernetes_testenv/
#k8s