Debian 上部署 Kubernetes 的最佳实践
一 环境与规划
- 操作系统与版本:优先选择 Debian 12(Bookworm),内核保持最新稳定版,以获得更好的容器与网络栈支持。
- 硬件基线:控制平面建议至少 2 核 CPU / 4GB 内存 / 20GB 磁盘;工作节点按业务负载提升规格。
- 网络与互通:所有节点间需 IP 互通,规划好 Pod CIDR 与 Service CIDR,避免与现有网段冲突。
- 主机名与解析:为每个节点设置唯一 hostname,并在 /etc/hosts 或 DNS 中维护解析,便于故障排查与组件通信。
- 时间同步:启用 NTP/chrony,保证节点时间一致,避免证书校验与调度异常。
二 系统加固与内核参数
- 关闭 Swap:Kubelet 不支持 Swap,需永久关闭并重启验证。
- 加载内核模块:启用容器网络所需模块。
- 内核网络参数:开启桥接流量到 iptables、启用转发。
- 防火墙与安全组:仅放通必要端口(如 6443 API Server 等),遵循最小暴露原则。
- 容器运行时:生产推荐使用 containerd(稳定、与 kubelet 集成度高);如使用 Docker,确保使用其内置的 containerd。
- 系统加固:最小安装、关闭不必要服务、启用自动安全更新(unattended-upgrades)。
三 安装与初始化步骤
- 更新与基础工具:安装 apt-transport-https、ca-certificates、curl 等。
- 安装 containerd:配置模块与 sysctl 后启动服务。
- 添加 Kubernetes APT 源并安装组件:安装 kubelet、kubeadm、kubectl,并标记为 hold 防止意外升级。
- 初始化控制平面:使用 kubeadm init 指定 Pod CIDR(如 10.244.0.0/16),完成后按提示配置 kubectl。
- 安装 CNI 网络插件:如 Calico 或 Flannel,确保 Pod 间与节点间网络连通。
- 加入工作节点:使用 kubeadm join 命令将节点加入集群。
- 验证:检查节点 Ready 状态、系统 Pod Running 状态与集群信息。
四 网络与安全加固
- CNI 选择与规划:
- Flannel:简单易用,适合入门与通用场景。
- Calico:支持 NetworkPolicy,适合对网络隔离有要求的环境。
- Cilium:基于 eBPF,在可观测性与网络性能方面更优,适合中大型与高性能场景。
- 网络策略:为关键业务启用 NetworkPolicy,实现命名空间与服务间的最小权限访问。
- 访问控制:启用 RBAC,按最小权限分配角色与绑定;对外暴露通过 Service/Ingress 结合认证授权与 WAF。
- 镜像与运行时安全:使用可信基础镜像、镜像扫描、非 root 运行、Seccomp/AppArmor 等。
五 验证与运维优化
- 基础验证:
- 节点状态:kubectl get nodes(应为 Ready)。
- 系统组件:kubectl get pods -A(核心组件 Running)。
- 连通性测试:部署 Nginx 示例应用并验证访问。
- 资源与调度:为工作负载设置合理的 requests/limits,结合 亲和/反亲和 提升可用性与资源利用率。
- 可观测性:部署 Prometheus + Grafana 监控与 日志收集(如 EFK/ Loki),设置告警。
- 高可用与升级:生产建议 3 控制平面 + 3 工作节点 的“3x3”架构;使用 kubeadm 进行版本升级与证书轮换,定期备份 etcd。
- 存储与性能:为 PV/PVC 规划 StorageClass 与备份策略;IO 密集场景可考虑 Local PV 或高性能云盘。