Sealos 离线部署:断网机房里装好 K8s 集群的完整流程
【免费下载链接】Sealos以应用为中心的智能云操作系统项目地址: https://gitcode.com/labring/Sealos
机房里网线已经拔掉,服务器一台台摆好,你要在完全断网的情况下,把一套能用的 Kubernetes 集群搭起来。用 Sealos 离线部署 这套办法:把整套集群打包成一个文件,拷进内网,解开就能装,全程不碰外网。
为什么能断网装:把整套集群打包成一个文件
平时装 K8s 之所以离不开网,是因为它要现拉一堆东西:kube-apiserver、etcd、容器运行时、网络插件的镜像,还有各自的配置文件和二进制工具,散落在各处。Sealos 的思路是反过来——先把这些东西全塞进一个标准 OCI 镜像里,这个镜像叫集群镜像(Cluster Image),说白了就是"把一整个集群当成一个应用来打包"。这样交付时就只有一个文件:联网机上用sealos save把它导成 tar,拷进内网,sealos load解开,sealos run一下,集群就起来了。
整个过程是一条直线,不用记太细,记住顺序就行:
联网机pull镜像 →sealos save成 tar → 拷进内网 →sealos load解开 →sealos run拉起集群
好处是节点之间版本天然一致,也不用担心哪台机器漏拉了某个依赖。下面按"先做包、再搬包、最后跑集群"的顺序走一遍。
离线包怎么打,又怎么搬进内网
联网机上把包做好
这一步在有外网的机器上做。最小集合就是拉一个 Kubernetes 集群镜像再导出,两行就够:
# 联网机:拉取集群镜像并导出成 tar sealos pull labring/kubernetes:v1.28.0 sealos save -o kubernetes-offline.tar labring/kubernetes:v1.28.0如果你希望把 MySQL、ingress 这类业务镜像也一起带进去,就在联网机上写个 Kubefile,用sealos build把额外镜像加进集群镜像,再save一次。集群镜像的构成说明 里讲清楚了哪些东西会被打进去。
内网里把包解开
包拷到内网第一台 master 上后(U 盘、内网文件服务器都行),解开并核对一下:
# 内网第一台 master:解开并确认镜像在不在 sealos load -i kubernetes-offline.tar sealos imagessealos images里能看到labring/kubernetes:v1.28.0就说明导入成功,后面所有操作和在线装集群完全一样。完整离线安装文档 也给了同样的流程。
容易卡住的地方:
- tar 在拷贝时被截断或校验不过,
sealos load会报格式错误,先确认文件完整再导入 - 内网机器没装 sealos 本体,记得先把 sealos 二进制也一并带进去,它只是个 Go 编译的单一可执行文件
- 包太大时别走容易掉线的临时通道,拷完先比对大小或校验和
集群怎么跑起来
拉起多节点集群
包解开后,直接在第一台 master 上执行sealos run,把 master 和 worker 的 IP 列出来。sealos run只能跑在集群第一台 master 上,不支持在集群外的机器上远程发起:
sealos run labring/kubernetes:v1.28.0 \ --masters 192.168.1.10,192.168.1.11,192.168.1.12 \ --nodes 192.168.1.20,192.168.1.21 \ --ssh-passwd '节点SSH密码'想先单节点验证,加个--single即可;多节点高可用就按上面列三台 master。执行过程会依次做主机名校验、时间同步检查,然后逐个拉镜像、铺组件。
确认集群是不是真的好了
看两个地方就够了:
kubectl get nodes kubectl get pods -n kube-systemget nodes里所有节点都是Ready,get pods -n kube-system里核心组件不反复重启,就算这一关过了。
容易卡住的地方:
- 节点间时钟不同步是最常见的隐雷,etcd 对时间漂移很敏感,先
date对一下再动手 - master/worker 之间 SSH 不通或密码错,加入阶段会卡住,先手动
ssh一台试试 - 别提前手动装 Docker,让 sealos 自己铺 containerd,混着来容易冲突
业务怎么装上去
一键把应用装进集群
集群好了,业务也一样走集群镜像的方式装,不需要单独去配镜像仓库:
sealos run labring/mysql:8.0.32 sealos run labring/ingress-nginx:4.5.2这些应用镜像要么已经随集群镜像打进离线包,要么提前在联网机上用sealos save -m多镜像导出、在内网load进来,命令形态和装集群是同一套。装完可以用kubectl get pods -A看看落在哪些节点上,或者用封面的应用部署界面去可视化操作,两者不冲突。
容易卡住的地方:
- 应用镜像名或 tag 写错,Pod 会一直
ImagePullBackOff,但内网根本没网拉,所以一定要用离线包里真实存在的 tag - 需要访问外网的依赖(比如某些初始化脚本会
curl拉资源)在断网环境必然失败,这种应用要提前改造或换离线版本
落地前自查清单
动手前把这几条过一遍,能省掉大部分返工:
- 所有节点是同一发行版、同一版本,且都关了 Swap、防火墙放行了节点间通信
- sealos 二进制已装进内网第一台 master,
sealos version能跑 sealos load导入后sealos images能看到目标集群镜像,tar 校验完整sealos run跑在第一台 master 上,master/worker 的 IP、SSH 账号密码都核对无误- 离线包里业务应用的镜像 tag 与实际要部署的完全一致,没有漏拉依赖
把这条链路跑通一次,后面再扩容、加应用,都是同一套save/load/run,只是动作重复而已。
【免费下载链接】Sealos以应用为中心的智能云操作系统项目地址: https://gitcode.com/labring/Sealos
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考