3 min read

透過 Kubeadm 安裝自己的K8s

Kubeadm 安裝 透過 ContainerD 安裝自己的K8s
透過 Kubeadm 安裝自己的K8s

第一步:系統環境準備 (關閉 Swap 與設定網路)

這個步驟會關閉 Swap、載入必要的 Kernel 模組,並設定網路轉發,這些都是 K8s 正常運作的先決條件。

# 1. 關閉 Swap 並從 fstab 永久移除
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 2. 載入必要的 Kernel 模組
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter

# 3. 設定 sysctl 網路參數並套用
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

第二步:安裝與設定 Containerd (K8s 的容器引擎)

# 1. 安裝 containerd
sudo apt-get update
sudo apt-get install -y containerd

# 2. 產生預設設定檔,並強制啟用 SystemdCgroup
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

# 3. 重啟並設定開機自動啟動
sudo systemctl restart containerd
sudo systemctl enable containerd

第三步:安裝 Kubernetes 1.33 核心元件

這裡會直接從官方庫拉取 1.33 版的金鑰與套件,並鎖定版本。

# 1. 安裝必要套件與下載 v1.33 金鑰
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# 2. 新增 1.33 專屬儲存庫
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

# 3. 安裝元件並鎖定版本
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

第四步:初始化叢集與解除單節點限制

我們要讓這台機器同時扮演 Control Plane 和 Worker 的角色。

# 1. 初始化 K8s 叢集 (指定 Calico 預設的網段)
sudo kubeadm init --pod-network-cidr=192.168.0.0/16

# 2. 設定 kubectl 的存取權限 (讓你不用加 sudo 也能下指令)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 3. 解除單節點的污點 (Taint) 限制,讓一般 Pod 可以在這台機器上運行
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

第五步:安裝網路 (Calico) 與 Ingress 控制器 (NGINX)

最後,為叢集裝上網路神經與對外的大門。

# 1. 安裝 Calico 網路外掛
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/tigera-operator.yaml
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/custom-resources.yaml

# 2. 安裝 NGINX Ingress Controller (地端 Bare-metal 版本)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.1/deploy/static/provider/baremetal/deploy.yaml

K9s安裝

wget https://github.com/derailed/k9s/releases/latest/download/k9s_linux_amd64.deb && sudo apt install ./k9s_linux_amd64.deb && rm k9s_linux_amd64.deb

完成以上步驟 即可透過 kubectl get no 查詢是否成功。