您可以在互联网访问受限的环境中安装k0s。气隙安装需要一个映像包,其中包含所有需要的容器映像。有两种方法可以获取图像包:
使用为每个k0s版本创建的现成图像包。可以从发布页面下载。
创建自己的图像包。在这种情况下,您可以轻松地自定义捆绑包,使其也包含容器图像,这些图像在k0s中默认不使用。
具有至少一个控制器的工作集群,将用于构建图像包。有关更多信息,请参阅《快速入门指南》。
containerd CLI管理工具ctr,安装在工作节点上。有关更多信息,请参阅容器式入门指南
#拉取镜像(使用docker)
k0s airgap list-images | xargs -I docker pull
#创建捆绑包
docker image save $(k0s airgap list-images | xargs) -o bundle_file
当containerd在k0s worker正常引导过程中拉取所有图像时,您可以使用它来构建包含图像的OCI包
ctr --namespace k8s.io \
--address /run/k0s/containerd.sock \
images export bundle_file $(k0s airgap list-images | xargs)
将您在上一步中创建或从发布页面下载的bundle_file复制到目标计算机的k0s数据目录中的images目录中。仅将捆绑包复制到工作节点。控制器节点不使用它。
# mkdir -p /var/lib/k0s/images
# cp bundle_file /var/lib/k0s/images/bundle_file
作为上一步的替代方法,您可以使用k0sctl将捆绑包文件上传到工作节点。k0sctl还可以用于将k0s二进制文件上传到所有节点。看看这个例子(k0sctl.yaml),它有一个控制器和一个工作节点来上传bundle文件和k0s二进制文件:
apiVersion: k0sctl.k0sproject.io/v1beta1
kind: ClusterConfig
metadata:
name: k0s-cluster
spec:
k0s:
version: 1.30.2+k0s.0
hosts:
- role: controller
ssh:
....
使用以下k0s.yaml确保containerd在任何时候都不会从互联网上提取k0s组件的图像。
apiVersion: k0s.k0sproject.io/v1beta1
kind: ClusterConfig
metadata:
name: k0s
spec:
images:
default_pull_policy: Never
有关在本地设置控制器和工作节点的信息,请参阅手动安装。或者,您可以使用k0sctl。
注意:在worker启动期间,k0s在启动kubelet之前从$k0s_DATA_DIR/images导入所有bundle。