K8s 组件
Kubernetes 组件全解析:生产环境架构师必须掌握的运维蓝图
真实生产警示:某金融公司曾因误删 etcd 数据导致集群瘫痪8小时!本文将揭秘 K8s 核心组件的协作机制,并给出生产级加固方案。
一、Kubernetes 组件全景图(生产集群典型架构)
# 生产环境多控制平面架构
控制节点 x3(高可用):
- kube-apiserver(负载均衡接入)
- etcd(集群模式)
- kube-controller-manager
- kube-scheduler
工作节点 xN:
- kubelet
- kube-proxy
- containerd
- Calico CNI插件
基础设施层:
- CoreDNS
- Metrics Server
- Ingress Controller
二、核心组件深度剖析
2.1 控制平面——集群的"大脑"
-
kube-apiserver(集群总闸)
- 生产特性:
- 唯一与 etcd 直接通信的组件
- 支持横向扩展(多副本+负载均衡)
- 审计日志需开启(安全合规要求)
# 查看apiserver状态 kubectl get componentstatuses - 生产特性:
-
etcd(集群记忆库)
- 生产加固方案:
- 至少3节点集群(推荐SSD磁盘)
- 定期快照备份(使用etcdctl工具)
- TLS双向认证
# 紧急恢复命令示例 ETCDCTL_API=3 etcdctl snapshot restore backup.db --data-dir /var/lib/etcd - 生产加固方案:
-
kube-controller-manager(自动化管家)
- 核心控制器:
- Node控制器:监控节点健康状态
- Deployment控制器:管理滚动更新
- ServiceAccount控制器:RBAC权限管理
- 核心控制器:
-
kube-scheduler(智能调度器)
- 高级调度策略:
# Pod亲和性示例 affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: gpu-type operator: In values: ["a100"]
- 高级调度策略:
2.2 工作节点——集群的"肌肉"
-
kubelet(节点管家)
- 关键功能:
- 定期向apiserver上报节点状态
- 监控Pod资源使用(与cAdvisor集成)
- 执行Pod生命周期管理
- 生产问题排查:
journalctl -u kubelet -f # 查看实时日志
- 关键功能:
-
kube-proxy(网络指挥官)
- 流量转发模式对比:
模式 性能 规则更新延迟 适用场景 iptables 中 高 小规模集群 IPVS 高 低 1000+服务场景
- 流量转发模式对比:
-
容器运行时(containerd 最佳实践)
- 推荐配置:
# /etc/containerd/config.toml [plugins."io.containerd.grpc.v1.cri"] sandbox_image = "registry.k8s.io/pause:3.6" [metrics] address = "0.0.0.0:1338" # 暴露监控指标
- 推荐配置:
2.3 关键附加组件——集群的"器官"
-
CoreDNS(集群DNS中枢)
- 生产调优:
# 配置示例 Corefile: | .:53 { cache 30 reload 10s forward . /etc/resolv.conf }
- 生产调优:
-
CNI网络插件(集群血管)
- 选型指南:
- Calico:适合需要网络策略的场景
- Flannel:简单场景首选
- Cilium:基于eBPF的高性能方案
- 选型指南:
-
Ingress Controller(流量网关)
- 生产方案:
# Nginx Inress 金丝雀发布 kubectl annotate ingress my-ingress \ nginx.ingress.kubernetes.io/canary="true" \ nginx.ingress.kubernetes.io/canary-weight="10%"
- 生产方案:
三、生产环境运维红宝书
3.1 组件监控指标清单
| 组件 | 关键监控指标 | 告警阈值 |
|---|---|---|
| etcd | 写入延迟、存储大小 | >200ms 或 >8GB |
| kube-apiserver | 请求延迟、错误率 | >500ms 或 >5% |
| kubelet | Pod启动耗时、节点CPU/Mem | >30s 或 >90% |
3.2 高可用配置模板
# kube-controller-manager 高可用配置
apiVersion: v1
kind: Pod
metadata:
name: kube-controller-manager
spec:
containers:
- command:
- --leader-elect=true # 启用领导者选举
- --controllers=*,bootstrapsigner,tokencleaner
3.3 版本升级策略
- 先升级kube-apiserver(控制平面)
- 滚动升级控制平面组件
- 最后升级工作节点(逐批灰度)
四、常见生产故障案例库
-
案例1:etcd存储空间爆满
- 现象:集群操作超时,API响应503
- 应急方案:
# 清理历史版本 ETCDCTL_API=3 etcdctl compact $(date +%s) # 整理碎片 ETCDCTL_API=3 etcdctl defrag
-
案例2:kubelet进程内存泄漏
- 排查工具:
# 分析内存profile curl -sSk https://localhost:10250/debug/pprof/heap > heap.out go tool pprof heap.out
- 排查工具:
结语:理解Kubernetes组件原理如同掌握人体解剖学。建议在生产环境中:
- 为控制平面节点配置独立物理机
- 定期执行组件健康检查(推荐kube-bench)
- 建立组件级灾备方案(如etcd跨机房容灾)
下期预告:《百万级集群调优实战:从组件参数到内核优化的完整指南》
浙公网安备 33010602011771号