今天這一篇大概是這幾天下來最燒腦的 操作有夠繁瑣
安裝 Kubeadm 在 Debain 有蠻多需要手動操作的地方要注意
千萬不要跳步做RRR
以下是今天的步驟順序
Step1 更改 Hostname & hosts
Step2 拔掉 SWAP
Step3 設定 Kernal & 網卡名稱
Step4 安裝 Containerd
Step5 安裝 Kubeadm
Step6 調整 Cluster 設定
Step7 Cluster 啟動!
Step8 安裝 CNI (Calico)
這邊因為 K8s 會吃到一些 hostname 的設定所以要改成一個不重複的 Hostname
vim /etc/hostname
lke-main
接著到 hosts 改 local端的 ip - hostname
vim /etc/hosts
192.168.202.178 lke-main
如果有要加入其他 Worker Node 的話也要加他們的 ip - hostname 進來
這邊由於是使用之前安裝的 Template 來用 所以 SWAP 還會存在於 Debian上
但 Kubeadm 不能用 SWAP 所以要把 SWAP 全部關掉
先把目前使用的 SWAP 關掉
swapoff -a
這樣就關好了 但僅限重開機之前 重開後 SWAP 又會被自動掛載回來
所以來去 /etc/fstab 拔掉自動掛載 SWAP
把 SWAP
那一行給註解掉就可以了 (圖上的SWAP在第14行)
先來開啟 Kernel 模組
第一行是開啟模組
第二行是設定開機時自動載入模組
modprobe br_netfilter
echo "br_netfilter" | tee /etc/modules-load.d/br_netfilter.conf
接著設定要開啟的 Kernel 功能
cat <<EOF | tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sysctl --system
接著改網卡名稱 直接改系統的網卡命名模式
vim /etc/default/grub
GRUB_CMDLINE_LINUX="net.ifnames=0"
改完檔案後 接著輸入指令讀取 然後重開電腦
grub-mkconfig -o /boot/grub/grub.cfg
reboot
然後 ip ad 看看網卡名稱
摁 他好了 但網卡設定記得要去 /etc/network/interface
改
接下來這一步是要設定 Kubeadm 的 CRI (Container Runtime Interface)
這邊選用 Containerd 來使用 直接來安裝吧
wget https://github.com/containerd/containerd/releases/download/v1.6.24/containerd-1.6.24-linux-amd64.tar.gz
wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service
tar Cxzvf /usr/local containerd-1.6.24-linux-amd64.tar.gz
mkdir -p /usr/local/lib/systemd/system
mv containerd.service /usr/local/lib/systemd/system/containerd.service
systemctl daemon-reload
systemctl enable --now containerd
wget https://github.com/opencontainers/runc/releases/download/v1.1.9/runc.amd64
install -m 755 runc.amd64 /usr/local/sbin/runc
wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.3.0.tgz
這邊依照官網的指示跟著跑安裝流程就可以了
apt-get update
apt-get install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | 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.28/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
接著來微調設定 有幾點要來設定
先來生成設定檔
mkdir /etc/containerd
containerd config default | tee /etc/containerd/config.toml
生成後用 vim 開
搜尋(/) 找 runc.options 把裡面的 SystemdCgroup 改成 true
vim /etc/containerd/config.toml
SystemdCgroup = true
這邊因為 Calico 預設使用的 IP 和我的網段衝到
所以這邊要改一下 YAML 檔來指定 IP Range
用 wget 下載 calico 的 YAML 下來更改
用搜尋找 192.168.0.0/16 來改掉
拔掉註解改成 172.30.0.0/16
wget https://docs.projectcalico.org/manifests/calico.yaml
vim calico.yaml
一切就定位後就可以 init 啟動 Cluster 了 記的要用參數改變 pod cidr
啟動完將 KUBECONFIG 指定個位置就能用 kubectl 連線到 Cluster
kubeadm init --pod-network-cidr=172.30.0.0/16
export KUBECONFIG=/etc/kubernetes/admin.conf
看到這個就代表成功啦
最後把 CNI 裝上去就可以正常使用了
kubectl apply -f calico.yaml
指令敲下去應該會看到噴一堆東西出來是正常的
再用 kubectl 看 node 狀態 顯示 Ready 就表示正常運作了
kubectl get node
收工下班
23/9/28 更新 Step4 安裝 Containerd 少一個 tar 解壓縮的過程