Kubernetes 架构与生态:从云原生到 AI 原生

来源:Jimmy Song《Kubernetes 基础教程》,基于 K8s v1.31+,在线阅读 涵盖 23 个主题、200+ 篇文章,本文提取核心知识框架。


一、架构:Kubernetes 的骨架

从 Borg 到 K8s。 Google 内部跑了 15 年的 Borg 系统(BorgMaster + Scheduler + Borglet)是 K8s 的原型。

控制面(Control Plane)

  • kube-apiserver — 唯一入口,RESTful API,所有操作经此
  • etcd — 分布式 KV 存储,集群唯一状态源(使用 Raft 共识)
  • kube-scheduler — 监听未调度 Pod,按资源/亲和性/约束分配节点
  • kube-controller-manager — 运行各类控制器(Deployment、Node、Namespace 等),通过控制循环维持期望状态

工作节点(Worker Node)

  • kubelet — 节点代理,确保 Pod 中容器按 spec 运行
  • kube-proxy — 维护 Service 的网络规则(iptables/IPVS)
  • 容器运行时 — containerd(主流)、CRI-O、Docker(已弃用)

设计理念

  • 声明式 API — 描述"想要什么"而非"做什么",系统自动趋近期望状态
  • 控制循环(Reconciliation Loop) — 持续观测 vs 期望,自动修正
  • 松耦合 + 可扩展 — 每个组件可独立替换和扩展

二、三大开放接口

K8s 通过 CRI/CNI/CSI 三个接口解耦核心与具体实现:

| 接口 | 解耦什么 | 常见实现 | |------|---------|---------| | CRI(容器运行时接口) | 容器执行 | containerd, CRI-O, gVisor | | CNI(容器网络接口) | Pod 网络 | Flannel, Calico, Cilium | | CSI(容器存储接口) | 持久存储 | 各云厂商 driver, 本地存储 |


三、Pod:最小调度单元

Pod 不是容器,是容器的"沙箱"。 同一 Pod 内容器共享网络命名空间和存储卷。

关键概念

  • Init 容器 — 按顺序执行,完成后才启动主容器(用于初始化)
  • Pause 容器 — Pod 的"根容器",持有网络命名空间,其他容器加入
  • Sidecar 容器 — 辅助容器,与主容器共生命周期(日志采集、代理等)
  • 生命周期 — Pending → Running → Succeeded/Failed,支持 PostStart/PreStop Hook
  • 探针 — Liveness(存活)、Readiness(就绪)、Startup(启动)三类
  • PDB(PodDisruptionBudget) — 保证滚动更新/驱逐时最少可用副本数

QoS 等级

  • Guaranteed — CPU/内存都设了 requests=limits(最高优先级)
  • Burstable — 至少一个资源设了 requests 或 limits
  • BestEffort — 啥都没设(最先被驱逐)

四、控制器:自动化引擎

| 控制器 | 用途 | 关键特性 | |--------|------|---------| | Deployment | 无状态应用 | 滚动更新、回滚、ReplicaSet 管理 | | StatefulSet | 有状态应用 | 稳定网络标识、有序部署/终止、PVC 绑定 | | DaemonSet | 每节点一个 Pod | 日志采集、监控 Agent、网络插件 | | Job | 一次性任务 | 完成即退出,支持并行和重试 | | CronJob | 定时任务 | Cron 表达式调度 | | HPA | 自动扩缩容 | 基于 CPU/内存/自定义指标 | | ReplicaSet | 副本管理 | Deployment 底层使用,一般不直接操作 |

Ingress 控制器

  • 将集群内 Service 暴露给外部 HTTP/HTTPS 流量
  • 常见:Nginx Ingress、Traefik、Envoy-based
  • 趋势:正被 Gateway API 替代

准入控制器(Admission Controller)

  • 请求到达 API Server 后、持久化前的拦截钩子
  • Mutating — 可修改请求(如自动注入 sidecar)
  • Validating — 只校验不修改(如策略检查)

五、服务发现与路由

Service

  • 为一组 Pod 提供稳定 IP 和 DNS 名
  • 类型:ClusterIP(默认)、NodePort、LoadBalancer、ExternalName
  • 通过 label selector 自动关联 Pod

