• https://docs.k3s.io/zh/installation/airgap

  • 您可以使用两种不同的方法在离线环境中安装K3。离线环境是指不直接连接到互联网的任何环境。您可以部署私有注册表和镜像docker.io,也可以手动部署映像,例如用于小型集群。

建议使用-官方国内镜像安装方式

加载镜像

私有Registry方法

1 从即将运行的K3版本的发布页面获取架构的映像存档 https://github.com/k3s-io/k3s/releases
2 使用docker导入镜像 docker image load k3s-airgap-images-amd64.tar.zst
3 使用docker tag 和docker push 将加载的映像重新标记并推送到您的私有registry。
4 按照 registry 创建和配 置registers.yaml文件 https://docs.k3s.io/zh/installation/private-registry
5 转到下面的安装K3s部分

手动下载部署镜像方法

这些步骤假设您已经在离线环境中创建了节点,正在使用捆绑的containerd作为容器运行时,并且不能或不想使用私有registry
此方法要求您手动将必要的映像部署到每个节点,
准备镜像文件

1 下载K3s版本映像
2 将imagess存档下载到work节点的images目录中,例如:

sudo mkdir -p /var/lib/rancher/k3s/agent/images/

sudo curl -L -O /var/lib/rancher/k3s/agent/images/k3s-airgap-images-amd64.tar.zst https://github.com/k3s-io/k3s/releases/download/v1.29.1-rc2%2Bk3s1/k3s-airgap-images-amd64.tar.zst

3 转到下面的安装K3s部分

嵌入式Registry 镜像
  • 嵌入式Registry Mirror 自2024年1月起作为实验功能发布:v1.26.13+k3s1、v1.27.10+k3sl、v1.28.6+k3sn、v1.29.1+k3s1

K3s包括一个嵌入式分布式OCI兼容registry镜像。启用并正确配置后,任何节点上容器映像存储中可用的映像都可以由其他集群成员提取,而无需访问外部Registry.
镜像可能来源于上游registry、registry镜像或airgap 镜像tar包。有关启用嵌入式分布式注册表镜像的更多信息,请参阅嵌入式注册表镜像文档。 https://docs.k3s.io/zh/installation/registry-mirror

安装K3

在安装K3之前,请完成上述私有Registry或手动部署映像方法,以预填充K3需要安装的映像。

  • 二进制文件 https://github.com/k3s-io/k3s/releases
    下载K3s二进制文件。将二进制文件放在每个节点上的/usr/local/bin中,并确保其可执行。

  • 下载K3s安装脚本。放在每个节点上,并将其命名为install.sh
    https://get.k3s.io/

  • 默认网络路由
    如果您的节点没有默认路由的接口,则必须配置默认路由;即通过black-hole route via 一个接口。K3s需要一个默认路由来自动检测节点的主IP,并使kube-proxy-ClusterIP路由正常工作。要添加虚拟路由,请执行以下操作:

ip link add dummy0 type dummy
ip link set dummy0 up
ip addr add 203.0.113.254/31 dev dummy0
ip route add default via 203.0.113.255 dev dummy0 metric 1000

当使用INSTALL_K3s_SKIP_DOWNLOAD环境变量运行K3s脚本时,K3s将使用脚本和二进制文件的本地版本。

使用环境变量安装K3s

您可以在一个或多个服务器上安装K3,如下所述

单服务器配置

  • master安装
INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh

备注
K3s的 --resolv-conf 标志传递给kubelet,这可能有助于在主机没有配置上游名称服务器的气隙网络中配置pod DNS解析

token位置在master: /var/lib/rancher/k3s/server/token.

  • 节点安装
INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://<SERVER_IP>:6443 K3S_TOKEN=<YOUR_TOKEN> ./install.sh

高可用性配置

参考《外部数据库的高可用性》或《嵌入式数据库的高可用性》指南。您将调整安装命令,使其指定install_K3S_SKIP_DOWNLOAD=true,并在本地运行安装脚本,而不是通过curl。您还将使用INSTALL_K3S_EXEC=’args’为K3S提供任何参数。
例如,《使用外部数据库的高可用性》指南的第二步提到了以下内容:

curl -sfL https://get.k3s.io | sh -s - server \
  --token=SECRET \
  --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"

相反,您可以修改以下示例:

INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC='server --token=SECRET' \
K3S_DATASTORE_ENDPOINT='mysql://username:password@tcp(hostname:3306)/database-name' \
./install.sh

升级

  • 安装脚本方法
    升级气隙环境可以通过以下方式实现:

1 . 从要升级到的K3s版本的发布页面下载新的气隙映像(tar文件)。将tar放在每个节点上的/var/lib/rancher/K3s/agent/images/目录中。删除旧的tar文件。
2 . 复制并替换每个节点上/usr/local/bin中的旧K3s二进制文件。复制安装脚本到https://get.k3s.io(因为自上次发布以来,它可能已经发生了变化)。再次运行脚本,就像过去使用相同的环境变量一样。
3 . 重新启动K3s服务(如果安装程序没有自动重新启动)。

自动升级方法

K3支持自动升级。要在气隙环境中启用此功能,您必须确保所需的映像在您的私有注册表中可用。

你需要与你打算升级到的k3s版本相对应的rancher/k3s升级版本。注意,镜像标签将k3s版本中的+替换为-,因为Docker镜像不支持+。

您还需要系统升级控制器和kubectl的版本,这些版本在您将部署的系统升级控制器清单YAML中指定。在此处查看系统升级控制器的最新版本,并下载system-upgrade-controller.yaml,以确定需要推送到私有注册表的版本。例如,在系统升级控制器的v0.4.0版本中,这些映像在清单YAML中指定:

rancher/system-upgrade-controller:v0.4.0
rancher/kubectl:v0.17.0

一旦您将必要的牧场主/k3s升级、牧场主/系统升级控制器和牧场主/kubectl映像添加到您的私有注册表中,请按照自动升级指南进行操作。