Sealos离线部署方案:无互联网环境下的集群安装指南
【免费下载链接】Sealos 以应用为中心的智能云操作系统 项目地址: https://gitcode.com/labring/Sealos
引言:无网络环境下的容器化部署挑战
你是否曾在完全隔离的内网环境中挣扎于Kubernetes集群部署?面对"无法拉取镜像"、"依赖下载失败"等问题束手无策?Sealos离线部署方案为企业级生产环境提供了完整的无网络安装解决方案,只需一个离线包即可完成从操作系统到应用栈的全栈部署。本文将详解如何在完全断网环境下,通过Sealos实现Kubernetes集群的快速部署与运维管理,包含环境准备、镜像打包、部署流程、故障排查等核心内容。
读完本文你将掌握:
- 构建Sealos离线安装包的完整流程
- 无互联网环境下的多节点集群部署方法
- 离线环境中的应用商店使用技巧
- 常见离线部署问题的诊断与解决策略
一、Sealos离线部署架构解析
1.1 离线部署核心原理
Sealos采用集群镜像(Cluster Image) 技术,将Kubernetes集群所需的所有组件(包括容器镜像、配置文件、二进制工具)打包为一个标准OCI镜像,通过sealos pull/push/save/load命令在离线环境中传输和部署。其核心优势在于:
- 单一文件交付:整个集群环境封装为单个镜像文件
- 无网络依赖:部署过程不依赖任何外部网络资源
- 版本一致性:确保所有节点运行相同版本的组件
- 增量更新:支持仅传输变更层的增量部署
1.2 离线部署架构图
1.3 支持的离线场景矩阵
| 场景类型 | 网络状态 | 推荐方案 | 难度级别 |
|---|---|---|---|
| 完全离线 | 无任何外部网络 | 完整集群镜像包 + 本地仓库 | ★★★☆☆ |
| 部分隔离 | 仅能访问内部仓库 | 定制集群镜像 + 私有Registry | ★★☆☆☆ |
| 间歇性联网 | 可临时连接互联网 | 增量更新 + 缓存机制 | ★★☆☆☆ |
| 弱网环境 | 带宽有限且不稳定 | 预下载模式 + 断点续传 | ★☆☆☆☆ |
二、离线部署准备工作
2.1 硬件与操作系统要求
最低硬件配置(生产环境建议至少2台节点):
| 节点类型 | CPU | 内存 | 磁盘 | 网络 |
|---|---|---|---|---|
| Master | 2核 | 4GB | 100GB SSD | 千兆网卡 |
| Worker | 4核 | 8GB | 200GB SSD | 千兆网卡 |
支持的操作系统:
- CentOS 7.9+/8.x/9.x
- Ubuntu 20.04/22.04 LTS
- Rocky Linux 8.x/9.x
- Debian 11/12
注意:所有节点需使用相同的操作系统版本,且禁用Swap分区
2.2 离线部署工具链
在联网环境准备以下工具:
# 安装sealos(联网环境)
curl -sfL https://gitcode.com/labring/Sealos/raw/main/scripts/install.sh | sh -
# 验证安装
sealos version
# 输出示例:
# sealos version v5.0.0
# buildDate: 2024-01-01
# gitCommit: abcdef123456
# goVersion: go1.20.0
# platform: linux/amd64
2.3 网络与环境检查清单
节点间网络要求:
| 协议 | 端口范围 | 用途 |
|---|---|---|
| TCP | 6443 | Kubernetes API |
| TCP | 2379-2380 | etcd集群通信 |
| TCP | 10250 | kubelet API |
| TCP | 10251 | kube-scheduler |
| TCP | 10252 | kube-controller-manager |
| UDP | 8472 | Calico网络(VXLAN) |
环境检查脚本:
# 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
# 禁用SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 关闭Swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
# 配置内核参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
三、构建离线集群镜像
3.1 定制Kubernetes离线镜像
在联网环境中,使用Sealos构建包含Kubernetes所有组件的离线镜像:
# 创建工作目录
mkdir -p sealos-offline && cd sealos-offline
# 创建Kubefile
cat > Kubefile <<EOF
FROM labring/kubernetes:v1.28.0
COPY registry /var/lib/registry
EOF
# 构建包含私有镜像仓库的集群镜像
sealos build -t labring/kubernetes-offline:v1.28.0 .
说明:基础镜像
labring/kubernetes:v1.28.0已包含Kubernetes核心组件,通过COPY命令可添加额外的容器镜像和配置文件
3.2 添加应用镜像到离线包
如需在离线环境中部署特定应用,可将应用镜像添加到集群镜像中:
# 创建本地镜像仓库目录
mkdir -p registry
# 拉取所需应用镜像
docker pull nginx:1.23.3
docker pull mysql:8.0.32
docker pull redis:7.0.10
# 将镜像推送到本地临时仓库
docker tag nginx:1.23.3 localhost:5000/nginx:1.23.3
docker push localhost:5000/nginx:1.23.3
# 重复上述步骤添加其他镜像...
# 重新构建集群镜像(包含应用镜像)
sealos build -t labring/kubernetes-apps:v1.28.0 .
3.3 导出与导入离线镜像包
导出离线镜像:
# 保存集群镜像为tar包(约3-5GB,视包含组件而定)
sealos save -o kubernetes-offline-v1.28.0.tar labring/kubernetes-offline:v1.28.0
# 查看文件大小
du -sh kubernetes-offline-v1.28.0.tar
# 输出示例:4.2G kubernetes-offline-v1.28.0.tar
导入到离线环境:
通过U盘、移动硬盘或内部网络传输tar包后,在离线环境中导入:
# 导入集群镜像
sealos load -i kubernetes-offline-v1.28.0.tar
# 验证导入结果
sealos images
# 应显示导入的labring/kubernetes-offline:v1.28.0镜像
四、无互联网环境部署步骤
4.1 单节点快速部署
适用于开发测试环境的单节点部署:
# 在离线环境中执行部署命令
sealos run labring/kubernetes-offline:v1.28.0 \
--single \
--pod-cidr 100.64.0.0/10 \
--service-cidr 10.96.0.0/12 \
--without-packages calico
参数说明:
--single: 启用单节点模式--pod-cidr: 指定Pod网络CIDR--service-cidr: 指定Service网络CIDR--without-packages: 排除不需要的组件
4.2 多节点高可用部署
生产环境推荐的HA部署方案(至少3台Master节点):
# 在主节点执行部署命令
sealos run labring/kubernetes-offline:v1.28.0 \
--master 192.168.1.10,192.168.1.11,192.168.1.12 \
--worker 192.168.1.20,192.168.1.21 \
--user root \
--passwd your-server-password \
--port 22
部署流程解析:
4.3 验证集群部署状态
部署完成后,在主节点执行以下命令验证集群状态:
# 检查节点状态
kubectl get nodes
# 输出示例:
# NAME STATUS ROLES AGE VERSION
# 192.168.1.10 Ready control-plane 23m v1.28.0
# 192.168.1.11 Ready control-plane 20m v1.28.0
# 192.168.1.12 Ready control-plane 18m v1.28.0
# 192.168.1.20 Ready <none> 15m v1.28.0
# 192.168.1.21 Ready <none> 15m v1.28.0
# 检查系统组件状态
kubectl get pods -n kube-system
五、离线环境应用部署
5.1 使用Sealos应用商店离线部署
Sealos提供离线应用商店功能,可一键部署常用应用:
# 列出可用的离线应用
sealos repo list
sealos app list --offline
# 部署MySQL数据库
sealos run labring/mysql:8.0.32
# 部署Nginx ingress控制器
sealos run labring/ingress-nginx:4.5.2
5.2 从本地仓库部署应用
如需部署已添加到离线包的自定义应用:
# 创建应用部署文件
cat > nginx-deploy.yaml <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: localhost:5000/nginx:1.23.3 # 使用本地仓库镜像
ports:
- containerPort: 80
EOF
# 部署应用
kubectl apply -f nginx-deploy.yaml
# 暴露服务
kubectl expose deployment nginx-deployment --port=80 --type=NodePort
5.3 离线环境中的配置管理
使用ConfigMap和Secret管理离线环境中的配置:
# 创建配置文件
cat > app-config.properties <<EOF
db.host=mysql-service
db.port=3306
db.user=root
EOF
# 创建ConfigMap
kubectl create configmap app-config --from-file=app-config.properties
# 创建敏感信息Secret
kubectl create secret generic db-credentials \
--from-literal=username=admin \
--from-literal=password=secure-password
在Pod中使用配置:
spec:
containers:
- name: app
image: localhost:5000/myapp:1.0.0
volumeMounts:
- name: config-volume
mountPath: /etc/config
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: db-credentials
key: username
volumes:
- name: config-volume
configMap:
name: app-config
六、离线集群维护与升级
6.1 离线环境中的证书轮换
Kubernetes证书默认有效期为1年,离线环境中需手动轮换:
# 备份现有证书
sealos cert backup --backup-dir /root/cert-backup
# 轮换所有证书(有效期延长1年)
sealos cert rotate
# 重启控制平面组件使证书生效
sealos reset --force && sealos run labring/kubernetes-offline:v1.28.0
6.2 集群版本升级(离线方式)
准备升级包:
在联网环境中构建目标版本的离线升级包:
# 构建新版本集群镜像
sealos build -t labring/kubernetes-upgrade:v1.29.0 .
# 导出升级包
sealos save -o kubernetes-upgrade-v1.29.0.tar labring/kubernetes-upgrade:v1.29.0
执行离线升级:
# 导入升级包
sealos load -i kubernetes-upgrade-v1.29.0.tar
# 执行升级
sealos upgrade labring/kubernetes-upgrade:v1.29.0
# 验证升级结果
kubectl get nodes
# 确认所有节点VERSION已更新为v1.29.0
6.3 离线环境故障排查工具
在无法联网的环境中,预先准备故障排查工具:
# 在集群镜像中包含常用排查工具
cat > Kubefile <<EOF
FROM labring/kubernetes:v1.28.0
COPY tools /usr/local/bin/
EOF
# 收集常用工具
mkdir -p tools
curl -o tools/kubectl https://dl.k8s.io/release/v1.28.0/bin/linux/amd64/kubectl
curl -o tools/helm https://get.helm.sh/helm-v3.11.0-linux-amd64.tar.gz
chmod +x tools/*
# 构建包含工具的集群镜像
sealos build -t labring/kubernetes-tools:v1.28.0 .
常用离线排查命令:
# 检查节点资源使用情况
kubectl top nodes
# 查看Pod事件
kubectl describe pod <pod-name> -n <namespace>
# 查看容器日志
kubectl logs <pod-name> -n <namespace> -c <container-name>
# 进入容器
kubectl exec -it <pod-name> -n <namespace> -- /bin/bash
七、企业级离线部署最佳实践
7.1 离线镜像仓库搭建
为大规模部署构建私有镜像仓库:
# 部署Harbor离线版(提前下载Harbor离线安装包)
tar xvf harbor-offline-installer-v2.8.0.tgz
cd harbor
cp harbor.yml.tmpl harbor.yml
# 编辑harbor.yml,设置hostname和端口
# 执行安装
./install.sh --with-chartmuseum
配置Sealos使用私有仓库:
# 登录私有仓库
sealos login registry.example.com -u admin -p Harbor12345
# 推送集群镜像到私有仓库
sealos tag labring/kubernetes-offline:v1.28.0 registry.example.com/sealos/kubernetes-offline:v1.28.0
sealos push registry.example.com/sealos/kubernetes-offline:v1.28.0
# 从私有仓库部署
sealos run registry.example.com/sealos/kubernetes-offline:v1.28.0
7.2 多环境镜像同步策略
建立镜像同步机制,确保开发、测试和生产环境使用一致的镜像:
7.3 离线部署自动化脚本
创建自动化部署脚本offline-deploy.sh:
#!/bin/bash
set -e
# 配置参数
MASTER_NODES="192.168.1.10,192.168.1.11,192.168.1.12"
WORKER_NODES="192.168.1.20,192.168.1.21"
CLUSTER_IMAGE="labring/kubernetes-offline:v1.28.0"
SSH_USER="root"
SSH_PASSWD="password"
SSH_PORT=22
# 检查sealos是否已安装
if ! command -v sealos &> /dev/null; then
echo "sealos not found, installing..."
# 假设sealos二进制已通过离线方式传输到/usr/local/bin
chmod +x /usr/local/bin/sealos
fi
# 导入集群镜像
echo "Loading cluster image..."
sealos load -i ${CLUSTER_IMAGE}.tar
# 执行部署
echo "Starting cluster deployment..."
sealos run ${CLUSTER_IMAGE} \
--master ${MASTER_NODES} \
--worker ${WORKER_NODES} \
--user ${SSH_USER} \
--passwd ${SSH_PASSWD} \
--port ${SSH_PORT}
# 验证部署结果
echo "Verifying cluster status..."
kubectl get nodes
echo "Cluster deployment completed successfully!"
八、总结与常见问题解答
8.1 离线部署关键成功因素
- 充分的前期准备:在联网环境中完成所有依赖项和镜像的收集
- 完整的测试流程:在类似离线环境中预先测试部署流程
- 详细的文档记录:记录每一步操作和预期结果,便于故障排查
- 冗余备份策略:关键组件和配置的多副本备份
- 工具预先打包:将诊断和维护工具包含在离线包中
8.2 常见问题与解决方案
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 部署时无法拉取镜像 | 本地仓库未正确配置 | 检查registry服务状态,执行sealos images确认镜像已导入 |
| 节点加入集群失败 | SSH连接问题或防火墙限制 | 验证SSH凭证,检查节点间网络连通性 |
| 证书轮换后集群不可用 | 证书未正确分发 | 检查证书文件权限,重启所有控制平面组件 |
| 应用部署时镜像拉取失败 | 镜像名称或标签错误 | 使用sealos registry login配置本地仓库认证 |
| 升级后节点状态NotReady | 容器运行时版本不兼容 | 确保所有节点使用相同版本的containerd |
8.3 企业级离线部署架构建议
对于中大型企业,推荐采用以下离线部署架构:
通过本文介绍的Sealos离线部署方案,企业可以在完全隔离的网络环境中轻松部署和管理Kubernetes集群,打破网络限制,实现容器化应用的高效交付与运维。无论是生产环境的高可用部署,还是研发测试环境的快速搭建,Sealos都提供了简单、可靠的离线解决方案。
点赞收藏关注:获取更多Sealos离线部署实战技巧与最佳实践,下期预告《Sealos离线环境中的监控与日志收集方案》。
反馈与建议:如有任何问题或改进建议,请联系Sealos社区获取支持。
【免费下载链接】Sealos 以应用为中心的智能云操作系统 项目地址: https://gitcode.com/labring/Sealos
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



