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 字段 资源治理 |