Debian 上部署 Kubernetes 的最佳实践
一 基础环境与系统准备
- 选择稳定版本:优先使用 Debian 12(Bookworm),具备更好的内核与驱动兼容性与长期支持。
- 资源基线:控制平面建议至少 2 核 CPU / 2 GB 内存 / 20 GB 磁盘;生产环境建议 ≥8 GB 内存 并配备 SSD。
- 主机规划:为各节点设置唯一 hostname,并在 /etc/hosts 或 DNS 中完成解析,便于组件通信与排障。
- 内核与模块:加载 overlay、br_netfilter 等模块,开启 IPv4 转发 与桥接流量入 iptables,确保容器网络与 kube-proxy 正常工作。
- 关闭 Swap:执行 swapoff -a 并在 /etc/fstab 注释 swap 条目,避免 kubelet 调度异常与稳定性问题。
二 容器运行时与内核网络
- 运行时选择:使用 containerd 作为容器运行时(自 v1.24 起 Docker 作为内置容器运行时被移除,推荐 containerd + cri 插件)。
- Cgroup 驱动:将 containerd 的 SystemdCgroup 设为 true,与 systemd 管理的节点保持一致,减少资源争用与 cgroup 冲突。
- 内核参数:启用 net.bridge.bridge-nf-call-iptables=1、net.ipv4.ip_forward=1,保证 Pod 网络与 Service 转发链路完整。
- 可选内核网络优化:按业务与负载调优 net.core.somaxconn、net.ipv4.tcp_tw_reuse、vm.swappiness 等,提升连接与内存回收表现。
三 集群初始化与网络插件
- 组件安装:添加 Kubernetes APT 源,安装 kubelet、kubeadm、kubectl,并使用 apt-mark hold 锁定版本,避免非预期升级。
- 初始化控制平面:使用 kubeadm init 指定 Pod 网络 CIDR(如 10.244.0.0/16 或 192.168.0.0/16)与 Service CIDR(如 10.96.0.0/12),并设置 –apiserver-advertise-address 为主节点 IP。
- kubectl 配置:拷贝 /etc/kubernetes/admin.conf 到 $HOME/.kube/config 并修正权限,确保本地 kubectl 可用。
- CNI 网络插件:部署 Calico 或 Flannel 等 CNI,确保 Pod 间与跨节点通信 正常;选择高性能 CNI 并结合 MTU 设置(如 1500 或 9000 用于 Jumbo Frame)以避免分片与性能劣化。
- 高可用(HA):生产环境建议配置 多控制平面 + 负载均衡,并使用 kubeadm 的 HA 引导流程与证书上传能力。
四 安全加固与访问控制
- 最小暴露面:启用 UFW 或等效防火墙,仅放行必要端口(如 6443、10250、10251、10252、2379/2380、30000–32767 等),并限制来源网段。
- 全链路加密:为 API Server、etcd、kubelet、Controller Manager、Scheduler 启用 TLS,并配置 认证/授权 与 API 访问白名单。
- 身份与授权:使用 RBAC 实施最小权限原则,按命名空间与职责划分角色绑定。
- 镜像与漏洞治理:使用 Trivy/Clair 定期扫描镜像,及时更新基础镜像与依赖。
- 运行时安全:在 Pod 中启用 非 root 用户、最小权限与只读根文件系统;结合 Pod Security Admission(PSA) 或 PodSecurityPolicy(PSP) 限制特权、卷挂载与主机网络等高风险能力。
- 网络隔离:通过 NetworkPolicy 实现 默认拒绝(Default Deny) 与细粒度入/出方向规则,降低横向移动风险。
- 备份恢复:定期 备份 etcd(如 etcdctl snapshot save),并验证恢复流程可用性。
五 调度、资源与可观测性
- 资源配置:为工作负载设置合理的 requests/limits,避免资源争用与 OOM;为关键系统组件设置 资源配额与优先级。
- 调度策略:合理使用 节点/ Pod 亲和性与反亲和性、污点与容忍,实现故障域隔离、亲和部署与高可用分布。
- 弹性伸缩:基于 CPU/内存 或自定义指标配置 HPA,结合 Cluster Autoscaler 实现节点与 Pod 双向弹性。
- 存储优化:优先 SSD 与本地盘;有状态服务使用 动态供给(StorageClass);大规模与高可用场景可选 Ceph/Longhorn 等分布式存储。
- 监控告警:部署 Prometheus + Grafana 监控节点、Pod、控制平面与网络指标,配置告警规则;使用 ELK/EFK 或 Loki 进行集中式日志。
- 日常运维:定期清理 未使用镜像与容器、过期 ReplicaSet 与 PVC;使用 kubectl top / describe 与事件审计定位瓶颈与异常。