前言
笔者由于工作变动去做了云安全,第一次真正的使用上k8s作为部署和安全场景,记录一下k8s学习的过程,本篇是k8s核心组件的学习。
一、Kubernetes架构全景
graph TD A[Control Plane] --> B[API Server] A --> C[etcd] A --> D[Scheduler] A --> E[Controller Manager] F[Node] --> G[kubelet] F --> H[kube-proxy] F --> I[Container Runtime] B --> G B --> H
二、控制平面组件详解
2.1 API Server
- 作用:集群的"前门",处理所有REST操作
- 核心功能:
- 认证/授权(与RBAC集成)
- 校验资源定义(通过Admission Controllers)
- 提供Watch机制实现实时状态同步
2.2 etcd
-
角色:分布式键值存储数据库
-
关键数据:
1
2
3/registry/pods # 所有Pod信息
/registry/services # Service定义
/registry/nodes # 节点注册信息 -
操作示例:
1
etcdctl get / --prefix --keys-only | grep pods
2.3 Scheduler
- 工作流程:
- 监听未调度Pod(
spec.nodeName
为空) - 过滤不满足条件的节点
- 打分选择最优节点
- 绑定Pod到目标节点
- 监听未调度Pod(
2.4 Controller Manager
- 核心控制器:
- Deployment Controller
- ReplicaSet Controller
- Node Controller
- Service Controller
- Endpoints Controller
- Namespace Controller
三、工作节点组件剖析
3.1 kubelet
-
主要职责:
- 管理Pod生命周期
- 上报节点状态
- 执行存活/就绪探针
-
关键目录:
1
2/var/lib/kubelet/pods # Pod数据目录
/etc/kubernetes/manifests # 静态Pod配置
3.2 kube-proxy
-
网络代理模式:
- userspace(已淘汰)
- iptables(默认)
- IPVS(推荐生产使用)
-
核心功能:
1
2# 查看Service iptables规则
iptables -t nat -L KUBE-SERVICES
3.3 Container Runtime
-
常见选择:
- containerd(推荐)
- CRI-O
- Docker(已弃用)
-
操作接口:
1
ctr -n k8s.io containers ls # 查看容器
四、关键附加组件
4.1 CNI插件
- 常用方案:
- Calico(BGP路由)
- Flannel(VXLAN)
- Cilium(eBPF增强)
4.2 Ingress Controller
- 实现方案:
- Nginx Ingress
- Traefik
- HAProxy
4.3 CSI驱动
- 存储对接:
- AWS EBS
- Ceph RBD
- NFS
五、组件交互实战解析
5.1 Pod创建流程
sequenceDiagram User->>API Server: kubectl create -f pod.yaml API Server->>etcd: 存储Pod定义 Scheduler->>API Server: Watch未调度Pod Scheduler->>API Server: 绑定节点 kubelet->>API Server: Watch本节点Pod kubelet->>Container Runtime: 创建容器 kubelet->>API Server: 更新Pod状态
5.2 Service流量转发
1 | # 创建NodePort Service |
六、学习资源推荐
6.1 官方文档
6.2 实验环境
6.3 调试工具
1 | kubectl get --raw /metrics # 查看组件指标 |
结语
理解Kubernetes组件需要:
- 掌握各组件职责边界
- 熟悉组件间通信机制
- 通过实际运维加深理解
- 关注组件版本更新变化
建议通过以下步骤渐进学习:
- 使用minikube部署实验环境
- 手动停止组件观察集群行为
- 跟踪API Server的请求日志
- 分析etcd存储的数据结构
真正的精通来自于对底层原理的深刻理解!