在 ubuntu 22.04 上安裝多節點的 k8s

事前準備

準備三台 node,安裝建議高於 2 cor CPU 與 4GB 的 RAM。

Kubernetes Interface

  • CRI 使用的是 containerd
  • CNI 使用的是 calico

步驟

每一台都要

將指定的 IP 地址和主機名添加到 /etc/hosts 文件中,以便系統可以解析這些主機名。

1
printf "\n192.168.50.73 thanos-test-1\n192.168.50.74 thanos-test-2\n192.168.50.75 thanos-test-3\n\n" >> /etc/hosts

為 containerd 添加必要的模組

1
printf "overlay\nbr_netfilter\n" >> /etc/modules-load.d/containerd.conf

啟用 overlay 和 br_netfilter 模組

1
2
modprobe overlay
modprobe br_netfilter

設置系統參數以支持 Kubernetes。

1
printf "net.bridge.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\n" >> /etc/sysctl.d/99-kubernetes-cri.conf

從 GitHub 下載 containerd 的壓縮包並解壓到指定目錄

1
2
3
4
wget https://github.com/containerd/containerd/releases/download/v1.6.16/containerd-1.6.16-linux-amd64.tar.gz -P /tmp/
tar Cxzvf /usr/local /tmp/containerd-1.6.16-linux-amd64.tar.gz

wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -P /etc/systemd/system/

重新加載 systemd 的並啟動 containerd 服務

1
2
systemctl daemon-reload
systemctl enable --now containerd

從 GitHub 下載 runc 並安裝到指定目錄

1
2
3
wget https://github.com/opencontainers/runc/releases/download/v1.1.4/runc.amd64 -P /tmp/

install -m 755 /tmp/runc.amd64 /usr/local/sbin/runc

從 GitHub 下載 CNI 插件的壓縮包並解壓到指定目錄

1
2
3
wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz -P /tmp/
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin /tmp/cni-plugins-linux-amd64-v1.2.0.tgz

創建 containerd 的配置文件

  • 手動編輯並將 systemdCgroup 設置為 true
1
2
3
4
5
mkdir -p /etc/containerd

containerd config default | tee /etc/containerd/config.toml

systemctl restart containerd

關閉 swap 交換分區

  • /etc/fstab 中禁用它
1
swapoff -a 

更新系統套件列表

1
2
apt-get update
apt-get install -y apt-transport-https ca-certificates curl

添加 Kubernetes 的 APT 來源

1
2
3
sudo mkdir -p /etc/apt/keyrings
echo "deb [signed-by=/etc/apt/keyrings/kubernetes.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes.gpg

更新系統套件列表並重啟系統

1
2
apt-get update
reboot

安裝指定版本的 Kubernetes 套件

1
2
apt-get install -y kubelet=1.26.1-00 kubeadm=1.26.1-00 kubectl=1.26.1-00
apt-mark hold kubelet kubeadm kubectl

檢查 swap 配置,確保 swap 已被禁用(顯示為 0)。

1
free -m

只有 controll panel 需要初始化 Kubernetes 叢集。

1
kubeadm init --pod-network-cidr 10.10.0.0/16 --kubernetes-version 1.26.1 --node-name k8s-control

在 controll panel 節點上安裝 Calico

1
2
3
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/tigera-operator.yaml

wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/custom-resources.yaml

手動編輯 custom-resources.yaml 文件並設置正確的 CIDR。

  • 修改成 10.10.0.0/16
    1
    2
    3
    vi custom-resources.yaml 

    kubectl apply -f custom-resources.yaml

取得 worker node 加入 cluster 的命令。

1
kubeadm token create --print-join-command

新增到 worker node 執行,使用上面的命令將 worker node 加入 cluster。


在 ubuntu 22.04 上安裝多節點的 k8s
https://phoebeho.com/sre/20230901/4207266191/
作者
Phoebe
發布於
2023年9月1日
許可協議