【实战】K8s部署教程,一步步带你搞定
Kubernetes(K8s)的部署方式主要取决于你的使用场景。结合你具备的网站开发与运维背景,我为你梳理了从“本地开发”到“生产环境”的完整部署路径。
1. 本地开发环境(推荐 Kind + Helm)
如果你是为了学习、测试或本地开发,强烈推荐使用 Kind (Kubernetes IN Docker)。它能在 Docker 容器中快速创建 K8s 集群,无需占用多台虚拟机。
核心工具链:
kubectl:K8s 的命令行工具,用于操作集群资源。
Kind:在 Docker 容器中创建 K8s 集群。
Helm:K8s 的包管理器,用于一键安装和管理复杂应用。
快速上手步骤(以 macOS 为例):
安装工具:brew install kubectl kind helm
创建集群:kind create cluster --name study
验证节点:kubectl get nodes(等待状态变为 Ready)
部署应用:kubectl create deployment web --image=nginx
暴露服务:kubectl expose deployment web --port=80
本地访问:kubectl port-forward service/web 8080:80,然后浏览器访问 http://localhost:8080
2. 生产环境部署(kubeadm 标准流程)
如果是为了搭建真实的生产或测试集群,kubeadm 是官方推荐的标准化工具。以下是一个基于 Linux(如 Debian/Ubuntu/CentOS)的生产级部署核心流程:
第一步:系统初始化(所有节点必做)
这是最基础也最容易出错的环节,必须统一配置:
关闭 Swap:K8s 要求必须关闭交换分区(swapoff -a 并注释 /etc/fstab 中的 swap 行)。
禁用 SELinux 和防火墙:或放行必要的 K8s 端口(如 6443, 10250 等)。
配置主机名与 Hosts:确保所有节点能通过主机名互相解析。
时间同步:安装并启用 chrony 或 ntpd,避免节点时间不一致导致证书校验失败。
加载内核模块:加载 overlay 和 br_netfilter,并设置 net.bridge.bridge-nf-call-iptables = 1 等网络参数。
第二步:部署容器运行时
K8s 1.24+ 版本已弃用 Dockershim,推荐使用 containerd:
安装 containerd 并生成默认配置。
关键配置:修改 /etc/containerd/config.toml,将 SystemdCgroup 设置为 true,确保与 kubelet 的 cgroup 驱动一致。
配置国内镜像加速器(如阿里云),解决拉取镜像慢的问题。
第三步:安装 K8s 核心组件
在所有节点安装 kubelet、kubeadm 和 kubectl,并设置开机自启。建议锁定版本,避免意外升级导致兼容性问题。
第四步:初始化 Master 节点
仅在 Master 节点执行:
bash
编辑
1kubeadm init
2--pod-network-cidr=10.244.0.0/16
3--apiserver-advertise-address=
注意:--pod-network-cidr 的网段需要根据你后续选择的 CNI 网络插件来定(例如 Flannel 默认用 10.244.0.0/16,Calico 常用 192.168.0.0/16)。
初始化成功后,按照提示配置 kubectl 的访问凭证(复制 admin.conf 到 ~/.kube/config)。
第五步:部署 CNI 网络插件
Master 节点初始化后,Pod 处于 Pending 状态是正常的,因为还没有网络插件。
Flannel:配置简单,适合入门和中小规模集群。bash
编辑
1kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
Calico:性能更好,支持网络策略,适合生产环境。
第六步:Worker 节点加入集群
在每台 Worker 节点上执行 kubeadm init 成功后输出的 kubeadm join ... 命令即可。
3. 常见踩坑与避坑指南
根据大量实战经验,以下问题最为高发:
表格
下载为表格
导出为图片
问题现象可能原因解决方案
节点 NotReadyCNI 插件未部署或配置错误检查 kubectl get pods -n kube-system,确保 CNI Pod 正常运行
Pod 一直 Pending资源不足或存在污点(Taint)使用 kubectl describe pod查看 Events,检查节点资源或 Master 污点
镜像拉取失败镜像地址错误或网络不通检查镜像仓库地址,配置镜像加速器,或提前手动拉取镜像
cgroup 驱动不匹配containerd 与 kubelet 配置不一致确保两者都使用 systemd 或都使用 cgroupfs
CoreDNS 异常网络插件未就绪或配置错误CoreDNS 依赖 CNI,先确保网络插件正常
4. 进阶建议
国内镜像源:部署全程建议使用阿里云等国内镜像源,包括 kubeadm 工具包和 K8s 系统镜像,能节省大量时间。
自动化运维:如果你需要管理多个集群或进行批量部署,建议学习 Ansible 或 Terraform,将上述手动步骤代码化。
轻量级替代:如果资源有限(如边缘计算、IoT),可以考虑 K3s,它比标准 K8s 更轻量,部署更简单。
-
一天学会金丝雀发布故障排查手册:常见报错一站式解决### 一天学会金丝雀发布故障排查手册:常见报错一站式解决金丝雀发布,作为现代微服务架构中风险控制的最后一道防线,其核心在于通过渐进式的流量切换来验证新版本的稳定性。然而,当那 1% 的流量切入新版本后,监控面板上的错误率突然飙升,或者请求响应...
-
2026年静态资源优化最新教程,运维必收藏#### 2026年静态资源优化最新教程,运维必收藏在2026年的今天,Web性能优化的战场已经发生了根本性的转移。过去我们津津乐道的“压缩图片”、“合并文件”虽然依然有效,但已不再是决胜的关键。随着React Server Components(RSC)的普及和Core Web Vitals指标向INP(Interaction to...
-
2025钉钉告警详解:从入门到生产环境实践### 2025钉钉告警详解:从入门到生产环境实践在数字化转型的深水区,系统的稳定性不再仅仅是运维团队的KPI,而是直接关乎企业的营收与品牌声誉。当Prometheus、Zabbix或自研的监控系统捕捉到异常时,如何让这些冰冷的数据在毫秒级内转化为运维人员手中的 actionabl...
-
通俗易懂FTP服务器最佳实践:资深运维的私藏技巧FTP(文件传输协议)作为互联网上最古老的协议之一,至今仍在企业文件共享、数据备份和网站维护中扮演着重要角色。然而,许多管理员在搭建FTP时往往只满足于“能连上”,却忽略了背后的安全隐患和性能瓶颈。作为一名资深运维,我深知一个“裸奔”的FTP服务器...
-
一文掌握内网穿透,效率提升300%### 一文掌握内网穿透,效率提升300%在数字化办公与远程协作日益普及的今天,我们常常面临这样一个痛点:家中的NAS无法在外网访问、公司的开发环境无法向客户演示、或者本地的Web服务无法让异地的同事协同调试。这些问题的根源在于我们身处一个巨大的局域网...
-
【收藏级】parted全套配置模板与脚本【收藏级】parted 全套配置模板与脚本说明: parted 用于 GPT/MBR 磁盘分区,适合 Linux(CentOS、Rocky、Ubuntu),必须 root 执行;所有示例以 /dev/sdb 为目标盘,替换成你自己的磁盘。 警告:下面脚本会清空整块磁盘数据,测试前确认磁盘路径,生产务必先备份!前置须知parted 两...