K8s 集群部署方法与原理总结

一、K8s 集群基础架构

Kubernetes(简称 K8s)是 Google 开源的容器编排管理平台,实现容器应用自动化部署、弹性伸缩、故障自愈、服务发现与负载均衡。 K8s 集群分为控制平面(Control Plane,Master 节点) 和**工作节点(Worker Node)**两大模块。

控制平面组件(集群大脑,做调度与管理)

  1. kube‑apiserver 集群唯一 REST API 入口,所有组件、kubectl 命令都和它通信。负责请求校验、鉴权,所有资源读写都经过 apiserver,再存入 etcd。
  2. etcd 分布式键值数据库,集群的 "数据库",保存集群全部状态数据:Pod、Service、Deployment、节点信息等。必须做高可用,集群数据全部存在这里。
  3. kube‑controller‑manager 控制器管理器,运行一堆控制器,持续对比 "期望状态" 和 "实际状态",自动修正集群。 常见控制器:副本控制器、节点控制器、服务账号控制器。例如 Deployment 设置 3 个 Pod 副本,如果一个 Pod 崩溃,控制器就自动新建 Pod,保证副本数量。
  4. kube‑scheduler 调度器,当创建新 Pod,筛选满足资源、标签、亲和策略的 Worker 节点,把 Pod 调度绑定到合适工作节点上。

Worker 工作节点组件(运行业务容器)

  1. kubelet:每个工作节点上的代理服务,接收 apiserver 下发指令,管理本机 Pod 生命周期,创建、停止容器,定期上报节点和 Pod 状态。
  2. kube‑proxy:网络代理,运行在每个节点,维护 iptables/ipvs 规则,实现 Service 服务发现和集群内部负载均衡。
  3. 容器运行时:真正跑容器,例如 containerd、docker,负责拉镜像、启停容器。

网络插件 CNI

K8s 本身不提供 Pod 跨节点网络,必须额外部署 CNI 插件,常用 Calico、Flannel,完成 Pod 之间跨主机通信。如果不安装 CNI 插件,节点状态会一直 NotReady。

二、K8s 四大部署方式详解

方式 1:kubeadm 部署(企业生产主流,作业重点)

原理:K8s 官方提供集群引导工具,不会安装操作系统,只自动化部署 K8s 各个组件,简化证书、组件配置流程。支持单 Master 和多 Master 高可用,生产环境大量使用。

部署前置环境(所有节点都执行)
  1. 设置主机名,配置 hosts 解析,节点之间主机名可以互相解析

  2. 关闭防火墙、SELinux

  3. 关闭 swap 分区(K8s 强制要求,swap 开启会导致调度异常)

    swapoff -a
    sed -i '/swap/s/^/#/' /etc/fstab

  4. 配置内核参数,开启 ipvs 转发

  5. 时间同步 chrony,集群节点时间必须一致

  6. 安装容器运行时 containerd

  7. 所有节点安装统一版本 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

执行成功输出关键信息:

  1. 提示配置 kubectl 认证文件

    mkdir -p HOME/.kube sudo cp -i /etc/kubernetes/admin.conf HOME/.kube/config
    sudo chown (id -u):(id -g) $HOME/.kube/config

  2. 输出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。完全手动搭建整套集群。

部署步骤简述:

  1. 准备多台服务器,基础环境和 kubeadm 一致(关闭 swap、内核参数等)
  2. 部署 etcd 集群,手动签发 etcd 证书
  3. 部署 apiserver,配置证书、systemd 服务启动
  4. 部署 controller‑manager、scheduler,配置连接 apiserver 证书
  5. 工作节点部署 kubelet、kube‑proxy,配置证书访问 apiserver
  6. 部署 CNI 网络插件,完成集群。

✅优点:完全掌握每一个组件工作原理;深度理解证书、配置文件。面试常问。

❌缺点:步骤极其繁琐,证书手动维护易错;企业几乎不会线上手工二进制部署,多用于学习。

方式 3:Kubespray 部署(大规模自动化部署)

