在 Debian 12 上使用 kubeadm 安装 Kubernetes 集群
一 环境准备与前置检查
sudo swapoff -a,并在 /etc/fstab 中注释 swap 行,避免 kubelet 启动失败。二 所有节点安装与配置
sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
sudo apt install -y containerd
sudo systemctl enable --now containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# 若使用 systemd cgroup,确保配置中 SystemdCgroup = true
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
sudo systemctl restart containerd
# 导入 Kubernetes GPG 公钥(Debian 12 常见为 bookworm)
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-apt-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 systemctl enable --now kubelet
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
--container-runtime=remote --container-runtime-endpoint=unix:///run/cri-dockerd.sock。三 初始化控制平面 Master
# 单 Master 常用示例(Pod 网段与 Flannel 默认匹配)
sudo kubeadm init \
--apiserver-advertise-address=<MASTER_IP> \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--image-repository=registry.k8s.io
国内环境可替换镜像仓库为 registry.aliyuncs.com/google_containers 以加速拉取。初始化成功后,控制台会输出 kubeadm join ... 命令,请妥善保存。mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl apply -f https://docs.projectcalico.org/manifests/custom-resources.yaml
kubectl cluster-info
kubectl get nodes
kubectl get pods -A
四 加入 Worker 节点
sudo kubeadm join <MASTER_IP>:6443 \
--token <TOKEN> \
--discovery-token-ca-cert-hash sha256:<HASH>
kubeadm token create --print-join-command
kubectl get nodes
五 常见问题与运维命令
sudo kubeadm reset -f
sudo rm -rf /etc/cni/net.d
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X
kubectl get nodes -o wide
kubectl get pods -A -o wide
journalctl -u kubelet -xe
sudo ufw allow <端口>/tcp 并 sudo ufw reload。