在 Debian 12 上使用 kubeadm 安装与配置 Kubernetes 集群
一 环境准备与系统设置
- 硬件建议:每个节点至少 2 核 CPU / 2 GB RAM / 20 GB 磁盘,并具备 sudo 权限与稳定网络。
- 设置主机名与解析(示例):
- 控制平面:sudo hostnamectl set-hostname k8s-master01.test.local
- 工作节点:sudo hostnamectl set-hostname k8s-worker01.test.local
- 所有节点 /etc/hosts 追加:
- 192.168.16.20 k8s-master01.test.local k8s-master01
- 192.168.16.21 k8s-worker01.test.local k8s-worker01
- 192.168.16.22 k8s-worker02.test.local k8s-worker02
- 关闭 Swap:
- sudo swapoff -a
- sudo sed -i ‘/ swap / s/^(.*)$/#\1/g’ /etc/fstab
- 内核与转发参数:
- cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
- sudo modprobe overlay && sudo modprobe br_netfilter
- cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
- sudo sysctl --system
- 防火墙(如启用 UFW):
- 控制平面放行:6443/tcp、2379/tcp、2380/tcp、10250/tcp、10251/tcp、10252/tcp、10255/tcp
- 工作节点放行:10250/tcp、30000:32767/tcp
- 执行:sudo ufw allow <端口或范围> && sudo ufw reload
二 安装容器运行时 Containerd
- 安装:sudo apt update && sudo apt -y install containerd
- 生成默认配置:containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
- 修改 /etc/containerd/config.toml:
- 将 [plugins.“io.containerd.grpc.v1.cri”.containerd.runtimes.runc.options] 下的 SystemdCgroup = false 改为 true
- 可选(提升拉取速度):将 sandbox_image 调整为 registry.aliyuncs.com/google_containers/pause:3.9
- 重启并自启:sudo systemctl restart containerd && sudo systemctl enable containerd
三 安装 kubeadm kubelet kubectl
- 安装依赖:sudo apt install -y curl gpg
- 添加 Kubernetes APT 仓库(Debian 12 推荐新仓库):
- curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo 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/ /” | sudo tee /etc/apt/sources.list.d/kubernetes.list
- 安装组件:sudo apt update && sudo apt install -y kubelet kubeadm kubectl
- 锁定版本:sudo apt-mark hold kubelet kubeadm kubectl
四 初始化控制平面与配置 kubectl
- 初始化(单控制平面示例):
- sudo kubeadm init --pod-network-cidr=10.244.0.0/16
- 如在国内环境拉取镜像慢,可加:–image-repository registry.aliyuncs.com/google_containers
- 配置 kubectl:
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装网络插件(二选一):
- 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 初始化输出中获取命令,形如:
- sudo kubeadm join :6443 --token --discovery-token-ca-cert-hash sha256:
- 验证:
- kubectl cluster-info
- kubectl get nodes
- kubectl get pods -n kube-system
五 常见问题与优化
- 镜像拉取失败:使用国内镜像仓库(如 registry.aliyuncs.com/google_containers)或配置 containerd 镜像加速。
- Pod 无法跨节点通信:确认已安装 CNI 插件(Flannel/Calico),且 Pod CIDR 与插件配置一致(如 10.244.0.0/16)。
- 节点 NotReady:检查 containerd 与 kubelet 状态、内核参数与防火墙端口。
- 需要更高可用:部署多控制平面(kubeadm HA)并配置 kube-proxy 与 keepalived/haproxy。
- 安全加固:启用 RBAC、限制 kubelet 匿名访问、开启审计日志、定期升级集群版本。