跳到主要内容

Kubernetes 架构

本章将深入介绍 Kubernetes 集群的架构设计和核心组件。

Kubernetes 架构概述

Kubernetes 采用主从架构,主要由**控制平面(Control Plane)工作节点(Worker Nodes)**两部分组成。

控制平面组件

控制平面负责整个集群的管理和控制,是 Kubernetes 的大脑。

1. kube-apiserver

API 服务器是 Kubernetes 控制平面的核心组件,所有组件都通过它进行通信。

主要功能

  • 提供 Kubernetes API,是集群的入口点
  • 处理 RESTful 操作(创建、更新、删除资源)
  • 验证请求并更新 etcd 中的数据
  • 实现服务发现和身份验证
# 查看 API 服务器信息
kubectl get pod -n kube-system -l component=kube-apiserver

# 查看 API 端点
kubectl api-resources

工作原理

2. etcd

etcd 是一个分布式键值存储,用于保存集群的所有数据。

特点

  • 高度可用:采用 Raft 共识算法
  • 一致性:保证数据强一致性
  • 持久化:数据持久化存储
# 查看 etcd 状态
kubectl get pods -n kube-system -l component=etcd

# 使用 etcdctl 查看数据(需要配置)
etcdctl get /registry --prefix -keys-only

存储内容

  • Pod、Service、Deployment 等资源对象
  • 集群状态信息
  • 元数据和配置

3. kube-scheduler

调度器负责为新建的 Pod 选择最合适的工作节点。

调度因素

  • 资源需求:CPU、内存、存储
  • 节点亲和性和反亲和性
  • Pod 亲和性和反亲和性
  • 污点和容忍(Taints and Tolerations)
  • 拓扑约束(Topology Spread Constraints)
# 示例:指定节点调度
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
nodeSelector:
disktype: ssd # 调度到有 SSD 标签的节点
containers:
- name: nginx
image: nginx

调度流程

4. kube-controller-manager

控制器管理器运行各种控制器来维护集群状态。

主要控制器

控制器功能
Node Controller监控节点状态,自动标记为不可用
Replication Controller确保指定数量的 Pod 副本运行
Deployment Controller管理 Deployment 资源
Service Controller管理 Service 资源
Endpoint Controller创建 Service 和 Pod 的端点映射
Garbage Collection清理不再使用的资源
# 查看控制器管理器
kubectl get pods -n kube-system -l component=kube-controller-manager

5. cloud-controller-manager

云控制器管理器负责与云提供商交互,管理云资源。

功能

  • 节点管理:创建、删除云服务器
  • 负载均衡管理:配置云负载均衡器
  • 存储管理:挂载云存储卷

工作节点组件

工作节点是实际运行 Pod 的机器,负责执行计算任务。

1. kubelet

kubelet 是运行在每个节点上的代理,负责管理该节点上的 Pod。

主要职责

  • 与 API 服务器通信,接收 Pod 指令
  • 管理节点上的容器
  • 监控容器健康状态
  • 报告节点和容器状态
# 查看 kubelet 状态
systemctl status kubelet

# 查看 kubelet 日志
journalctl -u kubelet -n 100

2. kube-proxy

kube-proxy 是节点上的网络代理,负责实现 Service 的负载均衡。

工作模式

  • Userspace(已废弃)
  • iptables(默认):使用规则转发流量
  • IPVS:支持更多负载均衡算法
# 查看 kube-proxy 规则
iptables -t nat -L -n | grep KUBE

# 查看 IPVS 规则
ipvs -L -n

3. 容器运行时

容器运行时负责拉取镜像和运行容器。

支持的运行时

  • containerd(默认)
  • Docker
  • CRI-O
  • gVisor
# 查看容器运行时
crictl info

# 查看运行中的容器
crictl ps

控制器模式

Kubernetes 使用控制器模式来管理集群状态。

控制循环

每个控制器通过"控制循环"来确保期望状态与实际状态一致:

声明式 API

用户声明期望状态,控制器负责实现:

# 声明期望状态:3 个 Pod 副本
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: nginx:latest

通信机制

API 服务器通信

节点间通信

  • Pod 可以直接与其他 Pod 通信(不需要 NAT)
  • 每个 Pod 都有唯一的 IP 地址
  • Service 提供稳定的虚拟 IP

集群高可用

生产环境通常部署高可用集群:

小结

本章我们学习了:

  1. Kubernetes 架构概述:控制平面 + 工作节点
  2. 控制平面组件:API 服务器、etcd、调度器、控制器管理器
  3. 工作节点组件:kubelet、kube-proxy、容器运行时
  4. 控制器模式:声明式 API 和控制循环
  5. 通信机制:API 服务器通信和节点间通信

练习

  1. 使用 kubectl get componentstatuses 查看控制平面组件状态
  2. 使用 kubectl describe node <node-name> 查看节点详情
  3. 使用 kubectl get pods -n kube-system 查看系统组件 Pod
  4. 分析一个 Pod 的调度过程

准备好继续学习了吗?点击下一章了解如何配置 Kubernetes 环境!