Kubernetes 全景概览
什么是 Kubernetes
Kubernetes(K8s)是 Google 开源的容器编排系统,源自内部的 Borg 系统,2014 年开源,现由 CNCF 托管。它解决了大规模容器化应用的部署、扩缩容、自愈、服务发现等核心问题。
核心价值:声明式 API + 控制循环(Reconcile Loop)= 自动化运维
整体架构
┌─────────────────────────────────────────────────────────┐
│ Control Plane(控制平面) │
│ ┌──────────────┐ ┌──────────┐ ┌────────────────────┐ │
│ │ API Server │ │ etcd │ │ Controller Manager │ │
│ │ (核心网关) │ │ (状态存储)│ │ (控制循环引擎) │ │
│ └──────────────┘ └──────────┘ └────────────────────┘ │
│ ┌──────────────┐ ┌──────────────────────────────────┐ │
│ │ Scheduler │ │ Cloud Controller Manager │ │
│ │ (调度决策) │ │ (云厂商集成) │ │
│ └──────────────┘ └──────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
│ API
┌─────────────────────────────────────────────────────────┐
│ Worker Node(工作节点) │
│ ┌──────────────┐ ┌──────────────┐ ┌───────────────┐ │
│ │ kubelet │ │ kube-proxy │ │ Container │ │
│ │ (节点代理) │ │ (网络代理) │ │ Runtime(CRI) │ │
│ └──────────────┘ └──────────────┘ └───────────────┘ │
│ ┌─────────────────────────────────────────────────────┐│
│ │ Pods(容器组) ││
│ └─────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────┘核心组件职责
| 组件 | 职责 | 关键特性 |
|---|---|---|
| API Server | 集群唯一入口,RESTful API 网关 | 认证、授权、准入控制 |
| etcd | 分布式 KV 存储,保存集群所有状态 | Raft 共识、强一致性 |
| Scheduler | 将 Pod 调度到合适的 Node | 过滤 + 打分两阶段 |
| Controller Manager | 运行各种控制器,驱动状态收敛 | Deployment/RS/Node 等控制器 |
| kubelet | 节点代理,管理 Pod 生命周期 | 与 CRI/CNI/CSI 交互 |
| kube-proxy | 维护 Service 的网络规则 | iptables/ipvs 模式 |
核心设计理念
1. 声明式 API
用户描述期望状态,K8s 负责驱动实际状态向期望状态收敛:
yaml
# 声明:我要 3 个 nginx 副本
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3 # 期望状态
selector:
matchLabels:
app: nginx
template:
spec:
containers:
- name: nginx
image: nginx:1.252. 控制循环(Reconcile Loop)
观察(Observe)→ 分析差异(Diff)→ 执行动作(Act)→ 循环每个 Controller 都在不断执行这个循环,确保实际状态 = 期望状态。
3. 标签与选择器
标签(Labels)是 K8s 中最核心的关联机制:
yaml
# Pod 打标签
metadata:
labels:
app: nginx
version: v1.25
env: production
# Service 通过选择器关联 Pod
selector:
app: nginx
env: production4. 资源模型
K8s 中一切皆资源(Resource),通过 GVK(Group/Version/Kind)唯一标识:
apps/v1/Deployment
core/v1/Pod
networking.k8s.io/v1/IngressAPI 请求流程
kubectl apply -f deploy.yaml
│
▼
API Server
├── 认证(Authentication):谁在请求?
├── 授权(Authorization):有没有权限?
├── 准入控制(Admission):请求合法吗?
└── 写入 etcd
│
▼
Controller Manager 监听到变化
│
▼
Scheduler 分配 Node
│
▼
kubelet 拉起容器对象元数据结构
每个 K8s 对象都有统一的结构:
yaml
apiVersion: apps/v1 # GV
kind: Deployment # Kind
metadata:
name: my-app # 名称
namespace: default # 命名空间
labels: {} # 标签
annotations: {} # 注解
resourceVersion: "12345" # 乐观锁版本
uid: "abc-123" # 唯一 ID
spec: # 期望状态(用户定义)
...
status: # 实际状态(系统维护)
...命名空间隔离
bash
# 查看所有命名空间
kubectl get namespaces
# 在指定命名空间操作
kubectl get pods -n kube-system
# 跨命名空间查看
kubectl get pods --all-namespaces学习路径建议
核心架构 → 工作负载 → 网络 → 存储
↓
client-go → Operator 开发
↓
安全 → 可观测性 → 服务网格
↓
CI/CD → 多集群 → Serverless版本与发布节奏
- 每年发布 3 个小版本(约每 4 个月一次)
- 每个版本维护约 14 个月
- 当前稳定版:v1.30+(2024)