说明

您可以在互联网访问受限的环境中安装k0s。气隙安装需要一个映像包,其中包含所有需要的容器映像。有两种方法可以获取图像包:
使用为每个k0s版本创建的现成图像包。可以从发布页面下载。

创建自己的图像包。在这种情况下,您可以轻松地自定义捆绑包,使其也包含容器图像,这些图像在k0s中默认不使用。

  • 先决条件

具有至少一个控制器的工作集群,将用于构建图像包。有关更多信息,请参阅《快速入门指南》。
containerd CLI管理工具ctr,安装在工作节点上。有关更多信息,请参阅容器式入门指南

  • Docker
#拉取镜像(使用docker)
k0s airgap list-images | xargs -I docker pull 

#创建捆绑包
docker image save $(k0s airgap list-images | xargs) -o bundle_file

当containerd在k0s worker正常引导过程中拉取所有图像时,您可以使用它来构建包含图像的OCI包

在安装了k0s worker的机器上使用以下命令(导入镜像):

ctr --namespace k8s.io \
    --address /run/k0s/containerd.sock \
    images export bundle_file $(k0s airgap list-images | xargs)

方法一 将捆绑文件 复制到worker机器(本地)

将您在上一步中创建或从发布页面下载的bundle_file复制到目标计算机的k0s数据目录中的images目录中。仅将捆绑包复制到工作节点。控制器节点不使用它。

# mkdir -p /var/lib/k0s/images
# cp bundle_file /var/lib/k0s/images/bundle_file

方法二 将捆绑文件与带Airgap的机器同步(使用k0sctl远程)

作为上一步的替代方法,您可以使用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:
      ....

3.确保k0s.yaml中的pull策略(可选)

使用以下k0s.yaml确保containerd在任何时候都不会从互联网上提取k0s组件的图像。

apiVersion: k0s.k0sproject.io/v1beta1
kind: ClusterConfig
metadata:
  name: k0s
spec:
  images:
    default_pull_policy: Never

4.设置控制器和工作节点

有关在本地设置控制器和工作节点的信息,请参阅手动安装。或者,您可以使用k0sctl。
注意:在worker启动期间,k0s在启动kubelet之前从$k0s_DATA_DIR/images导入所有bundle。