Sealos私有化部署:内网离线环境15分钟拉起Kubernetes集群

发布时间:2026/10/8 2:54:23
Sealos私有化部署:内网离线环境15分钟拉起Kubernetes集群 直接开工。先说结论Sealos 是我这几年用过的最适合内网环境的 K8s 发行版没有之一。它把 Kubernetes 集群的部署从“按天计算”压缩到了“按分钟计算”而且天然支持离线环境正好命中私有化部署这个刚需场景。这篇文章我从头到尾拆一遍 Sealos 私有化部署的完整链路包括为什么选它、部署前要准备什么、15 分钟内到底怎么操作、以及我实际踩过的坑和排查思路全部是能直接抄作业的内容。1. 为什么私有化部署偏偏选 Sealos1.1 私有化部署的痛点不只是装个 K8s 那么简单先聊聊需求侧。很多人一说“私有化部署 K8s”脑子里想的就是“在内网服务器上装一套 Kubernetes”但真正落地的时候会发现一堆问题内网环境通常没有公网访问能力拉不到镜像装不了依赖传统的 kubeadm 流程第一步就卡住。即使能联网一套完整 K8s 平台也不只是 Kubernetes 本身还得有存储、网络、监控、日志、GPU 调度等一堆组件每个组件单独装版本还得互相兼容过程极其痛苦。企业 IT 环境对安全要求高需要离线安装、统一运维入口、可视化操作界面这些都不是原生 K8s 能直接给到的。Sealos 的定位恰好解决了这一整串问题。它本质上是把 Kubernetes 及周边常用组件容器运行时、网络插件、存储、网关、监控等全部封装成“镜像”通过一条命令就能拉起一套完整的云平台。它的设计理念是“整个集群就是一个镜像”这听起来很奇怪但实际用起来非常爽你可以像管理 Docker 镜像一样管理整个集群的版本、备份和恢复。1.2 Sealos 的核心能力拆解它到底长什么样先给没接触过的朋友讲清楚 Sealos 的架构。它不像是 OpenStack 那样重型的 IaaS 平台更准确地说是“Kubernetes 云操作系统”。底层仍然跑的是标准 K8s但 Sealos 把外围能力都做成了模块化组件包括应用商店类似 App Store可以直接安装数据库、中间件、开发工具等常用应用。云原生存储内置了分布式存储方案应用可以像用本地磁盘一样使用云盘。应用负载均衡自动配置 Ingress Controller把集群内的服务暴露出去。私有化镜像仓库部署完成后自带一个内网镜像仓库后续应用镜像可以推到本地实现完全隔离的软件供应链。这些组件在 Sealos 里都是“一键开关”式的存在不用像传统方式那样挨个去 helm install。而且它的部署过程是幂等的——第一次跑失败修好环境问题后重新跑一遍就行不会留下半残的状态。1.3 和手动 kubeadm 部署的对比省下的不只是时间那有人会问我用原生的 kubeadm 不也能装吗能装但差距是数量级的。下面这张表是我自己实测的对比感受维度Sealos 部署kubeadm 手动部署复杂度一条命令完成需要手动处理容器运行时、证书、kubelet、网络插件等多步操作离线支持天生支持加载本地镜像包即可镜像拉取依赖公网离线配置繁琐组件集成自带存储、网络、监控、网关等模块每个组件需要单独部署和调参运维界面自带 Dashboard 和命令行工具默认只有 kubectl界面需另装升级维护一条命令整体升级节点逐个升级有一套独立的操作流程出问题恢复集群版本回滚方便需要自己封装备份方案对于企业内网这种“环境有限制、出问题要快速恢复”的场境节省的远不止是装系统那 15 分钟更重要的是后续每一次升级、扩容、故障恢复都大大简化了。2. 部署前必须想清楚的硬件、网络与系统要求2.1 服务器规划建议别拿生产环境开玩笑Sealos 虽然轻量但毕竟是一套完整的 K8s 平台硬件规划和传统 K8s 集群的通用要求是一致的。最基本的分配控制平面节点master至少 2 核 CPU、4GB 内存生产环境建议 4 核 8GB 起步磁盘 50GB 以上主要负责集群管理。工作节点node建议 8 核 16GB 起步这个取决于你的业务负载磁盘越大越好因为存储和日志都在这里。存储节点如果采用内置分布式存储至少准备一块独立的数据盘比如 500GB 以上的 NVMe 或 SAS 盘不建议把系统盘和数据盘混用否则 IO 竞争会拖垮数据库类应用。节点数量单机也可以玩Sealos 支持单节点部署但生产环境最低 3 个节点起步推荐“3 master N worker”的布局控制平面需要奇数节点以保证一致性。这里给一个很实用的换算参考一个小型企业的私有化交付通常客户给 3 台物理服务器或 3 台虚拟机每台 16 核 64GB这就足够跑一套有高可用的 Sealos 平台并且能同时跑十几个业务应用。2.2 内网环境的关键前置检查项私有化部署最常见的问题是系统装好了网络环境没准备好结果部署到一半失败。以下是我每次都会提前核对的信息各位可以直接复制拿去当 checklist操作系统版本推荐 Ubuntu 22.04 LTS、Debian 12、Rocky Linux 9 或 openEuler 22.03内核版本 5.11 以上。不建议用 CentOS 7内核太老容器运行时会出兼容性问题。节点 hostname不能有重复且不能有大写字母和下划线否则 Kubernetes 服务发现阶段会报错。主机时间同步必须安装并启用 chrony 或 ntpd节点之间时间差不要超过 500msK8s 的证书验证非常敏感时间漂移会导致 TLS 握手失败。IP 规划确保所有节点可以互相通信并且预留 VIP虚拟 IP用于控制平面负载均衡我在实践中通常预留一个 172.16.x.250 之类的空闲 IP。端口放行K8s 需要大量端口做成私有化交付时需要提前和客户网络团队确认防火墙策略关键端口有 6443API、2379/2380etcd、10250kubelet、30000-32767NodePort 服务端口。关闭 swapKubernetes 官方要求 kubelet 节点的 swap 必须关闭否则会启动失败。执行swapoff -a并且注释掉 /etc/fstab 中的 swap 行。2.3 离线环境怎么准备镜像包与软件包同步方案如果目标内网完全断网那就需要在有网的跳板机或电脑上先把所有需要的材料准备好。Sealos 的魅力在新版本体现得淋漓尽致它把集群所有组件打成一个“集群镜像”离线部署时只需要把这个镜像一个 tar 文件拷贝进去即可一切变得非常简单。具体准备步骤在有网的机器上安装相同版本的 Sealos 二进制工具直接下载官方编译好的静态二进制文件。执行sealos pull把对应版本的集群镜像拉取到本地。执行sealos save -o sealos-cloud.tar导出为一个镜像压缩包。这个包通常有几个 GB取决于镜像内部集成的组件数量一定要确认目标机器的磁盘有足够空间。把 Sealos 二进制和镜像包通过 U 盘、跳板机 FTP 或内网文件共享系统拷贝到目标节服务器。这套流程下来整个部署过程完全不依赖公网真正做到“背着 U 盘去客户现场一条命令拉起整套云平台”。3. Sealos 私有化部署 15 分钟实操全流程3.1 基础环境初始化10 分钟还是 2 分钟取决于这里在上面 checklist 通过的基础上我习惯用一段脚本完成所有前置操作这里分享我常用的初始化命令# 以 root 用户执行Ubuntu 为例 # 1. 关闭 swap swapoff -a sed -i / swap / s/^/#/ /etc/fstab # 2. 加载内核模块 cat EOF | tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF modprobe overlay modprobe br_netfilter # 3. 内核参数调整 cat EOF | tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables 1 net.bridge.bridge-nf-call-ip6tables 1 net.ipv4.ip_forward 1 EOF sysctl --system # 4. 时间同步内网没有公网 NTP 时指向内网 NTP 服务器 yum install -y chrony # 或 apt install -y chrony systemctl enable --now chronyd chronyc sources -v # 确认时间源状态为 *代表已同步这里有个容易被忽略的点如果内网无法访问公网 NTP 服务器一定要手动指定内网 NTP 源否则时间同步起不来。配置方法是在 /etc/chrony.conf 里加上server 192.168.1.10 iburst这一行IP 换成你内网的时间服务器然后重启 chronyd。3.2 安全证书与 SSH 免密登录设置Sealos 部署多节点集群时是通过 SSH 通道在所有节点上分发配置的所以需要配置好从执行节点到其他节点的免密登录。这一步很多第一次用 Sealos 的人会漏掉然后部署的时候卡在 SSH 认证失败。操作如下# 在每台主机上设置 root 密码 passwd root # 在第一个节点执行部署的节点生成密钥 ssh-keygen -t rsa -b 4096 -N -f /root/.ssh/id_rsa # 将公钥拷贝到其他所有节点包括本机需要输入一次对方密码 ssh-copy-id root每个节点的 IP验证是否成功从执行节点ssh root节点IP不需要输入密码即为成功。然后做一个快速测试——通过 SSH 在每台节点执行hostname确保返回各自主机名说明网络和免密均正常。3.3 获取并加载 Sealos 二进制与集群镜像这一步就是把前面准备阶段的产物落地。找到你的 Sealos 可执行文件假设放在 /root/sealos赋予执行权限并验证版本chmod x /root/sealos /root/sealos version然后加载集群镜像包。这里要理解 Sealos 的一个设计它把集群包括 Kubernetes 和所有组件打成一个 OCI 镜像需要先导入到本地镜像存储中然后才能通过镜像名来部署。# 解压镜像包如果你没有单独解压 tar -xvf sealos-cloud.tar # 导入了镜像 /root/sealos load -i sealos-cloud.tar # 查看已导入的镜像 /root/sealos images看到输出里有类似labring/kubernetes:v1.30.0这样的记录就说明集群镜像已经成功导入。3.4 一条命令拉起 Kubernetes 集群集群镜像加载完毕后真正的核心命令就来了。以三节点3 master高可用部署为例命令长这样/root/sealos run labring/kubernetes:v1.30.0 \ --masters 192.168.1.11,192.168.1.12,192.168.1.13 \ --nodes 192.168.1.14,192.168.1.15 \ --user root \ --passwd 你的密码参数解释--masters控制平面节点 IP多个 IP 用逗号隔开。Sealos 会自动在这几个节点上部署高可用的控制平面。--nodes工作节点 IP用于运行业务负载。--user和--passwdSSH 登录凭据上一节配好免密后这里可以不填密码也能执行。命令执行过程中会输出大量日志。不需要每条都看懂但需要关注日志最终是否出现绿色的successful字样。整个过程中 Sealos 自动完成了以下工作这个值得了解帮你后面排查问题自动安装并配置容器运行时默认是 containerd。自动初始化高可用的 etcd 集群和 API Server。自动安装 CNI 网络插件让 Pod 之间互通。自动配置控制平面的负载均衡内置了 Coredns、VIP 高可用方案。整个安装时间按机器性能不同有所差异SSD 上一般不会超过 8 分钟。3.5 安装并启用云平台模块纯 K8s 部署完成之后接下来才是 Sealos 的重头戏——安装云平台模块也就是把 Dashboard、App Store、存储、Ingress 这些全部拉起来。一条命令/root/sealos run labring/sealos-cloud:latest执行完成后再验证一下状态kubectl get pods -n sealos确保所有 Pod 都处于Running状态可能会有一小段时间处于ContainerCreating那是正常拉取或启动镜像的过程1-2 分钟后再看。如果一切正常Sealos 云平台就部署完成它会在集群内部创建好统一的管理平台入口。3.6 访问云平台控制台平台起来之后需要找到控制台的访问地址。由于私有化环境没有公网域名通常通过 NodePort 或 Ingress 暴露。执行下面的命令查看服务的映射端口kubectl get svc -n sealos | grep gateway看到类似gateway NodePort 10.96.x.x none 80:30880/TCP的输出说明控制台已经通过节点上的 30880 端口对外提供服务。在浏览器输入任意节点 IP 加这个端口例如https://192.168.1.11:30880就能打开 Sealos 云平台的登录页面。首次登录需要设置管理员账号这就是你整套内网云平台的超级入口。4. 常见问题与排查技巧实录4.1 SSH 连接失败这个坑最不值得花时间一类高频问题执行sealos run的时候报错日志里出现ssh: handshake failed或dial tcp: connection refused。原因无非三种目标节点 sshd 服务没启动或端口不是 22。目标节点防火墙拦截了 SSH 端口。用户密码错误或免密配置不对。排查办法先手工用 ssh 命令测试从执行节点登录目标节点ssh -p 22 root目标IP能通再重跑部署。如果 SSH 测试本身就不通那问题不在 Sealos而是前置环境没准备到位。一定要记住Sealos 只负责部署集群不负责诊断你的网络和 SSH 问题。4.2 容器运行时初始化失败内网镜像源配置对了吗第二个高频报错是 containerd 初始化失败日志里往往有failed to pull image或者unable to resolve docker.io。私有化环境没有公网 DNS默认配置下 containerd 解析不了镜像仓库地址自然拉不到 pause 等基础镜像。解法是把镜像源换到内网可访问的仓库。Sealos 的集群镜像其实已经内置了基础镜像所以这个报错大多不是 Sealos 本身的问题而是你之前手动操作时污染了 containerd 配置。建议直接清空 containerd 配置让 Sealos 重写rm -rf /etc/containerd rm -rf /var/lib/containerd然后重新执行sealos runSealos 会自动生成一套适配内网环境的配置。4.3 kubelet 无法启动又是 swap 惹的祸第三种常见问题是节点加入集群后kubelet 状态一直是Failed通过journalctl -u kubelet -f查看日志能看到running with swap on is not supported之类的字眼。这就是前面强调的 swap 没关干净。有些人明明执行了swapoff -a但是重启后又会挂载 swap因为修改的 /etc/fstab 没有同步更新。再次强调必须把 /etc/fstab 中所有 swap 行注释掉。有些云厂商镜像默认会在 fstab 里配了 swap 分区这个一定要确认。4.4 内网如何打通外部访问反向代理就够了部署完云平台后很多企业希望让内部员工通过一个统一的地址访问而不是记着一堆 IP端口。这种场景下我通常建议不依赖 Sealos 本身配置域名而是在内网 DNS 里把域名解析到集群的 VIP再用 Nginx 做反向代理。比如内网用户访问k8s.internal.company.comNginx 将 443 流量转发到 Sealos 云平台的 30880 端口。整个链路干净、安全、好维护。4.5 常见问题速查表现象常见原因排查命令/方案Sealos run 卡在 SSH 阶段防火墙/免密配置未完成ssh root目标IP手工验证节点加入集群后 NotReadyCNI 网络插件未就绪或内核模块缺失kubectl get pods -n kube-system检查 flannel/calico PodAPI Server 端口无法访问VIP 高可用组件异常ip a检查 VIP 是否绑定成功应用商店装应用失败内网无公网镜像先在镜像仓库导入应用镜像再安装平台页面打不开NodePort 端口被防火墙拦截curl -k https://节点IP:30880验证连通性5. 生产环境交付的个人心得与扩展建议5.1 版本控制和升级规划要提前定Sealos 的集群镜像机制让升级变得非常优雅——先sealos pull新版本集群镜像再执行sealos upgrade就可以整体滚动升级。这个机制好处是版本回滚也极其简单重新切换到旧版本镜像再执行 upgrade 就好非常方便。但生产环境我强烈建议先在测试集群演练一遍完整的升级和回滚流程尤其是 etcd 版本跨大版本升级比如 3.5 到 3.6 这种一定要做好数据备份万一回滚后出现兼容性问题不至于被打个措手不及。5.2 数据备份不只是备份存储Sealos 内置的分布式存储很好用但千万别因此忽略备份。我见过很多团队把应用数据存进了云平台内置存储结果节点磁盘损坏后整个应用数据丢失。生产环境无论云平台多方便务必要配置底层定期快照或备份任务。Sealos 平台本身提供了备份工具但要确认它们是稳定的我还在习惯用的备份方案是基于 Velero 做集群级备份这样整个平台和数据都能恢复到指定时间点。5.3 给新人的三条避坑建议最后给准备在内网搭建 Sealos 的朋友三条实在建议建议内网环境预留一个“跳板机”兼“镜像仓库”专门用于下载、保存和分发光环镜像与安装包省得每次刻 U 盘拷贝。配置统一的内网 DNS 和 NTP 服务让所有节点加入同一个管理域能省掉大量与时间、域名解析相关的隐性故障。部署完成后第一时间导出访问地址、管理员账号、备份计划等关键信息移交运维团队避免“一人建平台全员靠打听”的尴尬局面。我在实际交付过多个私有化项目后最大的体会是——真正复杂的从来不是 Sealos 这个工具本身而是你对自己内网环境的理解深度。把网络、时间、存储、DNS 这些地基打牢Sealos 才能真正成为 15 分钟解决问题的利器。希望这篇内容能帮你少走一些弯路这套方案也完全可以直接用于企业的云平台交付场景。