k8s离线部署方案-部署前了解

理解 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
# 1. 初始化命令(主节点)
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

# 2. 加入工作节点(node 节点)
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 + 容器镜像(自动部署)对比