【实战】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 更轻量,部署更简单。

相关文章
  • Docker安装路线图完全指南:运维工程师必备手册
    Docker安装路线图完全指南:运维工程师必备手册

    安装前准备1. 确认系统架构Windows:打开「设置 → 系统 → 系统信息」,查看「系统类型」确认是 x64 还是 ARM64macOS:点击左上角苹果图标 → 关于本机,查看「芯片」确认是 Apple Silicon(M1/M2/M3)还是 IntelLinux:终端执行 uname -m,输出 x86_64 为 AMD64,aarch64 为 ARM642. 卸载旧...

  • 为什么推荐Traefik?深度对比与实测
    为什么推荐Traefik?深度对比与实测

    Traefik(发音为 traffic)是一款专为微服务架构和云原生环境设计的现代化开源 HTTP 反向代理和负载均衡器。与传统的反向代理(如 Nginx)不同,Traefik 的核心优势在于自动化服务发现与动态配置,它能实时监听基础设施的变化并自动更新路由规则,全程无需重启服务。核心...

  • 为什么推荐全站加速?深度对比与实测
    为什么推荐全站加速?深度对比与实测

    全站加速(通常被称为 WSA、ECDN 或 ICDN)是一种融合了动态加速和静态加速的网站加速解决方案。它专门针对动静态内容混合的网站,能够同时解决静态资源加载慢和动态请求延迟高的问题。核心原理:动静分离与智能路由全站加速的核心在于“动静分离”和“智能路由...

  • SRE面试速成详解:从入门到生产环境实践
    SRE面试速成详解:从入门到生产环境实践

    SRE(站点可靠性工程)面试的核心,在于考察你是否具备“用软件工程思维解决运维问题”的能力。结合你平时对软件开发技术和前沿科技资讯的关注,以下为你梳理了一份高效的 SRE 面试速成指南:核心思维:SRE 到底在做什么?SRE 不是传统的运维,而是“当软件工程师...

  • Jenkins安全加固教程最佳实践:资深运维的私藏技巧
    Jenkins安全加固教程最佳实践:资深运维的私藏技巧

    文库里暂时没有收录 Jenkins 安全加固的专题文档,视频资源也未检索到。下面我基于 Jenkins 官方文档和 SANS 的加固指南,为你整理一份可直接落地的教程,并在文末附上官方权威文档链接供你收藏。第一道防线:启用并收紧认证授权Jenkins 默认安装后处于“裸奔”状...

  • Nginx详解:从入门到生产环境实践
    Nginx详解:从入门到生产环境实践

    Nginx(发音为 "engine X")是一款开源的高性能 Web 服务器和反向代理服务器。它由俄罗斯程序员 Igor Sysoev 于 2004 年发布,最初是为了解决高并发场景下的 C10K 问题(即单机支持 1 万并发连接)而设计的。凭借极低的资源消耗和卓越的并发处理能力,Nginx 已成为现代互联网架...