K3s 离线安装
概述
你可以使用两种不同的方法在离线环境中安装 K3s。离线环境是不直接连接到 Internet 的任何环境。你可以部署一个私有镜像仓库,或者你可以手动部署镜像,比如用于小型集群。
离线安装的过程主要分为以下两个步骤:
步骤 1:部署镜像,本文提供了两种部署方式,分别是部署私有镜像仓库和手动部署镜像。请在这两种方式中选择一种执行。
步骤 2:安装 K3s,本文提供了两种安装方式,分别是单节点安装和高可用安装。完成镜像部署后,请在这两种方式中选择一种执行。
离线升级 K3s 版本:完成离线安装 K3s 后,您还可以通过脚本升级 K3s 版本,或启用自动升级功能,以保持离线环境中的 K3s 版本与最新的 K3s 版本同步。
请按照下文的操作指导进行离线安装和升级。
部署私有镜像仓库
前提条件
本文档假设您已经在离线环境中创建了节点,并且在您的堡垒机上有一个 Docker 私有镜像仓库。
如果你还没有建立私有的 Docker 镜像仓库,请参考Docker 官方文档建立私有的 Docker 镜像仓库。
创建镜像仓库 YAML
请按照 私有镜像仓库配置指南 创建并配置registry.yaml文件。
完成后,现在可以转到下面的安装 K3s部分,开始安装 K3s。
手动部署镜像
前提条件
我们假设您已经在离线环境中创建了节点。这种方法需要您手动将必要的镜像部署到每个节点,适用于运行无法部署镜像仓库的边缘部署场景。
操作步骤
请按照以下步骤准备镜像目录和 K3s 二进制文件。
- 从K3s GitHub Release页面获取你所运行的 K3s 版本的镜像 tar 文件。
- 将 tar 文件放在
images
目录下,例如: - 将 k3s 二进制文件放在
/usr/local/bin/k3s
路径下,并确保拥有可执行权限。完成后,现在可以转到下面的安装 K3s部分,开始安装 K3s。
sudo mkdir -p /var/lib/rancher/k3s/agent/images/
sudo cp ./k3s-airgap-images-$ARCH.tar /var/lib/rancher/k3s/agent/images/
安装 K3s
前提条件
- 在安装 K3s 之前,完成上面的部署私有镜像仓库或手动部署镜像,导入安装 K3s 所需要的镜像。
- 从 release 页面下载 K3s 二进制文件,K3s 二进制文件需要与离线镜像的版本匹配。将二进制文件放在每个离线节点的
/usr/local/bin
中,并确保这个二进制文件是可执行的。 - 下载 K3s 安装脚本:https://get.k3s.io 。将安装脚本放在每个离线节点的任意地方,并命名为
install.sh
。
当使用 INSTALL_K3S_SKIP_DOWNLOAD
环境变量运行 K3s 脚本时,K3s 将使用本地的脚本和二进制。
在离线环境中安装 K3s
您可以在离线环境中执行单节点安装,在一个 server(节点)上安装 K3s,或高可用安装,在多个 server(节点)上安装 K3s。
- 单节点安装
要在单个服务器上安装 K3s,只需在 server 节点上执行以下操作:
INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh
然后,要选择添加其他 agent,请在每个 agent 节点上执行以下操作。注意将 myserver
替换为 server 的 IP 或有效的 DNS,并将 mynodetoken
替换 server 节点的 token,通常在/var/lib/rancher/k3s/server/node-token
。
INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken ./install.sh
您需要调整安装命令,以便指定INSTALL_K3S_SKIP_DOWNLOAD=true
并在本地运行安装脚本。您还将利用INSTALL_K3S_EXEC='args'
为 k3s 提供其他参数。
例如,使用外部数据库实现高可用安装指南的第二步提到了以下内容:
curl -sfL https://get.k3s.io | sh -s - server \
--datastore-endpoint='mysql://username:password@tcp(hostname:3306)/database-name'
由于在离线环境中无法使用curl
命令进行安装,所以您需要参考以下示例,将这条命令行修改为离线安装:
INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC='server' K3S_DATASTORE_ENDPOINT='mysql://username:password@tcp(hostname:3306)/database-name' ./install.sh
注意
K3s 还为 kubelets 提供了一个--resolv-conf
标志,这可能有助于在离线网络中配置 DNS。
升级 K3s
通过脚本升级
离线环境的升级可以通过以下步骤完成:
- 从K3s GitHub Release页面下载要升级到的 K3s 版本。将 tar 文件放在每个节点的
/var/lib/rancher/k3s/agent/images/
目录下。删除旧的 tar 文件。 - 复制并替换每个节点上
/usr/local/bin
中的旧 K3s 二进制文件。复制https://get.k3s.io 的安装脚本(因为它可能在上次发布后发生了变化)。再次运行脚本。 - 重启 K3s 服务。
启用自动升级功能
除了可以通过脚本升级 K3s 以外,您还可以启用自动升级功能,以保持离线环境中的 K3s 版本与最新的 K3s 版本同步。
从 v1.17.4+k3s1 开始,K3s 支持自动升级。要在离线环境中启用此功能,您必须确保所需镜像在您的私有镜像仓库中可用。
- 你将需要与你打算升级到的 K3s 版本相对应的 rancher/k3s-upgrade 版本。注意,镜像标签将 K3s 版本中的
+
替换为-
,因为 Docker 镜像不支持+
。 - 你还需要在你要部署的
system-upgrad-controller manifest
YAML 中指定的 system-upgrad-controller
和kubectl
的版本。在这里检查 system-upgrad-controller 的最新版本,并下载 system-upgrad-controller.yaml
来确定你需要推送到私有镜像仓库的版本。例如,在system-upgrade-controller
的 v0.4.0 版本中,在 manifest YAML 中指定了这些镜像: - 将必要的 rancher/k3s-upgrade、rancher/system-upgrade-controller 和 rancher/kubectl 镜像添加到您的私有镜像仓库中以后 ,就可以按照K3s 自动升级指南进行操作。
rancher/system-upgrade-controller:v0.4.0
rancher/kubectl:v0.17.0
更多建议: