理解 Kubernetes 的组件部署与初始化流程,对于掌握集群原理、进行集群维护和故障排查是非常关键的。下面我从组件划分 → 初始化流程 → kubeadm 实现 → 每个组件作用 → 启动顺序与依赖这几个方面给你系统梳理。
✅ 一、Kubernetes 组件大致分类
K8s 架构由两大部分组成:
1. 控制平面(Control Plane)组件:运行在 Master 节点
组件 |
作用 |
kube-apiserver |
集群唯一入口,所有组件都通过它通信 |
etcd |
保存整个集群状态(数据库) |
kube-controller-manager |
负责控制器逻辑,如副本数、节点状态等 |
kube-scheduler |
负责为 Pod 选择合适的节点调度 |
cloud-controller-manager(可选) |
云平台控制器(如负载均衡、存储) |
2. 数据平面(Node 节点)组件
组件 |
作用 |
kubelet |
管理本节点上的 Pod 与容器状态 |
kube-proxy |
管理网络规则,保证服务访问 |
container runtime(如 containerd、Docker) |
实际运行容器 |
CNI 插件(如 Calico、Flannel) |
管理 Pod 网络接口与路由配置 |
✅ 二、Kubernetes 初始化部署流程(以 kubeadm 为例)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 【主节点】 1. 安装 kubeadm、kubelet、kubectl、containerd 2. kubeadm init 进行初始化 3. 生成证书、配置文件、etcd 数据目录 4. 启动控制平面组件(API、etcd、scheduler、controller-manager) 5. 配置 kubeconfig 文件供 kubectl 使用 6. 安装网络插件(如 Calico) 7. master 准备就绪
【工作节点】 1. 安装 kubeadm、kubelet、containerd 2. kubeadm join 连接主节点 3. 下载控制面指令的配置 4. 启动 kubelet、kube-proxy,接收调度任务
|
✅ 三、初始化核心步骤详解(kubeadm)
1 2 3 4 5 6 7 8 9
| kubeadm init \ --apiserver-advertise-address=192.168.1.10 \ --pod-network-cidr=10.244.0.0/16 \ --service-cidr=10.96.0.0/12 \ --kubernetes-version=1.29.0
kubeadm join 192.168.1.10:6443 --token xxx --discovery-token-ca-cert-hash sha256:yyy
|
初始化完成后,默认组件会以 static Pod
的方式部署在 /etc/kubernetes/manifests/
中:
1 2 3 4 5
| /etc/kubernetes/manifests/ ├── etcd.yaml ├── kube-apiserver.yaml ├── kube-controller-manager.yaml ├── kube-scheduler.yaml
|
这些 YAML 会被 kubelet 自动读取并运行。
✅ 四、各组件启动顺序与依赖关系
启动顺序 |
组件 |
依赖 |
① |
etcd |
无依赖(存储数据库) |
② |
kube-apiserver |
etcd |
③ |
kube-controller-manager |
kube-apiserver |
④ |
kube-scheduler |
kube-apiserver |
⑤ |
kubelet |
kube-apiserver |
⑥ |
kube-proxy |
kube-apiserver,CNI |
⑦ |
网络插件 |
kubelet + kube-apiserver |
⑧ |
DNS(CoreDNS) |
kube-apiserver + 网络正常 |
✅ 五、集群配置文件结构(kubeadm)
文件 |
说明 |
/etc/kubernetes/admin.conf |
kubeconfig 文件,管理员使用 kubectl 的配置 |
/etc/kubernetes/manifests/*.yaml |
控制平面组件 static pod 定义 |
/etc/kubernetes/pki/ |
TLS 证书目录 |
/var/lib/etcd/ |
etcd 数据目录 |
✅ 六、完整流程图(抽象)
1 2 3 4 5 6 7 8 9 10 11
| Step 1: kubeadm init ↓ Step 2: 生成证书 + kubeconfig ↓ Step 3: 创建 static Pod 文件(apiserver、etcd、scheduler、controller) ↓ Step 4: kubelet 自动加载这些 YAML,并运行容器 ↓ Step 5: 安装网络插件(Calico) ↓ Step 6: node 加入集群 (kubeadm join)
|
✅ 七、后续操作建议
完成初始化后你还需要:
- ✅ 安装网络插件(如 Calico、Flannel)才能让 Pod 互通
- ✅ 安装 dashboard 或 metrics-server 进行可视化与监控
- ✅ 配置 Ingress Controller(如 nginx-ingress)实现 HTTP 访问路由
- ✅ 学会排查
kubectl get pod -A
/ describe
/ logs
定位异常
✅ 总结
Kubernetes 初始化其实是“生成配置 → 启动关键组件 → 节点加入”的过程。理解了组件的职责与依赖关系,你就可以自信排查问题、定制安装方案,甚至手动二进制部署。
下一步
二进制部署 Kubernetes(手动部署) 和使用 kubeadm + 容器镜像(自动部署)对比