K8s 集群部署方法原理详解:从架构到实战 1.引言Kubernetes简称 K8s作为当今最主流的容器编排平台已经成为云原生时代的“操作系统”。无论是中小团队还是大型企业掌握 K8s 集群的部署方法都是迈向云原生架构 的关键一步。本文将系统性地梳理 K8s 集群的整体架构、核心组件职责、三种主流部署方式并结合实际实验带你从零搭建一套可用的 Kubernetes 集群。全文既有原理剖析也有可直接复制的实战命令适合有一定 Linux 和 Docker 基础、希望深入理解 K8s 部署原理的读者。2.Kubernetesernetes 集群整体架构一个标准的 Kubernetes 集群主要由**控制节点Master 和工作节点Node**构成。每个节点上都会安装不同的组件各司其职、协同工作。控制平面Master负责集群的决策与调度管理是集群的大脑。工作节点Node真正运行业务 Pod 的地方是集群的四肢。底层依赖所有节点都需要容器运行时如 Docker、containerd来支撑容器的运行。2.1 控制平面核心组件Master控制平面负责集群的所有决策包含以下四个核心组件组件名称核心职责关键特性API Server (kube-apiserver)集群的统一入口所有资源操作的唯一访问点。提供 RESTful API负责认证、授权、准入控制是其他组件通信的枢纽。etcd分布式键值存储数据库保存集群的所有配置数据和状态。高可用、强一致性是集群的“唯一真相源”所有组件状态最终存储于此。Controller Manager (kube-controller-manager)运行各种控制器确保集群的实际状态与期望状态一致。包含节点控制器、副本控制器、端点控制器等以控制循环方式工作。Scheduler (kube-scheduler)负责为新创建的 Pod 选择最合适的工作节点。基于资源需求、策略、亲和性/反亲和性等条件进行调度决策。这四个组件协同工作共同构成了 Kubernetes 集群的“大脑”。2.2 工作节点核心组件Node工作节点是集群的数据平面负责为容器提供运行环境其核心组件及职责如下组件名称核心职责关键特性kubelet节点上的“代理”负责与 API Server 通信管理 Pod 的生命周期。确保节点上 Pod 按预期运行执行容器健康检查挂载存储卷报告节点和 Pod 状态。kube-proxy维护节点上的网络规则实现 Service 的负载均衡和网络代理。支持 iptables、ipvs 等模式为 Pod 提供网络访问和负载均衡能力。Container Runtime负责拉取镜像、创建和运行容器如 Docker、containerd、CRI-O。通过 CRI (Container Runtime Interface) 与 kubelet 交互是 Pod 中容器运行的基础。这些组件协同工作使工作节点能够接收并执行来自控制平面的指令为业务 Pod 提供稳定、高效的运行环境。2.3 组件之间的调用关系当我们要运行一个 Web 服务时各组件之间的协作流程如下1.Kubernetes 环境启动之后Master 和 Node 都会将自身的信息存储到 Etcd 数据库中。2.Web 服务的安装请求会首先被发送到 Master 节点的 API Server 组件。3.API Server 组件会调用 Scheduler 组件来决定到底应该把这个服务安装到哪个 Node 节点上。此时Scheduler 会从 Etcd 中读取各个 Node 节点的信息按照一定的算法进行选择并将结果告知 API Server。4.API Server 调用 Controller Manager 去调度 Node 节点安装 Web 服务。5.kubelet 接收到指令后会通知容器运行时如 Docker由它来启动一个 Web 服务的 Pod。6.如果需要访问 Web 服务就需要通过 kube-proxy 来对 Pod 产生访问的代理。3. K8s 集群创建方式K8s 集群的创建方式主要有三种区别在于底层容器运行时的选择3.1 containerdcontainerd 是默认情况下 K8s 在创建集群时使用的容器运行时。它轻量、稳定是 CNCF 的毕业项目也是目前生产环境中最推荐的容器运行时。3.2 Docker cri-dockerdDocker 的使用普及率最高虽然 Kubernetes 在 1.24 版本后已经移除了 kubelet 对 Docker 的直接支持即移除 dockershim但可以借助 cri-dockerd 插件的方式来实现集群创建。实现集群创建。这种方式适合已有 Docker 使用习惯、希望平滑迁移的团队。3.3 CRI-OCRI-O 是 Kubernetes 创建容器最直接的一种方式专门为 K8s 而生不包含 Docker 的额外功能。在创建集群时需要借助 CRI-O 插件的方式来实现 Kubernetes 集群的创建。注意使用 Docker 和 CRI-O 这两种方式时需要对 kubelet 程序的启动参数进行相应设置。4. K8s 集群部署通用核心原理无论采用哪种部署方式K8s 集群的部署都遵循以下五个通用核心步骤4.1 环境预处理所有节点统一配置保证集群基础环境一致关闭防火墙/SELinux关闭 Swap开启内核转发时间同步配置 K8s 软件源4.2 证书体系构建K8s 所有组件通信基于TLS 双向证书认证。API Server、etcd、kubelet、客户端之间全部通过证书鉴权保证集群通信安全。所有部署方式都必须生成合法 SSL 证书。4.3 控制平面初始化部署 etcd、API Server、调度器、控制器完成集群数据存储与管理初始化搭建集群“大脑”。4.4 工作节点注册加入Worker 节点通过 join 指令携带令牌与证书向 API Server 注册被集群识别纳入管理。4.5 部署 CNI 网络插件补齐集群网络能力实现 Pod 跨主机通信、Service 网络转发集群真正可用。5. K8s 集群部署实战下面以Docker cri-dockerd方式为例完整演示一套 K8s 集群的搭建过程。实验环境规划如下节点角色主机名IP地址操作系统硬件配置软件版本Master (控制平面)k8s-master192.168.1.100Ubuntu 22.04 LTS2核CPU, 4GB内存, 50GB磁盘Kubernetes v1.28, Docker 24.0, cri-dockerd v0.3.7Node1 (工作节点)k8s-node1192.168.1.101Ubuntu 22.04 LTS2核CPU, 4GB内存, 50GB磁盘Kubernetes v1.28, Docker 24.0, cri-dockerd v0.3.7Node2 (工作节点)k8s-node2192.168.1.102Ubuntu 22.04 LTS2核CPU, 4GB内存, 50GB磁盘Kubernetes v1.28, Docker 24.0, cri-dockerd v0.3.7环境说明网络规划所有节点在同一局域网段确保网络互通。主机名已按规划配置避免使用默认主机名。时间同步所有节点已配置 NTP 服务时间偏差小于 1 秒。软件源已配置阿里云 Kubernetes 和 Docker 镜像源加速安装过程。5.1 构建 Harbor 镜像仓库5.1.1 部署 Docker 本地仓库首先在 Harbor 主机上搭建一个基于 HTTPD 的 Docker 软件仓库用于离线分发 Docker 安装包# 安装 httpd 和 createrepo [rootharbor ~]# dnf install httpd createrepo -y # 创建仓库目录 [rootharbor ~]# mkdir /var/www/html/docker/ -p # 修改 httpd 监听端口为 4444 [rootharbor ~]# vim /etc/httpd/conf/httpd.conf Listen 4444 # 启动 httpd [rootharbor ~]# systemctl enable --now httpd # 下载 docker-ce 安装包到本地 [rootharbor ~]# dnf install docker-ce --downloadonly --destdir /mnt/ -y # 移动 rpm 包到仓库目录 [rootharbor ~]# mv /mnt/*.rpm /var/www/html/docker/ # 生成仓库元数据 [rootharbor ~]# createrepo -v /var/www/html/docker/5.1.2 配置 Docker 软件源[rootharbor ~]# cat /etc/yum.repos.d/docker.repo EOF [docker] name docker baseurl http://172.25.254.254:4444/docker gpgcheck 0 EOF # 安装 docker-ce [rootharbor ~]# dnf install docker-ce -y5.1.3 生成 Harbor 证书# 创建证书目录 [rootharbor ~]# mkdir /data/certs -p # 生成自签名证书 [rootharbor ~]# openssl req -newkey rsa:4096 \ -nodes -sha256 -keyout /data/certs/timinglee.org.key \ -x509 -days 3650 -out /data/certs/timinglee.org.crt \ -subj /CNreg.timinglee.org \ -addext subjectAltNameDNS:reg.timinglee.org,IP:172.25.254.2005.1.4 编辑 Harbor 配置文件并启动# 编辑 harbor.yml配置 hostname、证书路径等 [rootharbor ~]# vim /data/harbor/harbor.yml # 启动 Harbor [rootharbor ~]# docker compose up -d [rootharbor ~]# systemctl enable --now harbor [rootharbor harbor]# docker compose ps5.1.5 配置 Docker 信任 Harbor 证书# 创建证书信任目录 [rootharbor harbor]# mkdir /etc/docker/certs.d/reg.timinglee.org/ -p # 复制证书 [rootharbor harbor]# cp /data/certs/timinglee.org.crt /etc/docker/certs.d/reg.timinglee.org/ca.crt # 配置 hosts 解析 [rootharbor harbor]# vim /etc/hosts 172.25.254.200 harbor reg.timinglee.org # 重启 Docker 并登录验证 [rootharbor harbor]# systemctl restart docker [rootharbor harbor]# docker login reg.timinglee.org -u admin5.2 集群节点基础环境准备5.2.1 关闭 Swap所有节点执行systemctl disable --now swap.target systemctl mask swap.target sed /swap/s/^/#/g -i /etc/fstab5.2.2 安装 Docker 并配置 Harbor 加速# 在 Harbor 主机中分发证书到所有节点 [rootharbor ~]# for i in 100 10 20 do scp /data/certs/timinglee.org.crt root172.25.254.$i:/etc/docker/certs.d/reg.timinglee.org/ca.crt done # 所有节点启动 docker systemctl enable docker systemctl restart docker # 所有节点配置 docker 加速器 cat /etc/docker/daemon.json EOF { registry-mirrors:[https://reg.timinglee.org] } EOF systemctl restart docker5.2.3 配置主机名解析所有节点编辑/etc/hostsvim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.25.254.100 master 172.25.254.10 node1 172.25.254.20 node2 172.25.254.200 reg.timinglee.org5.2.4 配置 Kubernetes 安装源所有节点配置vim /etc/yum.repos.d/kubernetes.repo [kubernetes] name Kubernetes baseurl https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.35/rpm gpgcheck 0 # 检测软件源 dnf list kubelet5.3 Kubernetes 部署5.3.1 安装 cri-dockerd由于 Kubernetes 1.24 版本后移除了 dockershim需要安装 cri-dockerd 插件才能继续使用 Docker 作为容器运行时# 下载二进制包 [rootdocker-node1 ~]# wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.4.4/cri-dockerd-0.4.4.amd64.tgz # 解压二进制压缩包 [rootdocker-node1 ~]# tar zxf cri-dockerd-0.4.4.amd64.tgz [rootdocker-node1 ~]# cd cri-dockerd5.3.2 配置 cri-dockerd 服务编辑 cri-dockerd 的 systemd 服务文件指定网络插件和基础容器镜像vim /lib/systemd/system/cri-docker.service [Unit] DescriptionCRI Interface for Docker Application Container Engine Documentationhttps://docs.mirantis.com Afternetwork-online.target firewalld.service docker.service Wantsnetwork-online.target Requirescri-docker.socket [Service] Typenotify # 指定网络插件名称及基础容器镜像 ExecStart/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugincni --pod-infra-container-imagereg.timinglee.org/k8s/pause:3.9 ExecReload/bin/kill -s HUP $MAINPID TimeoutSec0 RestartSec2 Restartalways # 启动服务 systemctl daemon-reload systemctl start cri-docker.service # 验证套接字文件 ll /var/run/cri-dockerd.sock5.3.3 在 Master 节点拉取 K8s 所需镜像# 拉取 k8s 集群所需要的镜像 [rootk8s-master ~]# kubeadm config images pull \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.30.0 \ --cri-socketunix:///var/run/cri-dockerd.sock # 上传镜像到 Harbor 仓库 [rootk8s-master ~]# docker images --format {{.Repository}}:{{.Tag}} | awk -F / /google/{system(docker tag $0 reg.timinglee.org/k8s/$3)} [rootmaster-node ~]# docker images --format {{.Repository}}:{{.Tag}} | awk -F / /timinglee/{system(docker push $0)}5.3.4 集群初始化# 启动 kubelet 服务 [rootk8s-master ~]# systemctl status kubelet.service # 执行初始化命令 [rootk8s-master ~]# kubeadm init --pod-network-cidr10.244.0.0/16 \ --image-repository reg.timinglee.org/k8s \ --kubernetes-version v1.30.0 \ --cri-socketunix:///var/run/cri-dockerd.sock # 指定集群配置文件变量 [rootk8s-master ~]# echo export KUBECONFIG/etc/kubernetes/admin.conf ~/.bash_profile # 查看节点状态此时为 NotReady因为还没安装网络插件 [rootk8s-master ~]# kubectl get node NAME STATUS ROLES AGE VERSION k8s-master.timinglee.org NotReady control-plane 4m25s v1.30.05.3.5 安装 Flannel 网络插件# 下载 Flannel 的 YAML 部署文件 [rootk8s-master ~]# wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml # 下载镜像并上传到 Harbor 仓库 [rootk8s-master ~]# docker pull docker.io/flannel/flannel:v0.25.5 [rootk8s-master ~]# docker pull docker.io/flannel/flannel-cni-plugin:v1.5.1-flannel1 [rootk8s-master ~]# docker tag flannel/flannel:v0.25.5 reg.timinglee.org/flannel/flannel:v0.25.5 [rootk8s-master ~]# docker push reg.timinglee.org/flannel/flannel:v0.25.5 [rootk8s-master ~]# docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1 [rootk8s-master ~]# docker push reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1 # 编辑 kube-flannel.yml修改镜像下载位置 [rootk8s-master ~]# vim kube-flannel.yml # 修改以下几行 146: image: reg.timinglee.org/flannel/flannel:v0.25.5 173: image: reg.timinglee.org/flannel/flannel-cni-plugin:v1.5.1-flannel1 # 安装 Flannel 网络插件 [rootk8s-master ~]# kubectl apply -f kube-flannel.yml5.3.6 节点扩容Worker 加入集群在所有 Worker 节点上确认部署好以下内容后即可加入集群1.禁用 Swap2.安装 kubelet、kubeadm、kubectl、docker-ce、cri-dockerd3.修改 cri-dockerd 启动文件添加 --network-plugincni 和 --pod-infra-container-imagereg.timinglee.org/k8s/pause:3.94.启动 kubelet 和 cri-docker 服务# 在 Worker 节点执行 join 命令 [rootk8s-node1 2 ~]# kubeadm join 172.25.254.100:6443 \ --token 5hwptm.zwn7epa6pvatbpwf \ --discovery-token-ca-cert-hash sha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23 \ --cri-socketunix:///var/run/cri-dockerd.sock # 在 master 节点查看所有 node 状态 [rootk8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master.timinglee.org Ready control-plane 98m v1.30.0 k8s-node1.timinglee.org Ready none 21m v1.30.0 k8s-node2.timinglee.org Ready none 21m v1.30.0提示所有节点的 STATUS 为 Ready 状态说明 Kubernetes 集群已经搭建成功5.4 验证集群# 创建一个测试 Pod [rootk8s-master ~]# kubectl run test --image nginx # 查看 Pod 状态 [rootk8s-master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE test 1/1 Running 0 6m29s # 删除 Pod [rootk8s-master ~]# kubectl delete pod test

