文章目录前言一、先搞懂三种 K8s 工具到底干嘛的新手必看1.1 kubeadm集群「安装工程师」1.2 kubelet节点「打工人服务」1.3 kubectl集群「操作遥控器」1.4 三者一句话总结永久记住二、K8s 环境选型为什么不用 minikube2.1 minikube不推荐学习企业开发2.2 kubeadm本篇采用企业标准三、集群环境规划四、所有节点前置环境初始化必做、零报错配置4.1 关闭交换分区K8s 硬性要求4.2 关闭防火墙、SELinux4.3 开启内核网络转发容器互通必备五、安装容器运行时 ContainerdK8s 官方标配5.1 安装 Containerd5.2 配置国内镜像 标准驱动六、安装 K8s 三大核心工具6.1 配置阿里云 K8s 国内源6.2 安装稳定版 K8s 工具集七、初始化 Master 主节点搭建集群核心7.1 初始化命令核心参数全解7.2 初始化成功后必配权限7.3 单机专属配置关键八、安装 Calico 网络插件集群变 Ready 关键九、验证集群是否搭建成功十、实战 Demo用 K8s 部署一个 Nginx完整落地实验10.1 部署 Nginx 服务10.2 查看部署状态10.3 暴露端口外网可访问10.4 查看访问端口10.5 体验 K8s 自愈能力核心亮点10.6 动态扩容演示十一、新手常见报错快速修复11.1 节点一直 NotReady11.2 镜像拉取失败11.3 集群重装重置十二、本篇总结前言上一篇我们搞懂了 K8s 是用来替代 Docker Compose、管理生产集群容器的企业级工具。理论说完本篇直接落地从零搭一套能真正干活的 K8s 集群。很多新手学 K8s 卡在这里的核心原因只有三个\1. 分不清kubeadm / kubelet / kubectl三个命令到底谁是谁、干什么用\2. 只会复制命令不懂参数含义报错完全不会排查\3. 国外镜像拉不下来、各种报错搭完集群无实战验证。本篇全部解决白话讲概念 每条命令带参数详解 国内零报错部署 Nginx 完整实战 Demo做到知其然、更知其所以然。一、先搞懂三种 K8s 工具到底干嘛的新手必看所有 K8s 报错、看不懂配置、不懂架构90% 都是因为分不清这三个工具我用最通俗的大白话讲清楚一次性彻底弄懂。1.1 kubeadm集群「安装工程师」核心作用只负责搭建集群它的唯一工作帮你一键初始化 Master 主节点、生成集群配置、让子节点加入集群。通俗理解kubeadm 就是专门用来装 K8s 集群的工具集群搭好之后平时基本不用它。常用场景初始化集群、节点加入、重置集群。1.2 kubelet节点「打工人服务」核心作用常驻后台干活的进程每一台 K8s 节点Master/Node都必须装 kubelet。通俗理解kubelet 运行在每一台服务器上负责监听 Master 的指令让你启动容器就启动、让你删容器就删容器、监控本地 Pod 状态。它是一直后台运行的服务不需要你手动调用集群核心组件。1.3 kubectl集群「操作遥控器」核心作用我们平时敲的所有 K8s 命令全靠它通俗理解kubeadm 把房子集群建好kubelet 在房子里干活kubectl 就是我们手里的遥控器。我们执行的查看节点、部署项目、重启服务、查看日志全部都是kubectl命令。1.4 三者一句话总结永久记住kubeadm建房的搭建集群一次性工作kubelet干活的节点常驻服务持续运行kubectl操控的我们日常管理集群的工具二、K8s 环境选型为什么不用 minikube2.1 minikube不推荐学习企业开发minikube 是给新手体验玩具环境的单节点、阉割版 K8s。缺点没有主从架构、不能多节点调度、不能模拟生产场景、学完无法对接企业项目。2.2 kubeadm本篇采用企业标准kubeadm 搭建的是完整标准 K8s 集群和公司生产环境一模一样。支持单机伪集群、多节点集群、扩容、自愈、网络插件学完直接上岗可用。三、集群环境规划为适配个人学习本篇主打单机伪集群一台服务器搞定所有一台服务器既是 Master 管理节点也当 Node 工作节点低配机器也能跑通全套流程。统一前置要求CentOS7/8、2核4G、可联网、关闭防火墙、关闭交换分区四、所有节点前置环境初始化必做、零报错配置K8s 对系统非常挑剔以下所有命令直接复制执行附带详细参数解释彻底弄懂每一步作用。4.1 关闭交换分区K8s 硬性要求开启虚拟内存会导致集群调度混乱、容器卡顿、调度失败必须关闭# 临时关闭交换分区重启服务器失效swapoff-a# 永久关闭交换分区注释fstab中swap挂载重启不恢复sed-i/swap/s/^/#//etc/fstab参数详解swapoff -a关闭系统所有交换分区sed -i直接修改文件内容不进入编辑模式/swap/s/^/#/匹配以swap开头的行在行首加#注释禁用开机自动挂载swap4.2 关闭防火墙、SELinux学习环境直接关闭防护避免端口拦截、集群节点通信失败# 临时关闭防火墙systemctl stop firewalld# 禁用防火墙开机自启systemctl disable firewalld# 临时关闭SELinuxsetenforce0# 永久关闭SELinuxsed-is/^SELINUXenforcing/SELINUXdisabled//etc/selinux/config参数详解systemctl stop立即停止当前运行服务systemctl disable取消服务开机自启setenforce 0临时将SELinux改为宽容模式4.3 开启内核网络转发容器互通必备让服务器支持容器网桥转发、内网跨容器通信是K8s网络基础依赖# 加载网桥过滤内核模块modprobe br_netfilter# 加载overlay分层文件系统模块容器存储依赖modprobe overlay# 写入K8s必备内核网络配置cat/etc/sysctl.d/k8s.confEOF net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOF# 生效所有内核配置sysctl--system参数详解modprobe加载Linux内核模块cat 文件覆盖写入文件内容sysctl --system重新加载所有系统内核参数无需重启三条网络参数开启网桥转发、开启IPv4转发保证Pod跨节点通信五、安装容器运行时 ContainerdK8s 官方标配新版 K8s 不再默认使用 Docker统一使用 Containerd我们安装标准运行时配置国内镜像加速解决拉取超时问题。5.1 安装 Containerd# 安装yum工具依赖用于添加软件源yuminstall-yyum-utils# 添加阿里云Docker/Containerd国内源yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装containerd容器运行时yuminstall-ycontainerd.io# 开机自启并立即启动containerdsystemctlenable--nowcontainerd参数详解yum install -y静默安装自动确认所有选项yum-config-manager --add-repo添加第三方软件源systemctl enable --now立即启动服务 设置开机自启5.2 配置国内镜像 标准驱动# 生成containerd默认配置文件containerd config default/etc/containerd/config.toml# 修改为K8s强制要求的systemd驱动sed-is/SystemdCgroup \ false/SystemdCgroup \ true/g/etc/containerd/config.toml# 替换谷歌官方镜像源为阿里云国内源sed-is#registry.k8s.io#registry.aliyuncs.com/google_containers#g/etc/containerd/config.toml# 重启服务使配置生效systemctl restart containerd参数详解config default输出containerd完整默认配置sed -i 替换批量修改配置文件关键参数SystemdCgrouptrueK8s强制要求的资源管控驱动否则集群启动失败六、安装 K8s 三大核心工具一次性装好kubeadm建集群、kubelet跑服务、kubectl管集群6.1 配置阿里云 K8s 国内源cat/etc/yum.repos.d/kubernetes.repoEOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled1 gpgcheck0 repo_gpgcheck0 EOF参数详解name软件源名称baseurl阿里云K8s稳定yum源地址enabled1启用该软件源gpgcheck0关闭密钥校验避免证书报错6.2 安装稳定版 K8s 工具集# 安装指定版本K8s三件套禁止版本冲突yuminstall-ykubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2--disableexcludeskubernetes# kubelet开机自启systemctlenable--nowkubelet参数详解--disableexcludeskubernetes解除系统版本锁定避免安装失败统一v1.28.2版本保证三件套版本一致杜绝版本不兼容报错 此时 kubelet 显示报错、重启属于正常现象因为集群还没初始化找不到配置无需处理。七、初始化 Master 主节点搭建集群核心只在主节点执行一键搭建 K8s 控制平面全程国内镜像无超时、无失败。7.1 初始化命令核心参数全解注意把下面 IP 换成你自己服务器的内网 IPkubeadm init\--apiserver-advertise-address192.168.3.100\--image-repository registry.aliyuncs.com/google_containers\--kubernetes-versionv1.28.2\--service-cidr10.96.0.0/12\--pod-network-cidr10.244.0.0/16逐行参数详解新手必背--apiserver-advertise-address指定Master节点通信内网IP子节点通过这个IP连接主节点--image-repository指定K8s核心镜像拉取仓库替换国内阿里云源解决谷歌镜像拉取失败--kubernetes-version锁定集群版本保证所有节点、组件版本统一--service-cidr集群内部Service虚拟IP网段固定默认值即可--pod-network-cidrPod容器IP网段必须和后续Calico网络插件配置匹配7.2 初始化成功后必配权限否则普通用户无法操作 kubectl 命令会提示权限不足# 创建kubectl配置文件目录mkdir-p$HOME/.kube# 拷贝集群管理员配置文件到当前用户目录sudocp-i/etc/kubernetes/admin.conf$HOME/.kube/config# 授权当前用户拥有配置文件所有权sudochown$(id-u):$(id-g)$HOME/.kube/config参数详解mkdir -p递归创建目录目录存在不报错cp -i覆盖文件前提示确认避免误覆盖chown修改文件所属用户、用户组$(id -u):$(id -g)自动获取当前用户ID和组ID适配任意服务器7.3 单机专属配置关键K8s 默认有污点机制禁止 Master 管理节点跑业务容器单机学习必须放开限制kubectl taint nodes--allnode-role.kubernetes.io/control-plane-参数详解taint节点污点管理命令用于限制节点调度规则--all作用于所有节点末尾-代表删除对应污点允许Master节点调度业务Pod八、安装 Calico 网络插件集群变 Ready 关键初始化完集群节点为NotReady核心原因是缺少网络组件Pod之间无法互通、跨节点无法通信。本篇提供永久可用离线YAML方案无需依赖外网链接100%部署成功新建 calico.yaml 文件粘贴适配v1.28版本的完整配置内置国内镜像保存退出后执行部署# 应用网络插件配置到集群kubectl apply-fcalico.yaml参数详解kubectl apply声明式创建/更新集群资源企业标准-f指定资源配置文件路径支持本地/远程文件等待 1-3 分钟网络组件全部启动查看启动状态# 查看kube-system命名空间下所有Pod状态kubectl get pods-nkube-system参数详解get pods查看集群Pod运行状态-n指定命名空间k8s系统组件默认在kube-system命名空间九、验证集群是否搭建成功执行核心校验命令节点显示Ready代表集群完全搭建成功# 查看所有集群节点状态kubectl get nodes参数详解get nodes查看集群所有节点信息、状态、版本成功标准节点状态为 Ready无报错、无异常。十、实战 Demo用 K8s 部署一个 Nginx完整落地实验集群搭完必须跑服务验证手把手实现部署、访问、自愈、扩容直观感受K8s生产核心能力。10.1 部署 Nginx 服务创建 Deployment 控制器管理Nginx Pod实现高可用# 部署nginx指定2个副本容器kubectl create deployment nginx-demo--imagenginx:alpine--replicas2参数详解create deployment创建无状态服务部署控制器nginx-demo自定义部署名称可随意修改--image指定容器镜像名称版本alpine为轻量稳定版--replicas2指定运行2个Pod副本实现简单高可用10.2 查看部署状态# 查看所有业务Pod状态kubectl get pods# 查看所有部署控制器信息kubectl get deploy参数详解get deploy查看副本数、就绪数、运行状态看到状态 Running 说明 Nginx 容器已经在 K8s 集群中正常运行。10.3 暴露端口外网可访问Pod IP是动态临时IP重启即变必须通过Service暴露固定端口实现稳定外网访问# 暴露服务端口外网可访问kubectl expose deployment nginx-demo--port80--typeNodePort参数详解expose deployment为部署资源创建Service服务--port80容器内部服务端口Nginx默认端口--typeNodePort节点端口模式外网可通过服务器IP随机端口访问10.4 查看访问端口# 查看所有服务端口信息kubectl get svc参数详解get svc查看集群所有Service服务、端口、IP看到 80:xxxx/TCP末尾随机端口即为外网访问端口。浏览器访问服务器公网IP:随机端口即可看到 Nginx 欢迎页面。10.5 体验 K8s 自愈能力核心亮点手动删除Pod模拟容器故障验证K8s自愈机制# 删除指定Pod替换为你的Pod名称kubectl delete pod nginx-demo-xxxx# 再次查看Pod状态kubectl get pods参数详解delete pod删除指定容器Pod现象删掉一个立刻新建一个始终维持2个副本业务无中断这就是K8s生产核心的故障自愈10.6 动态扩容演示模拟业务流量暴涨一键扩容服务实例无需停机、无需重装# 扩容到4个运行实例kubectl scale deployment nginx-demo--replicas4kubectl get pods参数详解scale deployment动态调整部署副本数量--replicas4将运行容器实例数量调整为4个秒级扩容完成这就是 K8s 适配生产高并发的核心优势。十一、新手常见报错快速修复11.1 节点一直 NotReady99% 是网络插件未启动成功重新执行kubectl apply -f calico.yaml等待1-3分钟即可恢复。11.2 镜像拉取失败全文已替换为阿里云稳定镜像源本地完整Calico配置严格按文档操作可100%规避拉取超时、解析失败问题。11.3 集群重装重置# 一键重置集群所有配置kubeadm reset-f# 清空用户集群配置rm-rf$HOME/.kube参数详解reset -f强制重置集群无需手动确认rm -rf强制删除目录及所有文件彻底清空配置十二、本篇总结1、三大核心工具彻底分清kubeadm 建集群、kubelet 后台干活、kubectl 命令管理零基础也能理解分工逻辑2、企业学习统一使用 kubeadm 标准集群摒弃 minikube 玩具环境学习内容完全对齐生产3、本篇补齐所有命令参数详解告别只会复制、不懂原理的误区报错可自行排查4、全程国内镜像本地离线Calico配置彻底解决外网链接失效、镜像拉取失败问题新手零踩坑5、通过Nginx完整Demo实战验证K8s部署、外网访问、故障自愈、动态扩容四大生产核心能力6、至此拥有一套稳定、标准、可实战的生产级K8s集群彻底告别Docker Compose单机部署。