Kubernetes 速查手册

速查向 · 核心概念、Pod 与控制器、网络与 Service、存储、调度、生产实践与排障

1. 架构与核心组件

1.1 整体架构

K8s 是 Master(控制面)+ Node(工作节点) 的主从架构。

组件所在职责
kube-apiserverMaster唯一入口,所有请求都走它;认证/鉴权/准入控制;读写 etcd
etcdMaster分布式 KV 存储,保存集群全部状态
kube-schedulerMaster为新 Pod 选择合适节点(预选 + 优选)
kube-controller-managerMaster运行各种控制器,调谐期望状态与实际状态
cloud-controller-managerMaster对接云厂商(LB、存储)
kubeletNode管理本节点 Pod 生命周期,调用 CRI 起容器,上报状态
kube-proxyNode实现 Service 的负载均衡与转发规则(iptables/IPVS)
容器运行时Nodecontainerd / CRI-O(Docker 已被弃用)
核心设计哲学:声明式 API + 控制器循环(Reconcile)——你声明期望状态,控制器不断把实际状态拉齐到期望状态。

1.2 一次 Pod 创建的完整流程

  1. kubectl apply → apiserver 认证鉴权 → 写入 etcd(Pod 处于 Pending)。
  2. scheduler 监听发现未调度的 Pod → 执行预选(过滤不合格节点)和优选(打分)→ 绑定到节点。
  3. 目标节点的 kubelet 监听到绑定 → 调用 CRI 拉镜像、创建容器。
  4. 调用 CNI 分配网络,CSI 挂载存储。
  5. 状态上报 apiserver → Pod 变 Running。

2. Pod 与工作负载

2.1 Pod 基础

2.2 探针 Probe

探针作用失败后果
livenessProbe存活检测重启容器
readinessProbe就绪检测从 Service Endpoints 摘除,不接流量
startupProbe启动检测成功前禁用其他探针(适合慢启动应用)

检查方式:exec(执行命令)、httpGet、tcpSocket、grpc。

常见坑:livenessProbe 超时时间设太短会导致容器反复重启;慢启动应用应加 startupProbe。

2.3 生命周期与重启策略

2.4 控制器对比(高频)

控制器特点适用
Deployment管理 ReplicaSet,支持滚动更新/回滚;Pod 有随机名无状态服务
ReplicaSet保证 Pod 副本数;一般由 Deployment 管理底层,少直接用
StatefulSet稳定网络标识(pod-0/1/2)、稳定存储、有序部署/扩缩有状态(DB、MQ)
DaemonSet每个(或指定)节点跑一个 Pod日志采集、监控 Agent
Job跑完即结束的一次性任务批处理
CronJob按 cron 定时创建 Job定时任务
易混点:修改 Deployment 的 Pod 模板会触发新的 ReplicaSet(滚动更新);kubectl rollout undo 就是切回旧 RS。

2.5 Deployment 滚动更新

3. Service 与网络

3.1 Service 四种类型

类型说明
ClusterIP默认,仅集群内可访问的虚拟 IP
NodePort每个节点开一个端口(30000-32767)暴露服务
LoadBalancer云厂商提供外部 LB(需 Cloud Provider)
ExternalNameDNS CNAME 映射到外部域名

3.2 Service 实现原理

3.3 DNS 解析

3.4 Ingress

3.5 CNI 与网络模型

4. 配置与存储

4.1 ConfigMap 与 Secret

4.2 Volume 类型

类型生命周期说明
emptyDir随 Pod 销毁同 Pod 容器间共享临时数据
hostPath随宿主机挂载节点目录,生产慎用
ConfigMap/Secret-配置文件挂载
PersistentVolume独立于 Pod持久化存储

4.3 PV / PVC / StorageClass

常见坑:RWO 不等于"单 Pod",而是单节点可读写;同一节点的多个 Pod 可同时挂载。

5. 调度与资源

5.1 requests 与 limits

为什么 CPU 是压缩资源、内存不是?CPU 可被限流共享,内存不可压缩,超了只能杀。

5.2 高级调度

机制作用
nodeSelector按节点标签简单选择
nodeAffinity节点亲和(required/preferred),表达能力更强
podAffinity / podAntiAffinityPod 与 Pod 靠近 / 远离(同拓扑域)
Taint & Toleration污点是节点拒绝 Pod,容忍是 Pod 声明可接受
TopologySpreadConstraints按拓扑域(如可用区)均匀分布 Pod

污点效果:NoSchedule(不调度新的)、PreferNoSchedule(尽量不)、NoExecute(驱逐已有 Pod)。

5.3 驱逐与抢占

6. 安全与生产实践

6.1 RBAC

6.2 HPA / VPA

6.3 常见排障

现象常见原因
Pending资源不足、无匹配节点、亲和/污点不满足、PVC 未绑定
ImagePullBackOff镜像名错、私有仓库无 imagePullSecret、网络不通
CrashLoopBackOff应用启动失败、配置错误、liveness 探针误杀
OOMKilled内存超 limits、内存泄漏
Evicted节点资源压力驱逐
Terminating 卡住finalizer 未处理、preStop 卡住、节点失联

排障命令顺序:kubectl get pod -o wide → describe pod(看 Events)→ logs [-p] → exec 进容器 → 看节点 describe node。

7. 速查清单

主题一句话答案
核心组件apiserver / etcd / scheduler / controller-manager + kubelet / kube-proxy
设计哲学声明式 API + 控制器调谐(Reconcile)
Pod 创建流程apiserver 写 etcd → scheduler 绑定 → kubelet 起容器
Pause 容器持有 Pod 网络命名空间,业务容器加入
三种探针liveness 重启 / readiness 摘流量 / startup 保护慢启动
Deployment vs StatefulSet无状态滚动更新 vs 有状态稳定标识有序
DaemonSet每节点一个,日志/监控 Agent
Service 原理Label 选 Pod 生成 Endpoints,kube-proxy 做转发
ClusterIP虚拟 IP,仅存在转发规则,ping 不通
IPVS vs iptablesIPVS 哈希表性能好,大规模首选
Headless ServiceclusterIP None,DNS 返回所有 Pod IP
Ingress七层路由规则,需 Ingress Controller 生效
PV / PVC / SC存储资源 / 存储请求 / 动态供给模板
requests vs limits调度依据 vs 运行上限;CPU 限流,内存 OOM
QoSGuaranteed > Burstable > BestEffort
污点与容忍节点拒绝 vs Pod 接受
HPA按指标扩缩 Pod 数量
Secret 安全仅 base64 编码,非加密,需 etcd 加密