原理:基于 Ansible 自动化剧本,批量远程在多台机器完成环境初始化、容器运行时、K8s 组件部署。

流程:

  1. 准备 ansible 环境,编写 inventory 主机清单,填写 master、worker 机器 IP
  2. 修改配置文件设置 k8s 版本
  3. 执行 ansible-playbook 一键部署整个集群

✅优点:自动化程度高;原生支持多 Master 高可用;适合几十上百台大规模集群。

❌缺点:依赖 Ansible;部署时间较长;环境排错难度高。

方式 4:minikube(本地单机测试)

原理 :单机轻量化 K8s,会在本机启动容器或者虚拟机模拟完整 K8s 环境,只有单节点,不能生产使用,仅用于本地开发学习。

启动命令:

复制代码
minikube start --driver=docker

✅优点:一条命令启动,电脑本地快速体验 k8s。

❌缺点:单节点,不支持多 worker;性能有限,不能用于生产环境。

三、集群核心原理(自己理解总结)

  1. etcd:集群唯一数据库,存储集群全部资源数据(pod、service、配置),集群所有读写都经过 apiserver 操作 etcd,etcd 必须做高可用。
  2. apiserver:集群唯一入口,所有组件和 kubectl 都和 apiserver 交互,做鉴权、校验,读写 etcd。
  3. scheduler 调度器:新建 Pod 之后,scheduler 筛选符合条件的 node 节点,把 Pod 绑定到合适节点。
  4. controller‑manager 控制器:一系列控制器,维持集群期望状态。例如副本控制器,保证 deployment 的 pod 副本数和 yaml 定义一致,如果 pod 宕机自动重建。
  5. kubelet:运行在每个 node,接收 apiserver 指令,管理本机 Pod 生命周期,上报节点状态。
  6. kube‑proxy:每个节点代理,维护 service 网络规则,实现 pod 之间、pod 和 service 访问。
  7. CNI 网络插件:k8s 本身不提供 pod 网络,必须部署 Calico/flannel 实现跨节点 pod 互通。

四、部署完成后验证操作

复制代码
#查看节点状态
kubectl get nodes
#查看集群组件状态
kubectl get cs
#查看全部pod,kube‑system命名空间是集群组件pod
kubectl get pods -n kube-system

五、个人学习总结

  1. 四种部署场景区分:
  • 学习底层原理:选二进制部署;
  • 企业生产:优先 kubeadm;大规模集群自动化用 kubespray;
  • 本地电脑快速做实验:minikube。
  1. K8s 集群部署,环境预处理非常重要:关闭 swap、时间同步、内核转发、主机互通,环境不对,部署必然失败。
  2. 控制平面负责集群决策调度,worker 节点真正执行业务 Pod。所有状态数据全部存于 etcd,apiserver 是所有组件交互唯一入口。
  3. CNI 网络属于独立组件,K8s 内核不实现 Pod 网络,必须安装第三方网络插件。
相关推荐
dongchen。2 小时前
K8s部署实操
云原生·容器·kubernetes
xiaoxiangsiyan3 小时前
全网IPv6规模化改造实战指南
运维·网络·笔记·云原生·自动化
高卧怡怡3 小时前
Kubernetes的部署和环境配置
云原生·容器·kubernetes
nuo5342025 小时前
进阶 1 —— Docker 中常见软件的复杂安装
docker·容器
苍狗T5 小时前
K8s 集群实战:基于 Harbor 私有仓库 + cri‑dockerd 完整部署
linux·运维·云原生·容器·kubernetes
明王明王5 小时前
从零搭建一个单节点 K8S 可观测实验室(十二):告警与故障注入——从 Pending、Firing 到故障恢复
云原生·容器·kubernetes
吃不吃早饭5 小时前
RHEL9 搭建 Harbor 私有仓库与 Ansible 自动化部署 Kubernetes 运行环境完整实践
kubernetes·自动化·ansible
分布式存储与RustFS7 小时前
RustFS 监控实战:OpenTelemetry Collector 把指标接入 Prometheus + Grafana
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
奇特認16 小时前
kubernetes 环境部署
云原生·容器·kubernetes