当我们的服务器处在一个纯内网环境的时候,我们可以通过sealos来实现离线部署k8s 但是一些服务的镜像是拉不下来的,特别的,前期没有部署harbor和部署harbor的时候,我们可以将镜像提前打包安装,甚至于是直接部署查看缺省的镜像再上传

通过本地进行一些打包,以部署kubesphere 为例,这是他的最小安装教程:

在 Kubernetes 上最小化安装 KubeSphere

通过yaml文件我们知道,kubesphere/ks-installer是必要的,当然installer可能会下一些崽,我们可以之后再来上传

docker pull kubesphere/ks-installer:v3.2.1
docker save -o 1.tar kubesphere/ks-installer:v3.2.1

这是我们的第一步,简单的用shell脚本改写为:

rm -rf ./*.tar
inum=1
for i in $*
do
    echo start pull
    for j in {1..5}
    do
        #docker pull kubesphere/ks-installer:v3.2.1
        docker pull $i
        if [ "$?" = "0" ]
        then
            break
        fi
        echo try $j
    done
    docker save -o $inum.tar $i
    if [ "$?" != "0" ]
    then
        echo falseWrite
        exit
    fi
    docker rmi $i
    ((inum++))
done
exec pull.sh

至于为什么添加失败后的重试,在没有更换国内源的情况下有不错的效果

同时唤出pull的脚本

通过scp将tar包推送到服务端

那么推送到服务器端之后我们需要做些什么

ctr image import可以导入镜像,但这里需要引入一个ctr独有的特性,名称空间

这个名称空间不是k8s的那个概念,但是k8s确实没有用它默认的名称空间

通过

ctr ns ls

可以看到 k8s 用的k8s.io

那么这个shell 的后半段也算完成了:

scp *.tar name@host:~/image
ssh name@host << eeooff
cd image
ctr -n=k8s.io image import *.tar
rm -rf *
exit
eeooff