sudo apt update && sudo apt upgrade -y
sudo swapoff -a # 臨時關閉
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 永久關閉(注釋掉swap行)
sudo modprobe overlay
sudo modprobe br_netfilter
sudo tee /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system # 生效配置
sudo apt install -y apt-transport-https curl software-properties-common
K8s需要容器運行時來管理容器,推薦使用Docker(社區最常用):
# 添加Docker官方GPG密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker軟件源
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安裝Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
# 啟動Docker并設置開機自啟
sudo systemctl enable --now docker
# 驗證Docker安裝
sudo docker run hello-world
# 添加Kubernetes官方GPG密鑰
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
# 添加Kubernetes軟件源
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list > /dev/null
# 更新軟件包列表
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
# 鎖定組件版本(防止自動升級導致集群異常)
sudo apt-mark hold kubelet kubeadm kubectl
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 # 指定Pod網絡CIDR(與后續網絡插件匹配)
說明:--pod-network-cidr
需與選擇的網絡插件(如Flannel、Calico)要求的CIDR一致,避免網絡沖突。
# 創建.kube目錄
mkdir -p $HOME/.kube
# 復制集群配置文件到用戶目錄
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# 修改配置文件權限
sudo chown $(id -u):$(id -g) $HOME/.kube/config
K8s需要網絡插件實現Pod間通信,推薦使用Flannel(輕量、易部署):
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
可選插件:若需更豐富的功能(如網絡策略),可使用Calico:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Master節點初始化完成后,終端會輸出類似以下命令(務必保存):
kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
將上述命令復制到每個Worker節點,運行后等待節點狀態變為Ready
。
在Master節點上運行:
kubectl get nodes
預期結果:所有節點(Master/Worker)狀態均為Ready
。
kubectl get pods -A
預期結果:所有Pod狀態均為Running
(網絡插件Pod可能需要1-2分鐘啟動)。
防火墻配置:若開啟防火墻,需開放以下端口:
sudo ufw allow 6443/tcp
sudo ufw allow 10250/tcp
版本兼容性:確保Docker、kubeadm、kubelet、kubectl版本兼容(參考K8s官方文檔的版本矩陣)。
生產環境優化:
故障排查:
NotReady
,檢查網絡插件是否正常運行;kubectl describe pod <pod-name> -n <namespace>
kubectl logs <pod-name> -n <namespace>