Debian 上优化 Kubernetes 安装的可执行方案
一 标准化与自动化
- 使用 kubeadm 标准化部署,容器运行时优先 containerd(原生集成、维护简单),也可选 Docker。
- 将重复操作脚本化(关闭 Swap、加载内核模块、配置 sysctl、安装组件、初始化、安装 CNI),减少人为失误并便于复用。
- 单节点快速体验可用一键脚本;多节点或 HA 场景使用 Kubespray(基于 Ansible)批量部署与升级。
- 镜像拉取慢时,使用国内镜像源或在 kubeadm 初始化时通过 image-repository 指定镜像仓库,加速拉取。
二 系统预检与内核网络优化
- 基础要求:每个节点至少 2 核 CPU、2GB 内存、20GB 磁盘;使用 Debian 11/12 稳定版,系统更新到最新补丁。
- 主机名与解析:设置清晰主机名,并在 /etc/hosts 添加 IP-主机名 映射,避免 DNS 解析问题。
- 时间同步:安装并启用 NTP,确保节点时间一致,避免证书校验与日志混乱。
- 关闭 Swap:执行 swapoff -a 并注释 /etc/fstab 中的 swap 行,保证 kubelet 正常调度。
- 内核模块与转发:加载 overlay、br_netfilter 并设置:
- net.bridge.bridge-nf-call-iptables = 1
- net.bridge.bridge-nf-call-ip6tables = 1
- net.ipv4.ip_forward = 1
- 可选性能调优(/etc/sysctl.conf 或 /etc/sysctl.d/):
- net.core.somaxconn = 65535
- net.ipv4.tcp_max_syn_backlog = 65535
- net.ipv4.ip_local_port_range = 1024 65535
- net.ipv4.tcp_tw_reuse = 1
- net.ipv4.tcp_fin_timeout = 30
- net.ipv4.tcp_max_tw_buckets = 180000
- vm.swappiness = 10
执行 sysctl --system 使配置生效。
三 容器运行时与 kubeadm 初始化优化
- containerd(推荐):
- 安装并启用:apt-get install -y containerd && systemctl enable --now containerd
- 生成默认配置并启用 SystemdCgroup:
- containerd config default | tee /etc/containerd/config.toml
- sed -i ‘s/SystemdCgroup = false/SystemdCgroup = true/g’ /etc/containerd/config.toml
- systemctl restart containerd
- Docker(可选):apt-get install -y docker.io && systemctl enable --now docker
- 安装组件:在所有节点安装 kubelet、kubeadm、kubectl,并 apt-mark hold 固定版本,避免自动升级引发不兼容。
- kubeadm 初始化要点:
- 指定 Pod CIDR(与 CNI 一致,如 Flannel 使用 10.244.0.0/16)
- 指定 Service CIDR(如 10.96.0.0/12 或 10.0.0.0/16,避免与现有网络冲突)
- 指定 API Server 广告地址:–apiserver-advertise-address=<本机IP>
- 镜像拉取慢:–image-repository=registry.aliyuncs.com/google_containers
- 快速单节点示例:kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap
- 获取加入命令:在主节点执行 kubeadm token create --print-join-command,在 Worker 节点执行输出命令加入集群。
四 网络与安全配置
- 防火墙放行关键端口(示例为 ufw):
- 控制平面:6443(API Server)、2379-2380(etcd)、10250(kubelet)、10251/10252(kube-scheduler/kube-controller-manager)
- 工作节点:10250(kubelet),如需只读端口可放行 10255
- 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
- 确保 Pod CIDR 与 CNI 配置一致,否则节点会长期处于 NotReady。
- kubectl 配置:mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config。
五 验证与后续维护
- 快速验证:
- kubectl get nodes(状态应为 Ready)
- kubectl get pods -n kube-system(确认 CNI 与核心组件 Running)
- 常见问题速排:
- 节点 NotReady:确认 CNI 已安装 且 PodCIDR 匹配
- kubeadm init 失败:检查 Swap 关闭、内核模块与转发生效、容器运行时正常、网络与端口可达
- kubectl 权限问题:确认 $HOME/.kube/config 正确拷贝且属主正确
- 备份与升级:
- 定期备份 etcd(如 etcdctl snapshot save),用于灾难恢复
- 使用 Kubespray 进行批量升级与维护,降低多节点变更风险