Kubernetes 架构概览
Kubernetes 架构概览
集群架构
Kubernetes 采用 主从架构,一个集群包含:
- Control Plane(控制平面):集群的大脑,负责管理和协调
- Worker Nodes(工作节点):实际运行容器的机器
┌─────────────────────────────────────────┐
│ Control Plane (Master) │
│ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
│ │ API │ │ Scheduler│ │Controller│ │
│ │ Server │ │ │ │ Manager │ │
│ └──────────┘ └──────────┘ └─────────┘ │
│ ┌──────────────────────────────────┐ │
│ │ etcd (数据存储) │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────┘
│
│ (指令)
↓
┌─────────────────────────────────────────┐
│ Worker Nodes │
│ ┌────────────┐ ┌────────────┐ │
│ │ Node 1 │ │ Node 2 │ │
│ │ ┌────────┐ │ │ ┌────────┐ │ │
│ │ │ Pod │ │ │ │ Pod │ │ │
│ │ │ Pod │ │ │ │ Pod │ │ │
│ │ └────────┘ │ │ └────────┘ │ │
│ │ kubelet │ │ kubelet │ │
│ └────────────┘ └────────────┘ │
└─────────────────────────────────────────┘
Control Plane 组件
1. API Server
集群的前端接口,所有操作都通过它进行。
# 所有 kubectl 命令都是调用 API Server
kubectl get pods
# ↓
# HTTP GET 请求 → API Server → 返回 Pod 列表
特点:
- 提供 RESTful API
- 处理所有集群操作请求
- 验证和授权
- 是唯一与 etcd 交互的组件
2. etcd
集群的数据库,存储所有集群数据。
存储内容:
- 集群配置信息
- 节点信息
- Pod 状态
- ConfigMap、Secret 等资源
特点:
- 分布式键值存储
- 使用 Raft 协议保证一致性
- 支持高可用
3. Scheduler
调度器,决定 Pod 运行在哪个节点上。
工作流程:
1. 监听新创建的 Pod
2. 评估所有节点
3. 选择最优节点
4. 将 Pod 分配给该节点
调度考虑因素:
- 资源需求(CPU、内存)
- 节点标签和亲和性
- 数据本地性
- 负载均衡
4. Controller Manager
控制器管理器,运行各种控制器来维护集群状态。
常见控制器:
Node Controller
- 监控节点状态
- 节点故障时采取措施
Replication Controller
- 确保 Pod 副本数符合期望
Endpoints Controller
- 维护 Service 和 Pod 的关联
Service Account Controller
- 为新命名空间创建默认账户
Worker Node 组件
1. kubelet
节点代理,运行在每个节点上。
主要职责:
- 接收 Pod 定义并确保容器运行
- 监控 Pod 健康状态
- 向 API Server 报告节点状态
- 管理容器生命周期
# kubelet 工作流程
1. 从 API Server 获取分配到本节点的 Pod
2. 调用容器运行时(如 Docker)启动容器
3. 监控容器运行状态
4. 定期上报状态到 API Server
2. kube-proxy
网络代理,维护节点上的网络规则。
功能:
- 实现 Service 的负载均衡
- 维护网络规则和转发规则
- 实现 Service 到 Pod 的路由
工作模式:
- iptables 模式(默认)
- IPVS 模式(高性能)
3. 容器运行时
实际运行容器的软件。
支持的运行时:
- Docker(最常用)
- containerd
- CRI-O
核心概念
Pod
Kubernetes 的最小调度单元。
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14
ports:
- containerPort: 80
特点:
- 一个 Pod 可以包含一个或多个容器
- Pod 内容器共享网络和存储
- Pod 是短暂的(ephemeral)
Node
集群中的工作机器(物理机或虚拟机)。
查看节点:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
node-1 Ready master 10d v1.28.0
node-2 Ready <none> 10d v1.28.0
node-3 Ready <none> 10d v1.28.0
Namespace
虚拟集群,用于资源隔离。
# 创建命名空间
kubectl create namespace dev
kubectl create namespace prod
# 在指定命名空间创建资源
kubectl apply -f app.yaml -n dev
默认命名空间:
default:默认命名空间kube-system:系统组件kube-public:公共资源kube-node-lease:节点心跳
工作流程示例
让我们看一个完整的部署流程:
1. 用户提交部署
kubectl apply -f deployment.yaml
2. API Server 处理请求
- 验证用户权限
- 验证 YAML 格式
- 将数据存储到 etcd
3. Scheduler 调度 Pod
- 检测到新的 Pod 需要调度
- 评估所有节点
- 选择最优节点(例如:node-2)
- 更新 etcd:Pod 分配给 node-2
4. kubelet 启动容器
- node-2 的 kubelet 监听到新 Pod
- 拉取容器镜像
- 启动容器
- 报告 Pod 状态
5. 用户访问应用
kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-7d8f6b4c9-x5t2w 1/1 Running 0 30s
高可用架构
生产环境通常部署高可用集群:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Master 1 │ │ Master 2 │ │ Master 3 │
│ (Active) │ │ (Standby) │ │ (Standby) │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
└───────────────┴───────────────┘
│
┌──────────┴──────────┐
│ Load Balancer │
└──────────┬──────────┘
│
┌───────────────┼───────────────┐
│ │ │
┌──────┴─────┐ ┌──────┴─────┐ ┌──────┴─────┐
│ Worker 1 │ │ Worker 2 │ │ Worker 3 │
└────────────┘ └────────────┘ └────────────┘
特点:
- 多个 Master 节点
- etcd 集群(通常 3 或 5 个节点)
- 负载均衡器分发请求
小结
Kubernetes 架构的核心要点:
- 主从架构:Control Plane 管理,Worker Nodes 执行
- API Server:集群的中枢,所有操作的入口
- 声明式设计:描述期望状态,系统自动实现
- 控制循环:持续监控并调整实际状态
- 可扩展性:组件解耦,易于扩展
理解了架构,接下来我们将搭建自己的 Kubernetes 环境。