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 架构的核心要点:

  1. 主从架构:Control Plane 管理,Worker Nodes 执行
  2. API Server:集群的中枢,所有操作的入口
  3. 声明式设计:描述期望状态,系统自动实现
  4. 控制循环:持续监控并调整实际状态
  5. 可扩展性:组件解耦,易于扩展

理解了架构,接下来我们将搭建自己的 Kubernetes 环境。