相关新闻

最新新闻

心理咨询室设备哪里买?2026年采购渠道指南

心理咨询室设备哪里买?2026年采购渠道指南

心理咨询室设备哪里有卖?从选购到落地一篇讲清如果你正在为“心理咨询室设备哪里有卖”而发愁,我的核心建议是:别急着搜“设备”两个字,先找能提供整体方案的心理专业设备供应商——比如 湖南玖辰智联科技有限公司,这类…

2026/8/24 21:08:33
Nacos服务实例频繁掉线:系统性排查与稳定性加固指南

Nacos服务实例频繁掉线:系统性排查与稳定性加固指南

这次我们来看一个微服务开发中非常实际的问题:Nacos 服务实例频繁掉线。这绝不是简单的网络抖动,背后往往隐藏着配置、心跳、网络或资源层面的深层原因。如果你正在使用 Nacos 作为注册中心,并且遇到了服务“时好时坏”、频繁从服务列表消失的…

2026/8/24 21:08:33
Python开发Windows系统托盘工具:实时监控AI服务API余额

Python开发Windows系统托盘工具:实时监控AI服务API余额

如果你正在使用 Codex 这类 AI 服务,并且是 Windows 用户,那么下面这个场景你一定不陌生: 打开浏览器,登录官网,在一堆菜单里找到余额查询页面,刷新,然后关掉。每天重复几次,只为确…

