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
集群高可用
生产环境通常部署高可用集群:
小结
本章我们学习了:
- Kubernetes 架构概述:控制平面 + 工作节点
- 控制平面组件:API 服务器、etcd、调度器、控制器管理器
- 工作节点组件:kubelet、kube-proxy、容器运行时
- 控制器模式:声明式 API 和控制循环
- 通信机制:API 服务器通信和节点间通信
练习
- 使用
kubectl get componentstatuses查看控制平面组件状态 - 使用
kubectl describe node <node-name>查看节点详情 - 使用
kubectl get pods -n kube-system查看系统组件 Pod - 分析一个 Pod 的调度过程
准备好继续学习了吗?点击下一章了解如何配置 Kubernetes 环境!