KUBERNETES · 容器编排 / 集群管理

Kubernetes速查

从控制面组件分工、工作负载选型,到 Service 暴露方式、存储配置体系,再到滚动发布与 Pod 异常状态排查,容器编排方向的 42 条高频要点一张表收齐,随查随用。

42条速查 6大主题 持续更新

📖 速查表

点击展开各小节

🏗️ 架构与核心概念
组件 / 概念一句话说明要点
kube-apiserver 集群唯一入口:所有读写都经它认证、鉴权、准入后写入 etcd,组件之间互不直连 一切操作的门户
etcd 分布式 KV 存储,集群唯一的「事实来源」,保存全部对象与状态 务必定期备份与监控磁盘 丢了=集群没了
scheduler 调度器:为未绑定节点的 Pod 预选 + 打分(资源、亲和性、污点容忍),选出最合适的节点 只做决定不执行
controller-manager 控制器集合:持续对比期望状态与实际状态,副本不足就补 Pod、节点宕机就迁移 持续调谐收敛
kubelet 节点上的「Pod 管家」:接收调度结果、调用运行时拉起容器、上报状态并执行探针 每个节点必跑
kube-proxy 节点上维护 Service 转发规则(iptables / IPVS),实现集群内服务发现与负载均衡 大规模集群建议 IPVS 模式 性能更优
Container Runtime 容器运行时(containerd 等):真正负责拉取镜像、创建与销毁容器 crictl 调试运行时 K8s 1.24+ 仅 CRI
Pod 与生命周期 最小调度单元,一个或多个容器共享网络与存储;阶段:Pending → Running → Succeeded / Failed liveness 存活 / readiness 就绪 / startup 启动三类探针决定重启与摘流 探针配好少一半故障
🚀 工作负载
工作负载适用场景要点
Deployment 无状态应用标配:管理 ReplicaSet,实现声明式副本数、滚动更新与快速回滚 Web 服务、API 服务首选 最常用
StatefulSet 有状态应用(DB / MQ):提供稳定的 Pod 名与网络标识(pod-0、pod-1…),按序部署与缩容 配 headless Service 与 PVC 使用 稳定标识
DaemonSet 每个节点固定跑一个 Pod:日志采集、监控 Agent、CNI 插件等节点级守护进程 新增节点自动部署 节点级代理
Job 跑完即退的批处理任务:用 completions 控制执行次数、parallelism 控制并发数 数据迁移、离线计算
CronJob 按 cron 表达式定时拉起 Job:注意并发策略(Allow / Forbid / Replace)与错过调度的补偿 concurrencyPolicy 防任务重叠
🌐 网络与 Service
类型 / 组件说明要点
ClusterIP 默认类型:分配集群内部虚拟 IP,仅集群内可达,用于服务间互访 内部服务默认选择 最常用
NodePort 在每个节点开一个端口(默认 30000~32767)把服务暴露到集群外 测试演示用,生产不推荐 端口难管理
LoadBalancer 云厂商负载均衡器直接指向 Service,是对外的四层入口 通常与 Ingress 配合做七层 云环境标配
ExternalName 返回 CNAME 域名,把外部服务映射为集群内的名字,无任何代理转发 外部依赖「改名」接入 纯 DNS
Ingress / Controller Ingress 是七层路由规则(按域名 / 路径转发),Ingress Controller(如 ingress-nginx)才是真正执行者 只建规则不装 Controller 不生效 常见误区
CoreDNS 集群内 DNS:Service 名解析为 ClusterIP;跨命名空间需用 FQDN svc.ns.svc.cluster.local 服务发现基石
NetworkPolicy Pod 级网络防火墙:默认全通,按标签选择器定义允许的进出流量,需 CNI 支持 零信任网络的起点 最小化开放
💾 存储与配置
对象 / 用法说明要点
Volume Pod 级存储抽象:emptyDir 临时目录随 Pod 消亡;hostPath 挂节点目录,有安全风险慎用 emptyDir 适合缓存 / 共享临时文件
PV 持久卷 集群级的实际存储资源,独立于 Pod 生命周期,通过 accessModes 与容量描述 存储的「供给侧」 集群资源
PVC 持久卷声明 用户对存储的申请声明,与 PV 绑定后挂载进 Pod;把「要多少」和「怎么给」解耦 声明与实现解耦
StorageClass 存储类模板:PVC 按它自动动态供给 PV,可指定回收策略与绑定模式 reclaimPolicy: Retain 防误删数据 动态供给
ConfigMap · env 注入 键值注入为环境变量,读取简单;但 env 形式不会随 ConfigMap 更新而热更新,需重启 Pod env 不热更新
ConfigMap · 文件挂载 以文件形式挂载进容器,ConfigMap 更新后可自动同步(kubelet 周期性刷新,有延迟);子路径挂载不热更新 subPath 会失去热更新 配置易踩坑
Secret 存放敏感信息(base64 编码、并非加密);类型有 Opaque、TLS、docker-registry 等 建议开 etcd 加密 + 最小 RBAC 编码≠加密
🔄 发布与回滚
主题 / 命令说明要点
maxSurge / maxUnavailable 滚动更新两个核心参数:maxSurge 控制超出期望副本的新 Pod 数(发布速度),maxUnavailable 控制允许不可用的旧 Pod 数(可用性底线) maxSurge=1, maxUnavailable=0 最稳 不降可用性
kubectl rollout status 看发布进度、history 看版本列表、undo 回滚上一版、undo --to-revision=N 回滚到指定版本 rollout status 卡住说明探针不过
回滚前提 revisionHistoryLimit 决定保留多少历史版本;镜像 tag 必须每次变化,用 latest 会分不清版本 禁用 latest
金丝雀发布 新旧 Deployment 打不同版本标签、Service 按 label 同时选中,或由网关 / Ingress 按权重切流,观察指标后逐步放量 小流量 → 观察 → 全量 按流量或版本标签
Helm 一句话定位 K8s 的包管理器:Chart 把一套 YAML 模板化,Release 版本化管理,一条命令完成安装、升级、回滚、卸载 helm upgrade --install 复杂应用分发
🩺 排错命令

