【实战】K8s部署教程,一步步带你搞定

2026-08-13 来源: 点击量

Kubernetes(K8s)的部署方式主要取决于你的使用场景。结合你具备的网站开发与运维背景,我为你梳理了从“本地开发”到“生产环境”的完整部署路径。

【实战】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部署教程,一步步带你搞定
    【实战】K8s部署教程,一步步带你搞定

    Kubernetes(K8s)的部署方式主要取决于你的使用场景。结合你具备的网站开发与运维背景,我为你梳理了从“本地开发”到“生产环境”的完整部署路径。1. 本地开发环境(推荐 Kind + Helm)如果你是为了学习、测试或本地开发,强烈推荐使用 Kind (Kubernetes IN Docker)。它能在 D...

  • 一文掌握运维工具,效率提升300%
    一文掌握运维工具,效率提升300%

    运维工具种类繁多,通常根据其在服务器生命周期中承担的不同职责来进行分类。以下为你梳理了目前主流的运维工具,涵盖了从监控、自动化到容器化等核心方向:监控与可观测性工具这类工具负责实时掌握系统运行状态,是运维的“眼睛”。Prometheus:开源的监控...

  • 一文掌握ps笔记,效率提升300%
    一文掌握ps笔记,效率提升300%

    核心概念像素图 vs 矢量图表格下载为表格导出为图片类型特点常见格式像素图(点阵图)由像素构成,缩放会损失质量JPG、PNG、PSD、TIFF矢量图记录图像特征信息,基于算法生成,无限缩放不失真AI、SVG、EPS栅格化将矢量图形或智能对象转换为像素图形,转换后不可逆(无...

  • 【实战】滚动更新大全,一步步带你搞定
    【实战】滚动更新大全,一步步带你搞定

    既然你具备网站开发与运维的底层能力,那我们就跳过基础的“重启服务”概念,直接从Kubernetes 架构设计、流量调度和高可用保障的角度,为你梳理一份生产级的“滚动更新(Rolling Update)”大全。在现代云原生架构中,滚动更新不仅仅是一个命令,它是一套结合了健...

  • 邮件服务器面试宝典避坑指南:生产环境常见问题汇总
    邮件服务器面试宝典避坑指南:生产环境常见问题汇总

    既然你已经具备了网站开发与服务器运维的底层技术能力,那我们就跳过基础的“邮件是什么”,直接从架构设计、底层排查和安全防御的角度,为你梳理一份硬核的邮件服务器面试宝典。在面试中,面试官通常会考察你对协议的理解、故障排查的逻辑以及高可用架...

  • 【收藏级】Docker怎么用全套配置模板与脚本
    【收藏级】Docker怎么用全套配置模板与脚本

    Docker 就像是一个神奇的“集装箱”,它能把你的程序代码以及运行所需的所有环境(如系统库、配置文件等)全部打包在一起。这样,无论这个“集装箱”被搬到哪台电脑上,程序都能以完全相同的方式运行,彻底告别了“在我的电脑上明明能跑”的尴尬。对于初学者...