一、K8s 集群基础架构
Kubernetes(简称 K8s)是 Google 开源的容器编排管理平台,实现容器应用自动化部署、弹性伸缩、故障自愈、服务发现与负载均衡。 K8s 集群分为控制平面(Control Plane,Master 节点) 和**工作节点(Worker Node)**两大模块。
控制平面组件(集群大脑,做调度与管理)
- kube‑apiserver 集群唯一 REST API 入口,所有组件、kubectl 命令都和它通信。负责请求校验、鉴权,所有资源读写都经过 apiserver,再存入 etcd。
- etcd 分布式键值数据库,集群的 "数据库",保存集群全部状态数据:Pod、Service、Deployment、节点信息等。必须做高可用,集群数据全部存在这里。
- kube‑controller‑manager 控制器管理器,运行一堆控制器,持续对比 "期望状态" 和 "实际状态",自动修正集群。 常见控制器:副本控制器、节点控制器、服务账号控制器。例如 Deployment 设置 3 个 Pod 副本,如果一个 Pod 崩溃,控制器就自动新建 Pod,保证副本数量。
- kube‑scheduler 调度器,当创建新 Pod,筛选满足资源、标签、亲和策略的 Worker 节点,把 Pod 调度绑定到合适工作节点上。
Worker 工作节点组件(运行业务容器)
- kubelet:每个工作节点上的代理服务,接收 apiserver 下发指令,管理本机 Pod 生命周期,创建、停止容器,定期上报节点和 Pod 状态。
- kube‑proxy:网络代理,运行在每个节点,维护 iptables/ipvs 规则,实现 Service 服务发现和集群内部负载均衡。
- 容器运行时:真正跑容器,例如 containerd、docker,负责拉镜像、启停容器。
网络插件 CNI
K8s 本身不提供 Pod 跨节点网络,必须额外部署 CNI 插件,常用 Calico、Flannel,完成 Pod 之间跨主机通信。如果不安装 CNI 插件,节点状态会一直 NotReady。
二、K8s 四大部署方式详解
方式 1:kubeadm 部署(企业生产主流,作业重点)
原理:K8s 官方提供集群引导工具,不会安装操作系统,只自动化部署 K8s 各个组件,简化证书、组件配置流程。支持单 Master 和多 Master 高可用,生产环境大量使用。
部署前置环境(所有节点都执行)
-
设置主机名,配置 hosts 解析,节点之间主机名可以互相解析
-
关闭防火墙、SELinux
-
关闭 swap 分区(K8s 强制要求,swap 开启会导致调度异常)
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab -
配置内核参数,开启 ipvs 转发
-
时间同步 chrony,集群节点时间必须一致
-
安装容器运行时 containerd
-
所有节点安装统一版本 kubeadm、kubelet、kubectl,锁定版本防止自动升级
Master 控制节点初始化
kubeadm init \
--apiserver-advertise-address=192.168.10.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
执行成功输出关键信息:
-
提示配置 kubectl 认证文件
mkdir -p HOME/.kube sudo cp -i /etc/kubernetes/admin.conf HOME/.kube/config
sudo chown (id -u):(id -g) $HOME/.kube/config -
输出
kubeadm join命令,worker 节点用这条命令加入集群。
📸【截图 1】:kubeadm init 命令执行成功完整输出截图(作业需要自己跑环境截取)
Worker 节点加入集群
复制 master 输出的 join 命令,在所有 worker 节点执行:
kubeadm join 192.168.10.10:6443 --token xxxxx \
--discovery-token-ca-cert-hash sha256:xxxxxxx
安装 CNI 网络插件 Calico
kubectl apply -f calico.yaml
等待网络 Pod 全部启动完成。
集群验证命令
#查看所有节点状态,全部Ready代表集群正常
kubectl get nodes
📸【截图 2】kubectl get nodes 输出截图,STATUS 全部为 Ready
#查看集群系统Pod状态
kubectl get pods -n kube-system
📸【截图 3】kube‑system 命名空间 Pod 运行状态截图,所有 pod 状态 Running
✅优点:官方工具,部署速度快;支持高可用;企业生产广泛使用。 ❌缺点:前置环境需要手动配置;多 Master 高可用需要额外部署负载均衡。
方式 2:二进制部署(学习底层原理,面试高频)
原理 :不使用 yum 软件包,手动下载每个组件的二进制可执行文件。手动生成全部 SSL 证书;手动编写 systemd 服务文件逐个启动 apiserver、etcd、scheduler、controller‑manager、kubelet、kube‑proxy。完全手动搭建整套集群。
部署步骤简述:
- 准备多台服务器,基础环境和 kubeadm 一致(关闭 swap、内核参数等)
- 部署 etcd 集群,手动签发 etcd 证书
- 部署 apiserver,配置证书、systemd 服务启动
- 部署 controller‑manager、scheduler,配置连接 apiserver 证书
- 工作节点部署 kubelet、kube‑proxy,配置证书访问 apiserver
- 部署 CNI 网络插件,完成集群。
✅优点:完全掌握每一个组件工作原理;深度理解证书、配置文件。面试常问。
❌缺点:步骤极其繁琐,证书手动维护易错;企业几乎不会线上手工二进制部署,多用于学习。
方式 3:Kubespray 部署(大规模自动化部署)
原理:基于 Ansible 自动化剧本,批量远程在多台机器完成环境初始化、容器运行时、K8s 组件部署。
流程:
- 准备 ansible 环境,编写 inventory 主机清单,填写 master、worker 机器 IP
- 修改配置文件设置 k8s 版本
- 执行 ansible-playbook 一键部署整个集群
✅优点:自动化程度高;原生支持多 Master 高可用;适合几十上百台大规模集群。
❌缺点:依赖 Ansible;部署时间较长;环境排错难度高。
方式 4:minikube(本地单机测试)
原理 :单机轻量化 K8s,会在本机启动容器或者虚拟机模拟完整 K8s 环境,只有单节点,不能生产使用,仅用于本地开发学习。
启动命令:
minikube start --driver=docker
✅优点:一条命令启动,电脑本地快速体验 k8s。
❌缺点:单节点,不支持多 worker;性能有限,不能用于生产环境。
三、集群核心原理(自己理解总结)
- etcd:集群唯一数据库,存储集群全部资源数据(pod、service、配置),集群所有读写都经过 apiserver 操作 etcd,etcd 必须做高可用。
- apiserver:集群唯一入口,所有组件和 kubectl 都和 apiserver 交互,做鉴权、校验,读写 etcd。
- scheduler 调度器:新建 Pod 之后,scheduler 筛选符合条件的 node 节点,把 Pod 绑定到合适节点。
- controller‑manager 控制器:一系列控制器,维持集群期望状态。例如副本控制器,保证 deployment 的 pod 副本数和 yaml 定义一致,如果 pod 宕机自动重建。
- kubelet:运行在每个 node,接收 apiserver 指令,管理本机 Pod 生命周期,上报节点状态。
- kube‑proxy:每个节点代理,维护 service 网络规则,实现 pod 之间、pod 和 service 访问。
- CNI 网络插件:k8s 本身不提供 pod 网络,必须部署 Calico/flannel 实现跨节点 pod 互通。
四、部署完成后验证操作
#查看节点状态
kubectl get nodes
#查看集群组件状态
kubectl get cs
#查看全部pod,kube‑system命名空间是集群组件pod
kubectl get pods -n kube-system
五、个人学习总结
- 四种部署场景区分:
- 学习底层原理:选二进制部署;
- 企业生产:优先 kubeadm;大规模集群自动化用 kubespray;
- 本地电脑快速做实验:minikube。
- K8s 集群部署,环境预处理非常重要:关闭 swap、时间同步、内核转发、主机互通,环境不对,部署必然失败。
- 控制平面负责集群决策调度,worker 节点真正执行业务 Pod。所有状态数据全部存于 etcd,apiserver 是所有组件交互唯一入口。
- CNI 网络属于独立组件,K8s 内核不实现 Pod 网络,必须安装第三方网络插件。