在 Debian 上运行 Kubernetes 的标准做法
一 环境准备与前置条件
- 硬件建议:每节点至少2 核 CPU、2 GB RAM、20 GB 磁盘;各节点需有唯一主机名、时间同步、互通网络。
- 禁用 Swap:执行swapoff -a,并在**/etc/fstab**中注释 swap 行,避免 kubelet 异常。
- 容器运行时:选择其一并安装与启用(见下一节)。
- 防火墙/安全组:放行控制面与工作节点所需端口(见文末端口表)。
- 国内环境:可准备镜像源或代理,以加速拉取镜像与仓库访问。
二 安装容器运行时与 Kubernetes 组件
- 安装 Docker(传统方式,适合入门与测试)
- 更新并安装:sudo apt-get update && sudo apt-get install -y docker.io
- 启动与开机自启:sudo systemctl enable --now docker
- 安装 containerd(更贴近生产,CRI 原生)
- 安装与生成默认配置:sudo apt-get install -y containerd
- 生成并启用配置:sudo mkdir -p /etc/containerd && sudo containerd config default | sudo tee /etc/containerd/config.toml
- 启动与开机自启:sudo systemctl enable --now containerd
- 安装 kubeadm、kubelet、kubectl(所有节点)
- 导入 GPG 并添加仓库(新版推荐方式,示例为 v1.33):
- curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | 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.33/deb/ /” | sudo tee /etc/apt/sources.list.d/kubernetes.list
- 更新索引并安装:sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
- 锁定版本避免误升级:sudo apt-mark hold kubelet kubeadm kubectl
- 启动 kubelet:sudo systemctl enable --now kubelet
三 初始化控制平面与加入工作节点
- 初始化 Master(将 替换为你的主节点 IP)
- 使用 Flannel 时推荐:sudo kubeadm init --apiserver-advertise-address= --pod-network-cidr=10.244.0.0/16
- 国内镜像加速(可选):sudo kubeadm init --apiserver-advertise-address= --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
- 配置 kubectl(仅在 Master 执行)
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装 CNI 网络插件(二选一)
- 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
- 加入 Worker 节点
- 使用 kubeadm init 输出中的 kubeadm join 命令;若 Token 过期,在主节点执行:kubeadm token create --print-join-command 生成新命令。
四 验证与常见问题处理
- 验证集群状态
- kubectl cluster-info
- kubectl get nodes(节点状态应为 Ready)
- kubectl get pods -A(系统 Pod 应为 Running)
- 常见问题
- 节点 NotReady:检查 CNI 是否已安装、Pod CIDR 是否与网络插件一致(如 Flannel 默认 10.244.0.0/16)、kubelet 是否 Running。
- Token 过期:在主节点执行 kubeadm token create --print-join-command 获取新 join 命令。
- 重置与重装:sudo kubeadm reset,必要时清理 /etc/cni/net.d 并重置 iptables。
五 端口与网络要求
| 节点角色 |
端口/协议 |
用途 |
| 控制平面 |
6443/TCP |
Kubernetes API Server |
| 控制平面 |
2379–2380/TCP |
etcd 集群通信 |
| 控制平面 |
10250/TCP |
kubelet API |
| 控制平面 |
10251/TCP |
kube-scheduler |
| 控制平面 |
10252/TCP |
kube-controller-manager |
| 工作节点 |
10250/TCP |
kubelet API |
| 工作节点 |
30000–32767/TCP |
NodePort 服务端口范围 |