K8s 生产部署全套核心重点
核心概念 K8s 生产部署涵盖部署前规划、OS 内核优化、组件选型、网络存储、安全加固、业务规范、运维配套全流程。
整体分7大块:部署前规划、操作系统内核前置优化、集群组件选型与安装、网络存储核心部署、安全加固、业务Pod规范、集群运维配套、上线验收清单。
1. 部署前期规划(决定集群稳定性,最容易忽略)
1.1. 节点角色划分(标准生产架构)
- 控制平面 Master
推荐奇数台:3台(最小高可用)/5台;
组件:etcd、kube-apiserver、kube-controller-manager、kube-scheduler;
规范:Master不跑业务Pod(设置污点+容忍,隔离算力)。 - Worker 工作节点
承载业务容器、GPU训练/推理、中间件;
按业务拆分标签:workload=online在线业务、workload=train离线训练、workload=cache缓存。 - 特殊节点
GPU节点、存储节点、Ingress专用节点、监控节点,通过节点亲和调度隔离。
1.2. 资源规划
- etcd 独立资源
etcd性能瓶颈直接卡死集群,必须:独立SSD盘、CPU高主频、内存充足;
禁止etcd和业务共用磁盘,etcd数据单独挂载。 - Master 资源
apiserver是性能瓶颈,高并发集群给充足CPU内存; - Worker 资源池
在线业务:高主频CPU、SSD;
AI训练:大内存、HBM GPU、IB高速网卡; - 资源预留每台节点必须预留
kube-reserved、system-reserved,防止业务打满节点导致组件崩溃。
1.3. 版本统一规范
- k8s 集群全节点小版本完全一致;
- 容器运行时、CNI、CSI、GPU DevicePlugin版本匹配k8s;
- 生产选用长期支持稳定版(1.24~1.30主流),规避废弃API。
1.4. 网段规划(提前规划不可修改)
- PodCIDR、ServiceCIDR、宿主机网段三层完全隔离,无重叠;
- 集群内部网段禁止和企业内网、云VPC冲突;
- StatefulSet、Headless Service预留域名解析容量;
- 大规模集群提前拆分子网,避免CNI路由爆炸。
2. 宿主机操作系统前置部署优化(集群稳定根基)
2.1. 内核参数(所有节点统一配置)
# /etc/sysctl.conf
# 开启内核转发,容器跨主机通信必备
net.ipv4.ip_forward = 1
# 允许iptables桥接流量转发
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
# 缓解大量短连接TIME_WAIT堆积
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
# 调高连接跟踪上限,高并发集群必调
net.nf_conntrack_max = 1048576
# 关闭swap,k8s硬性要求
vm.swappiness = 0
# 关闭透明巨页,容器内存碎片
echo never > /sys/kernel/mm/transparent_hugepage/enabled
2.2. 关闭Swap(强制要求)
kubelet检测到swap开启会严重影响调度、OOM判断,部署前永久关闭:
swapoff -a
# 注释/etc/fstab内swap挂载项永久生效
2.3. 文件句柄与进程限制
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
2.4. 系统服务基础配置
- 关闭防火墙/按需放通集群端口;云主机配置安全组放行集群通信端口;
- 关闭SELinux;
- 时间同步chrony,全集群时区统一Asia/Shanghai;
- 主机名唯一,不使用localhost;
- 禁用无用系统服务,减少资源抢占。
3. 容器运行时部署重点(containerd为主,淘汰docker)
3.1. 选型标准
k8s 1.24+移除dockershim,生产统一使用 containerd;
3.2. 核心配置关键点
- cgroup驱动统一
systemd,kubelet和containerd cgroup驱动必须一致; - 镜像存储目录单独SSD磁盘,拆分系统盘;
- 配置镜像加速器(国内镜像仓库),解决拉取超时;
- 限制容器最大并发拉取镜像,避免带宽打满;
- 开启cgroup监控,支持metrics采集;
- 垃圾回收策略:镜像自动清理、停止容器定期删除,防止磁盘爆满。
3.3. 避坑点
- cgroup驱动不一致会导致kubelet启动失败、Pod资源限制失效;
- 镜像目录共用系统盘,批量拉镜像IO打满节点。
4. 集群控制平面部署核心(kubeadm/二进制两种方式通用重点)
4.1. etcd 重中之重
- 3节点独立部署,不内嵌master;
- 数据目录独立高速SSD;
- 开启定期快照备份,定时异地存储;
- 调整Raft心跳、选举超时,跨机房集群调大延迟参数;
- 限制单节点连接数,开启etcd监控告警。
4.2. kube-apiserver(集群唯一入口)
- 高可用负载均衡:内部VIP/云LB,所有节点统一访问;
- 核心配置:限流参数
--max-requests-inflight,防止突发请求压垮API; - 审计日志开启:记录资源增删改、删除Pod、变更权限,安全审计必备;
- 准入控制器:NodeRestriction、ResourceQuota、Mutating/Validating Webhook;
- TLS证书统一管理,定期轮换,禁止长期永久证书。
4.3. kube-controller-manager & kube-scheduler
- 开启领导者选举,防止多实例重复调谐;
- 控制器并发调参,大规模集群提升副本同步速度;
- 调度器开启Scheduling Framework,支持自定义调度扩展(GPU/Volcano);
- 多调度器隔离:在线推理、离线训练分开调度Profile。
4.4. kubelet 所有节点统一配置
- cgroup驱动=systemd;
- 配置节点资源预留
kube-reserved、system-reserved; - 开启镜像垃圾回收、容器磁盘阈值;
- 保护节点关键进程,防止OOM杀死集群组件;
- 证书轮换自动更新;
- 开启pod metrics采集,供监控、HPA使用。
5. 网络组件部署重点(CNI)
5.1. 主流选型:Calico(生产首选)
- 模式选用IPIP/BGP,云主机优先BGP性能更高;
- 支持NetworkPolicy网络隔离,多业务集群必须开启;
- MTU统一适配宿主机网卡,防止大包丢包;
- 节点间防火墙放行CNI通信端口;
- 监控Calico节点状态、路由同步日志。
5.2. CoreDNS(集群DNS)
- 至少2副本高可用,禁止单实例;
- 配置缓存、ndots优化,解决长域名解析问题;
- 资源限制配置,防止DNS解析打满节点;
- 网络策略放行53端口UDP/TCP;
- 配置自定义上游DNS,支持外部云服务域名解析。
5.3. kube-proxy
- 生产推荐ipvs模式,性能远高于iptables;
- 调大ipvs连接跟踪上限;
- 开启metrics监控Service转发状态。
6. 存储体系部署重点(CSI PV/PVC)
6.1. 存储分层规划
- 本地SSD:高性能数据库、Redis、AI模型缓存(LocalPV);
- 云厂商CSI块存储:通用业务有状态服务StatefulSet;
- 对象存储:数据集、备份、日志归档;
- 禁止普通业务使用共享NAS,IO性能差易抖动。
6.2. CSI存储驱动部署规范
- 存储控制器单副本/多副本高可用;
- 节点DaemonSet每台节点部署代理;
- 配置StorageClass:区分高性能/普通存储,设置默认SC;
- 开启PV自动回收策略(Retain/Delete);
- 快照、克隆功能开启,支持数据备份恢复。
6.3. StatefulSet专属存储
使用volumeClaimTemplates,每Pod独立PVC,数据隔离;
生产数据库、向量库、分布式训练Worker强制使用StatefulSet+独立PVC。
7. GPU异构算力部署(AI集群核心重点)
- NVIDIA GPU Operator一键部署整套组件:
nvidia-container-toolkit、DevicePlugin、dcgm-exporter; - DevicePlugin上报GPU资源,调度器识别
nvidia.com/gpu; - MIG切分配置:推理节点开启MIG,大模型训练节点关闭;
- DCGM监控GPU硬件指标、XID故障、NVLink带宽;
- 调度适配:Volcano/Koordinator Gang调度,分布式训练原子调度。
8. 集群安全部署重点(上线必做加固)
- RBAC权限最小化
禁止default服务账号高权限;各业务Namespace独立ServiceAccount,仅分配所需资源操作权限; - 网络隔离 NetworkPolicy
不同业务Namespace隔离入站出站流量,禁止全通访问; - 容器安全限制
Pod安全上下文:禁止root运行、降低capabilities、只读根文件系统、限制进程PID;
镜像策略:准入Webhook拦截高危镜像、私有镜像仓库认证; - Secret安全
数据库密码、AK密钥统一存Secret,禁止明文写YAML、ConfigMap; - API审计
apiserver审计日志持久化存储,留存90天以上; - 节点安全
仅内网访问集群端口,云安全组限制来源IP;定期节点漏洞扫描。
9. 业务标准部署规范(Deployment/StatefulSet通用)
9.1. 资源配额与限制(强制)
每个Pod必须配置 requests(调度依据)+ limits(熔断保护节点);
Namespace配置ResourceQuota,防止单业务耗尽集群资源。
9.2. 健康探针三探针完整配置
startupProbe、livenessProbe、readinessProbe,避免流量打到未就绪容器、异常容器长期占用资源。
9.3. 污点、亲和调度隔离
- 节点污点:GPU节点、在线业务节点打污点;
- 节点亲和、Pod反亲和:打散副本,避免单节点故障全部宕机;
9.4. 更新策略规范
- Deployment:滚动更新maxSurge/maxUnavailable,灰度发布;
- StatefulSet:数据库选用OnDelete,普通存储服务RollingUpdate+partition灰度。
9.5. 持久化规范
无状态服务用临时存储EmptyDir;有状态必须绑定PVC,禁止容器本地盘存核心数据。
9.6. 日志规范
容器日志输出stdout/stderr,配置日志轮转,防止节点磁盘打满;统一对接EFK日志收集。
10. 集群配套运维组件部署(上线同步搭建)
- 监控体系 Prometheus
- metrics-server:提供CPU内存指标,支撑HPA自动扩缩容;
- 采集指标:节点、容器、apiserver、etcd、GPU、中间件;
- 告警规则:节点宕机、Pod重启、CPU/内存过高、PVC满、GPU故障。
- Ingress 七层网关
Nginx-Ingress,统一入口,SSL证书管理、限流、黑白名单; - 备份组件
etcd定时快照备份、PVC定时快照、容器业务数据定时导出; - 自动扩缩容 HPA
基于CPU/内存/自定义QPS指标弹性伸缩; - 集群日志 EFK
统一收集容器、节点、组件日志,故障检索。
11. 上线前验收部署检查清单
- 系统层面:swap关闭、内核参数全部生效、cgroup驱动统一systemd;
- 控制平面:etcd独立SSD、apiserver高可用LB、审计日志开启;
- 网络:Calico正常、CoreDNS双副本、pod/service网段无冲突、nslookup解析正常;
- 存储:CSI StorageClass就绪、PV可正常挂载删除;
- 算力:GPU节点DevicePlugin正常,可调度nvidia.com/gpu资源;
- 安全:RBAC最小权限、NetworkPolicy隔离、Pod非root运行;
- 业务规范:所有Pod配置requests/limits、健康探针、日志标准输出;
- 运维配套:监控告警打通、etcd自动备份、日志收集正常;
- 高可用验证:单Master/单Worker节点宕机,集群调度、业务不受影响。
12. 部署高频致命坑总结
- 未关闭swap,kubelet OOM逻辑错乱,容器随机被杀;
- containerd与kubelet cgroup驱动不一致,资源限制失效;
- etcd共用系统盘,写入IO阻塞整个集群API;
- 未配置节点资源预留,业务打满内存导致kubelet/apiserver崩溃;
- CoreDNS单副本,DNS故障所有业务无法解析域名;
- Pod不配置limits,单个容器耗尽节点资源引发连锁故障;
- 容器使用root权限运行,存在逃逸安全风险;
- 不做NetworkPolicy,多业务完全互通,故障扩散、数据泄露;
- StatefulSet使用普通EmptyDir,节点重建丢失业务持久数据;
- 云主机安全组放开集群端口给全网,存在入侵风险。