【实战】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 更轻量,部署更简单。
-
Docker安装路线图完全指南:运维工程师必备手册安装前准备1. 确认系统架构Windows:打开「设置 → 系统 → 系统信息」,查看「系统类型」确认是 x64 还是 ARM64macOS:点击左上角苹果图标 → 关于本机,查看「芯片」确认是 Apple Silicon(M1/M2/M3)还是 IntelLinux:终端执行 uname -m,输出 x86_64 为 AMD64,aarch64 为 ARM642. 卸载旧...
-
为什么推荐Traefik?深度对比与实测Traefik(发音为 traffic)是一款专为微服务架构和云原生环境设计的现代化开源 HTTP 反向代理和负载均衡器。与传统的反向代理(如 Nginx)不同,Traefik 的核心优势在于自动化服务发现与动态配置,它能实时监听基础设施的变化并自动更新路由规则,全程无需重启服务。核心...
-
为什么推荐全站加速?深度对比与实测全站加速(通常被称为 WSA、ECDN 或 ICDN)是一种融合了动态加速和静态加速的网站加速解决方案。它专门针对动静态内容混合的网站,能够同时解决静态资源加载慢和动态请求延迟高的问题。核心原理:动静分离与智能路由全站加速的核心在于“动静分离”和“智能路由...
-
SRE面试速成详解:从入门到生产环境实践SRE(站点可靠性工程)面试的核心,在于考察你是否具备“用软件工程思维解决运维问题”的能力。结合你平时对软件开发技术和前沿科技资讯的关注,以下为你梳理了一份高效的 SRE 面试速成指南:核心思维:SRE 到底在做什么?SRE 不是传统的运维,而是“当软件工程师...
-
Jenkins安全加固教程最佳实践:资深运维的私藏技巧文库里暂时没有收录 Jenkins 安全加固的专题文档,视频资源也未检索到。下面我基于 Jenkins 官方文档和 SANS 的加固指南,为你整理一份可直接落地的教程,并在文末附上官方权威文档链接供你收藏。第一道防线:启用并收紧认证授权Jenkins 默认安装后处于“裸奔”状...
-
Nginx详解:从入门到生产环境实践Nginx(发音为 "engine X")是一款开源的高性能 Web 服务器和反向代理服务器。它由俄罗斯程序员 Igor Sysoev 于 2004 年发布,最初是为了解决高并发场景下的 C10K 问题(即单机支持 1 万并发连接)而设计的。凭借极低的资源消耗和卓越的并发处理能力,Nginx 已成为现代互联网架...