K8s 集群部署方法与原理总结
一、K8s 集群基础架构Kubernetes简称 K8s是 Google 开源的容器编排管理平台实现容器应用自动化部署、弹性伸缩、故障自愈、服务发现与负载均衡。 K8s 集群分为控制平面Control PlaneMaster 节点和工作节点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负责拉镜像、启停容器。网络插件 CNIK8s 本身不提供 Pod 跨节点网络必须额外部署 CNI 插件常用 Calico、Flannel完成 Pod 之间跨主机通信。如果不安装 CNI 插件节点状态会一直 NotReady。二、K8s 四大部署方式详解方式 1kubeadm 部署企业生产主流作业重点原理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-address192.168.10.10 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.28.2 \ --service-cidr10.96.0.0/12 \ --pod-network-cidr10.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 网络插件 Calicokubectl 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 网络插件完成集群。✅优点完全掌握每一个组件工作原理深度理解证书、配置文件。面试常问。❌缺点步骤极其繁琐证书手动维护易错企业几乎不会线上手工二进制部署多用于学习。方式 3Kubespray 部署大规模自动化部署原理基于 Ansible 自动化剧本批量远程在多台机器完成环境初始化、容器运行时、K8s 组件部署。流程准备 ansible 环境编写 inventory 主机清单填写 master、worker 机器 IP修改配置文件设置 k8s 版本执行 ansible-playbook 一键部署整个集群✅优点自动化程度高原生支持多 Master 高可用适合几十上百台大规模集群。❌缺点依赖 Ansible部署时间较长环境排错难度高。方式 4minikube本地单机测试原理单机轻量化 K8s会在本机启动容器或者虚拟机模拟完整 K8s 环境只有单节点不能生产使用仅用于本地开发学习。启动命令minikube start --driverdocker✅优点一条命令启动电脑本地快速体验 k8s。❌缺点单节点不支持多 worker性能有限不能用于生产环境。三、集群核心原理自己理解总结etcd集群唯一数据库存储集群全部资源数据pod、service、配置集群所有读写都经过 apiserver 操作 etcdetcd 必须做高可用。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 #查看全部podkube‑system命名空间是集群组件pod kubectl get pods -n kube-system五、个人学习总结四种部署场景区分学习底层原理选二进制部署企业生产优先 kubeadm大规模集群自动化用 kubespray本地电脑快速做实验minikube。K8s 集群部署环境预处理非常重要关闭 swap、时间同步、内核转发、主机互通环境不对部署必然失败。控制平面负责集群决策调度worker 节点真正执行业务 Pod。所有状态数据全部存于 etcdapiserver 是所有组件交互唯一入口。CNI 网络属于独立组件K8s 内核不实现 Pod 网络必须安装第三方网络插件。