2026/8/24 21:08:33
大语言模型训练实战指南:从环境搭建到部署优化的全流程解析

大语言模型训练实战指南:从环境搭建到部署优化的全流程解析

在实际 AI 大模型研发领域,模型训练是一个资源消耗巨大的过程,涉及海量数据、复杂算法和昂贵的硬件投入。近期,行业内出现了一些关于 AI 实验室为下一轮大规模模型训练进行人员调整的讨论,这背后反映的是一个更深层的技术现实&…

2026/8/24 21:08:33
华源证券Android开发面试核心考点解析

华源证券Android开发面试核心考点解析

1. 华源证券Android开发工程师面试核心考察方向作为金融科技领域的头部券商,华源证券对Android开发工程师的技术考察具有鲜明的行业特性。根据近三年面试真题分析,其技术栈考察呈现"移动基础金融特性安全合规"的三层结构:基础能力层…

2026/8/24 21:08:33
AI智能体与Gmail深度集成:Lindy Chrome扩展实战指南

AI智能体与Gmail深度集成:Lindy Chrome扩展实战指南

1. 这篇文章真正要解决的问题如果你每天需要处理大量Gmail邮件,从筛选重要信息、草拟回复到整理归档,这些重复性工作会消耗大量精力。传统的邮件客户端自动化工具往往功能单一,要么只能设置简单的过滤器,要么需要复杂的脚本编程&a…

2026/8/24 21:03:33