Ingress → Gateway API 演进

  • Ingress — L7 路由(HTTP/HTTPS),功能有限,注解堆砌
  • Gateway API — 新标准,角色分离(集群管理员 vs 应用开发者),支持 TCP/UDP/gRPC,可扩展
  • Gateway API Inference Extension — 专为 AI 推理设计的扩展,支持模型感知路由

六、身份与权限

ServiceAccount

  • Pod 级别的身份凭证,自动挂载 token 到 /var/run/secrets/

RBAC(基于角色的访问控制)

  • Role/ClusterRole — 定义权限规则
  • RoleBinding/ClusterRoleBinding — 绑定角色到用户/组/SA
  • 最小权限原则,避免使用 cluster-admin

SPIFFE/SPIRE

  • 工作负载身份的标准框架
  • 通过 SVID(X.509 证书或 JWT)实现跨集群、跨平台身份验证

七、网络方案

| 方案 | 特点 | 适用场景 | |------|------|---------| | Flannel | 简单 Overlay(VXLAN),开箱即用 | 小型集群、入门 | | Calico | BGP 路由,支持 NetworkPolicy,高性能 | 生产环境、安全要求高 | | Cilium | 基于 eBPF,可观测性极强,支持 L3-L7 策略 | 现代 K8s、Service Mesh 替代 |

NetworkPolicy

  • 控制 Pod 间网络流量( ingress/egress 规则)
  • 需 CNI 插件支持(Calico/Cilium 支持,Flannel 不支持)

八、存储

配置管理

  • ConfigMap — 非敏感配置,支持环境变量/文件挂载,支持热更新(mounted 文件自动刷新)
  • Secret — 敏感数据(Base64 编码,etcd 加密存储),类型丰富(docker-registry、tls 等)

卷与持久化

  • Volume — Pod 级别,生命周期随 Pod
  • PV/PVC — 集群级持久卷 + 声明,解耦存储供给与消费
  • StorageClass — 动态供给,按需创建 PV
  • 本地持久化存储 — 直接用节点本地盘,性能最佳但调度受限

九、安全

  • TLS Bootstrap — 节点自动申请证书,减少手动操作
  • Kubelet 认证授权 — 支持证书/Token 认证
  • IP 伪装代理 — 控制节点 IP 伪装行为
  • 最佳实践:RBAC 最小权限、NetworkPolicy 隔离、Pod 安全标准(Restricted/Baseline/Privileged)、Secret 加密、审计日志

十、扩展 K8s

这是 K8s 最强大的设计——"可扩展而不修改"。

API 扩展

  • CRD(自定义资源定义) — 最常用,声明式定义新资源类型
  • APIService — 聚合外部 API Server(如 metrics-server)
  • 准入 Webhook — Mutating/Validating,实现策略注入和校验

控制器扩展

  • Operator 模式 — CRD + 自定义控制器,封装运维知识
  • Kubebuilder — Go 框架,快速构建 CRD + Controller
  • Operator SDK — 支持Go/Ansible/Helm,集成 OLMI生命周期

调度器扩展

  • Scheduler Framework — 可插拔调度插件(Filter/Score/Bind 等阶段)
  • DRA(动态资源分配) — 替代 Device Plugin 的新机制
  • GPU 调度 — 通过 Device Plugin 或 DRA 集成 GPU 资源

十一、可观测性

三支柱:指标(Metrics)、日志(Logs)、链路追踪(Traces)

  • Prometheus — 指标采集与告警,事实标准
  • OpenTelemetry — 统一采集框架,覆盖 Logs/Metrics/Traces
  • Kiali — Service Mesh(Istio)可观测性面板
  • Grafana — 仪表盘和可视化
  • 告警 — Alertmanager 处理 Prometheus 告警,去重/分组/路由

十二、DevOps 实践

CI/CD

  • ArgoCD — GitOps 模式,声明式同步 Git → K8s
  • Argo Rollouts — 渐进式发布(金丝雀/蓝绿),配合指标自动升降级

包管理

  • Helm — K8s 的包管理器,Chart 模板化部署
  • Kustomize — 原生 K8s 配置管理,overlay 机制(无需模板)

基础设施即代码

  • Terraform — 多云基础设施管理
  • Volcano — 批调度系统,适用于 AI/ML 训练任务

十三、多集群管理

  • Karmada — 多集群编排,工作负载跨集群调度,联邦资源管理
  • k0rdent — 企业级多集群管理平台
  • 多集群服务 API — 跨集群服务发现与连通

