【实战】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 更轻量,部署更简单。
-
【实战】K8s部署教程,一步步带你搞定Kubernetes(K8s)的部署方式主要取决于你的使用场景。结合你具备的网站开发与运维背景,我为你梳理了从“本地开发”到“生产环境”的完整部署路径。1. 本地开发环境(推荐 Kind + Helm)如果你是为了学习、测试或本地开发,强烈推荐使用 Kind (Kubernetes IN Docker)。它能在 D...
-
一文掌握运维工具,效率提升300%运维工具种类繁多,通常根据其在服务器生命周期中承担的不同职责来进行分类。以下为你梳理了目前主流的运维工具,涵盖了从监控、自动化到容器化等核心方向:监控与可观测性工具这类工具负责实时掌握系统运行状态,是运维的“眼睛”。Prometheus:开源的监控...
-
一文掌握ps笔记,效率提升300%核心概念像素图 vs 矢量图表格下载为表格导出为图片类型特点常见格式像素图(点阵图)由像素构成,缩放会损失质量JPG、PNG、PSD、TIFF矢量图记录图像特征信息,基于算法生成,无限缩放不失真AI、SVG、EPS栅格化将矢量图形或智能对象转换为像素图形,转换后不可逆(无...
-
【实战】滚动更新大全,一步步带你搞定既然你具备网站开发与运维的底层能力,那我们就跳过基础的“重启服务”概念,直接从Kubernetes 架构设计、流量调度和高可用保障的角度,为你梳理一份生产级的“滚动更新(Rolling Update)”大全。在现代云原生架构中,滚动更新不仅仅是一个命令,它是一套结合了健...
-
邮件服务器面试宝典避坑指南:生产环境常见问题汇总既然你已经具备了网站开发与服务器运维的底层技术能力,那我们就跳过基础的“邮件是什么”,直接从架构设计、底层排查和安全防御的角度,为你梳理一份硬核的邮件服务器面试宝典。在面试中,面试官通常会考察你对协议的理解、故障排查的逻辑以及高可用架...
-
【收藏级】Docker怎么用全套配置模板与脚本Docker 就像是一个神奇的“集装箱”,它能把你的程序代码以及运行所需的所有环境(如系统库、配置文件等)全部打包在一起。这样,无论这个“集装箱”被搬到哪台电脑上,程序都能以完全相同的方式运行,彻底告别了“在我的电脑上明明能跑”的尴尬。对于初学者...