Sealos离线部署方案:无互联网环境下的集群安装指南

Sealos离线部署方案:无互联网环境下的集群安装指南

【免费下载链接】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 离线部署架构图

mermaid

1.3 支持的离线场景矩阵

场景类型网络状态推荐方案难度级别
完全离线无任何外部网络完整集群镜像包 + 本地仓库★★★☆☆
部分隔离仅能访问内部仓库定制集群镜像 + 私有Registry★★☆☆☆
间歇性联网可临时连接互联网增量更新 + 缓存机制★★☆☆☆
弱网环境带宽有限且不稳定预下载模式 + 断点续传★☆☆☆☆

二、离线部署准备工作

2.1 硬件与操作系统要求

最低硬件配置(生产环境建议至少2台节点):

节点类型CPU内存磁盘网络
Master2核4GB100GB SSD千兆网卡
Worker4核8GB200GB 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 网络与环境检查清单

节点间网络要求

协议端口范围用途
TCP6443Kubernetes API
TCP2379-2380etcd集群通信
TCP10250kubelet API
TCP10251kube-scheduler
TCP10252kube-controller-manager
UDP8472Calico网络(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

部署流程解析

mermaid

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 多环境镜像同步策略

建立镜像同步机制,确保开发、测试和生产环境使用一致的镜像:

mermaid

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 离线部署关键成功因素

  1. 充分的前期准备:在联网环境中完成所有依赖项和镜像的收集
  2. 完整的测试流程:在类似离线环境中预先测试部署流程
  3. 详细的文档记录:记录每一步操作和预期结果,便于故障排查
  4. 冗余备份策略:关键组件和配置的多副本备份
  5. 工具预先打包:将诊断和维护工具包含在离线包中

8.2 常见问题与解决方案

问题原因解决方案
部署时无法拉取镜像本地仓库未正确配置检查registry服务状态,执行sealos images确认镜像已导入
节点加入集群失败SSH连接问题或防火墙限制验证SSH凭证,检查节点间网络连通性
证书轮换后集群不可用证书未正确分发检查证书文件权限,重启所有控制平面组件
应用部署时镜像拉取失败镜像名称或标签错误使用sealos registry login配置本地仓库认证
升级后节点状态NotReady容器运行时版本不兼容确保所有节点使用相同版本的containerd

8.3 企业级离线部署架构建议

对于中大型企业,推荐采用以下离线部署架构:

mermaid

通过本文介绍的Sealos离线部署方案,企业可以在完全隔离的网络环境中轻松部署和管理Kubernetes集群,打破网络限制,实现容器化应用的高效交付与运维。无论是生产环境的高可用部署,还是研发测试环境的快速搭建,Sealos都提供了简单、可靠的离线解决方案。


点赞收藏关注:获取更多Sealos离线部署实战技巧与最佳实践,下期预告《Sealos离线环境中的监控与日志收集方案》。

反馈与建议:如有任何问题或改进建议,请联系Sealos社区获取支持。

【免费下载链接】Sealos 以应用为中心的智能云操作系统 【免费下载链接】Sealos 项目地址: https://gitcode.com/labring/Sealos

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值