排错链路固定四步:get 看状态 → describe 看 Events → logs 看日志 → exec 进容器验证,先广后深逐步缩小范围。

命令 / 异常状态说明常用组合 / 原因
kubectl get 看资源列表与状态,排错的起点 get pods -o wide -w 看节点与 IP 并持续监听
kubectl describe 看对象详情与 Events,镜像拉取失败、调度失败、探针失败原因都在这里 排错第一步 Events 是线索
kubectl logs 看容器日志:-f 跟随、-c 指定多容器中的某一个、--previous 看崩溃前的日志 logs -f --previous 崩溃前现场
kubectl exec 进入容器内执行命令排查:进程、端口、网络连通性、文件内容 exec -it pod -- sh
kubectl cp / top cp 在本地与容器间拷贝文件;top pod / top node 看资源实际占用 top pods --sort-by=cpu 找吃资源的 Pod
kubectl events 按时间线看集群事件,配合排序找最近发生的异常 get events --sort-by=.lastTimestamp
Pending Pod 无法调度:集群资源不足、污点不容忍、nodeSelector 不匹配、PVC 未绑定 describe 看 FailedScheduling 具体原因 卡在调度
ImagePullBackOff 镜像拉取失败:tag 写错、私有仓库未配 imagePullSecrets、仓库地址或网络不可达 核对 tag 与 docker-registry secret
CrashLoopBackOff 容器反复启动即崩溃:应用报错退出、配置或依赖缺失、存活探针过严被反复杀死 先看 logs --previous 定位首错 退避重启
OOMKilled / Evicted OOMKilled:内存超过 limits 被内核强杀,调大 limits 或排查泄漏;Evicted:节点磁盘 / 内存压力触发驱逐,清理节点并合理设置 QoS kubectl describe 看 Reason 字段 资源治理