Kubernetes架构概述 #
一、整体架构 #
Kubernetes采用主从架构,由控制平面(Control Plane)和工作节点(Worker Node)组成。
1.1 架构图 #
text
┌─────────────────────────────────────────────────────────────────┐
│ Kubernetes 集群 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 控制平面 (Control Plane) │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ API Server │ │ Scheduler │ │ Controller │ │ │
│ │ │ │ │ │ │ Manager │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ etcd │ │ │
│ │ │ (分布式键值存储) │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────┐ ┌───────────────────┐ │
│ │ Worker Node 1 │ │ Worker Node 2 │ ... │
│ │ ┌─────────────┐ │ │ ┌─────────────┐ │ │
│ │ │ kubelet │ │ │ │ kubelet │ │ │
│ │ └─────────────┘ │ │ └─────────────┘ │ │
│ │ ┌─────────────┐ │ │ ┌─────────────┐ │ │
│ │ │ kube-proxy │ │ │ │ kube-proxy │ │ │
│ │ └─────────────┘ │ │ └─────────────┘ │ │
│ │ ┌─────────────┐ │ │ ┌─────────────┐ │ │
│ │ │ 容器运行时 │ │ │ │ 容器运行时 │ │ │
│ │ └─────────────┘ │ │ └─────────────┘ │ │
│ │ ┌─────────────┐ │ │ ┌─────────────┐ │ │
│ │ │ Pods │ │ │ │ Pods │ │ │
│ │ └─────────────┘ │ │ └─────────────┘ │ │
│ └───────────────────┘ └───────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
1.2 组件职责概览 #
| 组件 | 类型 | 职责 |
|---|---|---|
| kube-apiserver | 控制平面 | API入口,认证授权 |
| etcd | 控制平面 | 存储集群状态 |
| kube-scheduler | 控制平面 | Pod调度 |
| kube-controller-manager | 控制平面 | 运行控制器 |
| cloud-controller-manager | 控制平面 | 云平台集成 |
| kubelet | 节点组件 | 管理本节点容器 |
| kube-proxy | 节点组件 | 网络代理 |
| 容器运行时 | 节点组件 | 运行容器 |
二、控制平面组件 #
2.1 kube-apiserver #
API Server是Kubernetes的前端入口,所有操作都通过API Server进行。
text
请求流程
│
├── 1. 认证 (Authentication)
│ └── 验证用户身份
│
├── 2. 授权 (Authorization)
│ └── 检查操作权限
│
├── 3. 准入控制 (Admission Control)
│ └── 验证和修改请求
│
└── 4. 处理请求
└── 写入etcd,触发控制器
主要功能:
| 功能 | 说明 |
|---|---|
| RESTful API | 提供资源CRUD接口 |
| 认证 | 支持多种认证方式 |
| 授权 | RBAC、ABAC等 |
| 准入控制 | 验证和修改请求 |
| 数据存储 | 与etcd交互 |
启动参数示例:
bash
kube-apiserver \
--advertise-address=192.168.1.10 \
--etcd-servers=http://127.0.0.1:2379 \
--service-cluster-ip-range=10.96.0.0/12 \
--service-node-port-range=30000-32767 \
--enable-admission-plugins=NodeRestriction \
--authorization-mode=RBAC,Node
2.2 etcd #
etcd是高可用的键值存储系统,用于存储Kubernetes所有数据。
text
etcd数据结构
│
├── /registry/pods/<namespace>/<pod-name>
│
├── /registry/services/<namespace>/<service-name>
│
├── /registry/deployments/<namespace>/<deployment-name>
│
└── /registry/configmaps/<namespace>/<configmap-name>
etcd操作示例:
bash
# 查看所有键
etcdctl get / --prefix --keys-only
# 查看特定Pod数据
etcdctl get /registry/pods/default/nginx-pod
# 备份数据
etcdctl snapshot save backup.db
# 恢复数据
etcdctl snapshot restore backup.db
etcd集群配置:
bash
# 3节点etcd集群
etcd \
--name etcd-1 \
--initial-cluster etcd-1=http://10.0.0.1:2380,etcd-2=http://10.0.0.2:2380,etcd-3=http://10.0.0.3:2380 \
--initial-cluster-state new \
--listen-client-urls http://10.0.0.1:2379 \
--advertise-client-urls http://10.0.0.1:2379
2.3 kube-scheduler #
调度器负责将Pod分配到合适的节点。
text
调度流程
│
├── 1. 过滤 (Filtering)
│ ├── 资源是否充足
│ ├── 节点是否健康
│ ├── 污点容忍
│ └── 亲和性约束
│
├── 2. 打分 (Scoring)
│ ├── 资源利用率
│ ├── 亲和性权重
│ └── 自定义打分
│
└── 3. 绑定 (Binding)
└── 将Pod绑定到最优节点
调度策略示例:
yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
nodeSelector:
disktype: ssd
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- amd64
tolerations:
- key: "dedicated"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"
2.4 kube-controller-manager #
控制器管理器运行多个控制器,每个控制器负责特定功能。
text
控制器类型
│
├── 节点控制器 (Node Controller)
│ └── 监控节点状态
│
├── 副本控制器 (Replication Controller)
│ └── 维护Pod副本数
│
├── 端点控制器 (Endpoints Controller)
│ └── 管理Service端点
│
├── 服务账户控制器 (Service Account Controller)
│ └── 创建默认服务账户
│
└── 部署控制器 (Deployment Controller)
└── 管理Deployment
控制器工作原理:
text
控制循环 (Control Loop)
│
├── 1. 观察当前状态
│
├── 2. 比较期望状态
│
├── 3. 执行调谐操作
│
└── 4. 返回步骤1
2.5 cloud-controller-manager #
云控制器管理器用于与云平台集成。
text
云控制器类型
│
├── 节点控制器
│ └── 检查云平台节点状态
│
├── 路由控制器
│ └── 配置云平台路由
│
└── 服务控制器
└── 创建云平台负载均衡器
三、节点组件 #
3.1 kubelet #
kubelet是每个节点上运行的代理,负责管理容器生命周期。
text
kubelet职责
│
├── Pod管理
│ ├── 创建Pod
│ ├── 启动容器
│ ├── 监控容器
│ └── 删除容器
│
├── 节点管理
│ ├── 注册节点
│ ├── 上报状态
│ └── 资源统计
│
└── 健康检查
├── Liveness Probe
└── Readiness Probe
kubelet工作流程:
text
Pod创建流程
│
├── 1. kubelet监听API Server
│
├── 2. 获取分配到本节点的Pod
│
├── 3. 拉取镜像
│
├── 4. 创建容器
│
├── 5. 启动容器
│
└── 6. 上报状态到API Server
kubelet配置示例:
bash
kubelet \
--node-ip=192.168.1.20 \
--cluster-dns=10.96.0.10 \
--cluster-domain=cluster.local \
--cgroup-driver=systemd \
--container-runtime=remote \
--container-runtime-endpoint=/run/containerd/containerd.sock
3.2 kube-proxy #
kube-proxy维护节点上的网络规则,实现Service的负载均衡。
text
kube-proxy模式
│
├── iptables模式
│ ├── 使用iptables规则
│ ├── 性能好
│ └── 不支持会话保持
│
├── IPVS模式
│ ├── 使用IPVS负载均衡
│ ├── 性能更好
│ └── 支持多种算法
│
└── userspace模式(已废弃)
└── 用户空间代理
iptables模式示例:
bash
# 查看iptables规则
iptables -t nat -L KUBE-SERVICES
# Service规则示例
Chain KUBE-SERVICES (3 references)
target prot opt source destination
KUBE-SVC-XXX tcp -- anywhere 10.96.0.1 /* default/kubernetes:https */
IPVS模式配置:
bash
# 启用IPVS模式
kube-proxy \
--proxy-mode=ipvs \
--ipvs-scheduler=rr
3.3 容器运行时 #
容器运行时负责运行容器,支持多种运行时。
text
容器运行时
│
├── containerd
│ └── Docker官方运行时
│
├── CRI-O
│ └── 专为Kubernetes设计
│
└── Docker Engine(通过dockershim)
└── 已弃用
CRI接口:
text
容器运行时接口 (CRI)
│
├── RuntimeService
│ ├── CreateContainer
│ ├── StartContainer
│ ├── StopContainer
│ └── RemoveContainer
│
└── ImageService
├── ListImages
├── PullImage
└── RemoveImage
四、插件组件 #
4.1 网络插件 #
网络插件实现Pod网络通信。
text
网络插件 (CNI)
│
├── Calico
│ ├── 支持网络策略
│ └── BGP路由
│
├── Flannel
│ ├── 简单易用
│ └── VXLAN封装
│
├── Weave Net
│ └── 自动配置
│
└── Cilium
└── eBPF技术
4.2 存储插件 #
存储插件提供持久化存储支持。
text
存储插件 (CSI)
│
├── AWS EBS CSI
│
├── GCE PD CSI
│
├── Azure Disk CSI
│
├── Ceph CSI
│
└── NFS CSI
4.3 DNS插件 #
DNS插件提供服务发现功能。
yaml
# CoreDNS配置
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
五、通信流程 #
5.1 Pod创建流程 #
text
Pod创建完整流程
│
├── 1. 用户提交请求
│ └── kubectl apply -f pod.yaml
│
├── 2. API Server处理
│ ├── 认证
│ ├── 授权
│ ├── 准入控制
│ └── 写入etcd
│
├── 3. Scheduler调度
│ ├── 监听未调度Pod
│ ├── 选择最优节点
│ └── 更新Pod的nodeName
│
├── 4. kubelet执行
│ ├── 监听分配的Pod
│ ├── 拉取镜像
│ ├── 创建容器
│ └── 上报状态
│
└── 5. 运行成功
└── Pod状态变为Running
5.2 Service访问流程 #
text
Service访问流程
│
├── 1. 客户端请求
│ └── 访问ClusterIP:Port
│
├── 2. kube-proxy处理
│ ├── 匹配iptables规则
│ └── 随机选择后端Pod
│
├── 3. 转发到Pod
│ └── DNAT到PodIP:Port
│
└── 4. Pod响应
└── 返回响应数据
六、高可用架构 #
6.1 控制平面高可用 #
text
高可用控制平面
│
├── 多Master节点
│ ├── 3或5个Master
│ └── 负载均衡分发请求
│
├── etcd集群
│ ├── 奇数个节点
│ ├── 3、5或7个
│ └── Raft协议保证一致性
│
└── 负载均衡
├── HAProxy/Nginx
└── 云平台LB
6.2 高可用配置示例 #
yaml
# HAProxy配置
frontend k8s-apiserver
bind *:6443
mode tcp
option tcplog
default_backend k8s-apiserver
backend k8s-apiserver
mode tcp
option tcp-check
balance roundrobin
server master1 192.168.1.10:6443 check
server master2 192.168.1.11:6443 check
server master3 192.168.1.12:6443 check
七、总结 #
7.1 架构要点 #
| 组件 | 关键点 |
|---|---|
| API Server | 统一入口,认证授权 |
| etcd | 状态存储,高可用 |
| Scheduler | 资源调度,策略匹配 |
| Controller Manager | 状态调谐,控制循环 |
| kubelet | 节点代理,容器管理 |
| kube-proxy | 网络代理,负载均衡 |
7.2 下一步 #
理解了Kubernetes架构后,让我们深入学习 Pod详解,掌握Kubernetes最小部署单元的使用。
最后更新:2026-03-28