十四、服务网格

服务网格 = 基础设施层 + 代理 + 控制面,解耦业务逻辑与通信治理。

  • Envoy — 高性能 L4/L7 代理,xDS 动态配置
  • Istio — 最流行的 Service Mesh 实现(Envoy sidecar + istiod 控制面)
  • 部署模式 — Sidecar(传统)vs Ambient(无 sidecar,基于 ztunnel 节点级代理)
  • 核心能力 — 流量管理(路由/重试/故障注入)、安全(mTLS)、可观测性

十五、Serverless

  • Knative — K8s 原生 Serverless 框架(Serving + Eventing)
    • Serving — 自动扩缩到零、流量路由、版本管理
    • Eventing — 事件驱动架构,Broker/Trigger 模型
  • OpenFaaS — 函数即服务,简单易上手
  • Kubernetes Patterns — 设计模式集合(ConfigMap/Secret/Init Container 等)

十六、边缘计算

| 项目 | 特点 | |------|------| | K3s | 轻量 K8s(单二进制),适合边缘/ IoT | | KubeEdge | 云边协同,离线自治,MQTT 通信 | | OpenYurt | 阿里出品,无缝扩展 K8s 到边缘 | | SuperEdge | 腾讯出品,边缘自治 + 分布式节点 |


十七、云原生

  • 云原生定义(CNCF) — 容器 + 服务网格 + 微服务 + 不可变基础设施 + 声明式 API
  • CNCF — 云原生计算基金会,K8s/Prometheus/Envoy 等毕业项目
  • 后 K8s 时代 — Serverless、Service Mesh、Platform Engineering 正在重新定义云原生

十八、AI 原生(重点新增章节)

K8s 正在成为 AI 基础设施的标准底座。

核心方向

  • AI Gateway — 模型路由、负载均衡、限流、A/B 测试(基于 Gateway API)
  • 大模型部署 — vLLM(PagedAttention 高吞吐推理)、模型并行、量化
  • 推理优化 — Continuous Batching、Speculative Decoding、KV Cache 优化
  • GPU 调度 — HAMi(异构算力虚拟化)、Device Plugin、DRA、GPU 共享/切分
  • 工作负载调度 — Volcano 批调度、Gang Scheduling、拓扑感知调度
  • 可观测性 — GPU 利用率、推理延迟、队列深度、模型级指标
  • 安全 — 模型访问控制、推理审计、数据隔离

关键项目

  • vLLM — 高性能 LLM 推理引擎
  • HAMi — GPU 虚拟化(vGPU),支持 NVIDIA/AMD/Hygon
  • Gateway API Inference Extension — 推理感知流量路由

速查:kubectl 常用命令

# 资源查看
kubectl get pods/svc/deploy/nodes -A
kubectl describe pod <name>
kubectl logs <pod> [-c container] [-f]

# 资源操作
kubectl apply -f manifest.yaml
kubectl delete -f manifest.yaml
kubectl edit deploy <name>

# 调试
kubectl exec -it <pod> -- /bin/sh
kubectl port-forward svc/<name> 8080:80
kubectl debug node/<name> -it --image=busybox

# 扩缩容
kubectl scale deploy <name> --replicas=3
kubectl autoscale deploy <name> --min=2 --max=10 --cpu-percent=80

# 集群信息
kubectl cluster-info
kubectl top nodes/pods
kubectl get events --sort-by='.lastTimestamp'

知识图谱

Kubernetes
├── 架构层:Control Plane + Worker Node + etcd
├── 抽象层:Pod → Controller(Deploy/Stateful/Daemon)→ Service → Ingress/Gateway
├── 扩展层:CRD + Operator + Webhook + Scheduler Plugin
├── 平台层:Helm + ArgoCD + Terraform + Service Mesh
├── 运维层:监控(Prometheus) + 日志(ELK/Loki) + 追踪(OpenTelemetry)
└── 未来层:AI 原生(GPU 调度/vLLM/AI Gateway)+ 边缘 + Serverless

本文为 Jimmy Song Kubernetes Handbook 的精炼总结,原文 200+ 篇约 34 万字。如需深入某个主题,访问 在线教程 或 GitHub rootsongjc/kubernetes-handbook