Kubernetes 架构
学习目标
- 理解 Kubernetes 集群的整体架构
- 掌握 Control Plane 和 Worker Node 的职责
- 了解各组件之间的交互关系
核心概念
整体架构
┌─────────────────────────────────────────────────────────────┐
│ Kubernetes 集群 │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ Control Plane (Master) │ │
│ │ ┌─────────┐ ┌─────────┐ │ │
│ │ │ API │ │etcd │ │ │
│ │ │ Server │ │ │ │ │
│ │ └─────────┘ └─────────┘ │ │
│ │ ┌─────────┐ ┌─────────┐ │ │
│ │ │Scheduler│ │Controller│ │ │
│ │ │ │ │ Manager │ │ │
│ │ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Worker Node 1│ │ Worker Node 2│ │ Worker Node N│ │
│ │ ┌──────────┐ │ │ ┌──────────┐ │ │ ┌──────────┐ │ │
│ │ │ kubelet │ │ │ │ kubelet │ │ │ │ kubelet │ │ │
│ │ └──────────┘ │ │ └──────────┘ │ │ └──────────┘ │ │
│ │ ┌──────────┐ │ │ ┌──────────┐ │ │ ┌──────────┐ │ │
│ │ │kube-proxy│ │ │ │kube-proxy│ │ │ │kube-proxy│ │ │
│ │ └──────────┘ │ │ └──────────┘ │ │ └──────────┘ │ │
│ │ ┌──────────┐ │ │ ┌──────────┐ │ │ ┌──────────┐ │ │
│ │ │Container │ │ │ │Container │ │ │ │Container │ │ │
│ │ │ Runtime │ │ │ │ Runtime │ │ │ │ Runtime │ │ │
│ │ └──────────┘ │ │ └──────────┘ │ │ └──────────┘ │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
Control Plane 组件
| 组件 | 职责 | 说明 |
|---|---|---|
| API Server | 集群入口 | 所有操作的统一入口点 |
| etcd | 数据存储 | 存储集群状态和配置 |
| Scheduler | 调度决策 | 决定 Pod 运行在哪个节点 |
| Controller Manager | 状态维护 | 确保实际状态匹配期望状态 |
API Server 详解
功能:
┌─────────────────────────────────────┐
│ • RESTful API 接口 │
│ • 认证和授权 │
│ • 数据验证 │
│ • 乐观锁 (资源版本控制) │
└─────────────────────────────────────┘
所有组件都通过 API Server 通信:
kubectl → API Server → etcd
kubelet → API Server → etcd
Scheduler → API Server → etcd
etcd 详解
特点:
• 分布式键值存储
• 强一致性 (Raft 协议)
• 高可用 (奇数节点)
存储内容:
• 集群配置
• 资源对象定义
• 状态信息
• Secret 数据
部署模式:
┌─────────────┐
│ 单节点 (开发)│
└─────────────┘
┌─────────────┐
│ 3 节点 (生产)│ ← 推荐
└─────────────┘
┌─────────────┐
│ 5 节点 (大规模)│
└─────────────┘
Worker Node 组件
| 组件 | 职责 | 说明 |
|---|---|---|
| kubelet | 节点代理 | 管理 Pod 生命周期 |
| kube-proxy | 网络代理 | 实现 Service 网络规则 |
| Container Runtime | 容器运行时 | 运行容器 (containerd/CRI-O) |
kubelet 详解
职责:
┌─────────────────────────────────────┐
│ • 从 API Server 获取 Pod 规格 │
│ • 调用容器运行时创建容器 │
│ • 监控容器状态并汇报 │
│ • 执行健康检查 │
└─────────────────────────────────────┘
工作流程:
API Server → Pod Spec → kubelet → Container Runtime
↓
kubelet → 容器状态 → API Server
kube-proxy 详解
职责:
┌─────────────────────────────────────┐
│ • 维护网络规则 (iptables/IPVS) │
│ • 实现 Service 负载均衡 │
│ • 转发流量到正确的 Pod │
└─────────────────────────────────────┘
工作模式:
• iptables 模式 (默认)
• IPVS 模式 (高性能)
• userspace 模式 (已弃用)
组件交互流程
部署一个 Pod 的完整流程:
1. 用户提交 YAML
kubectl apply -f pod.yaml
↓
2. API Server 验证并存储到 etcd
↓
3. Scheduler 发现未调度的 Pod
根据资源、亲和性等选择节点
↓
4. API Server 更新 Pod 的 nodeName
↓
5. 目标节点的 kubelet 发现新 Pod
↓
6. kubelet 调用 Container Runtime
拉取镜像、创建容器、启动 Pod
↓
7. kubelet 向 API Server 汇报状态
↓
8. 用户通过 kubectl 查看状态
实践练习
练习 1:理解架构
回答以下问题:
- Control Plane 包含哪些核心组件?各自职责是什么?
- Worker Node 包含哪些核心组件?各自职责是什么?
- 为什么所有组件都通过 API Server 通信?
练习 2:组件关系图
画出以下组件的交互关系:
- kubectl
- API Server
- etcd
- Scheduler
- kubelet
- Container Runtime
练习 3:故障分析
假设一个 Pod 无法启动,分析可能涉及哪些组件的问题:
- API Server 故障会怎样?
- etcd 故障会怎样?
- kubelet 故障会怎样?
常见误解
1. "Master 节点运行容器"
错误理解:Control Plane 节点也运行用户容器
正确理解:
• Control Plane 只运行系统组件
• 用户容器运行在 Worker Node
• 生产环境 Master 不调度用户 Pod
2. "etcd 存储容器"
错误理解:etcd 存储容器数据
正确理解:
• etcd 存储集群状态和配置
• 容器数据存储在 Worker Node
• 容器镜像存储在镜像仓库
3. "kubelet 是容器运行时"
错误理解:kubelet 运行容器
正确理解:
• kubelet 管理 Pod 生命周期
• Container Runtime 运行容器
• kubelet 通过 CRI 接口调用运行时
小结
| 要点 | 说明 |
|---|---|
| 集群组成 | Control Plane + Worker Node(s) |
| API Server | 集群统一入口 |
| etcd | 分布式状态存储 |
| Scheduler | Pod 调度决策 |
| kubelet | 节点代理,管理 Pod |
| kube-proxy | 网络规则和负载均衡 |
| Container Runtime | 运行容器 (containerd/CRI-O) |
练习编辑器
bash
Loading...