本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

隔离安装

本指南将引导您通过三步过程在隔离的环境中安装 K3s。

您可以使用在 Prime Artifacts URL 上列出的任何 K3s Prime 版本来获取这些步骤中提到的资产。要了解有关 Prime Artifacts URL 的更多信息,请参阅我们的 仅限 Prime 的文档。需要身份验证。使用您的 SUSE 客户中心 (SCC) 凭据登录。

加载镜像

每种镜像加载方法有不同的要求,适用于不同的隔离场景。选择最适合您基础设施和安全要求的方法。

  • 私有注册表方法

  • 手动部署镜像方法

  • 嵌入式注册表镜像

这些步骤假设您已经在隔离环境中创建了节点,使用捆绑的 containerd 作为容器运行时,并且在您的环境中有一个符合 OCI 标准的私有注册表。

如果您尚未设置私有 Docker 注册表,请参阅 官方注册表文档

创建注册表 YAML 并推送镜像

  1. 从您将运行的 K3s 版本的 Prime Artifacts URL 页面获取适合您架构的镜像归档。

  2. 使用 docker image load k3s-airgap-images-amd64.tar.zst 将镜像从 tar 文件导入到 docker 中。

  3. 使用 docker tagdocker push 重新标记并推送加载的镜像到您的私有注册表。

  4. 请遵循 私有注册表配置 指南创建和配置 registries.yaml 文件。

  5. 继续查看下面的 安装 K3s 部分。

这些步骤假设您已经在隔离环境中创建了节点,使用捆绑的 containerd 作为容器运行时,并且无法或不想使用私有注册表。

此方法要求您手动将必要的镜像部署到每个节点,适用于在边缘部署中运行私有注册表不切实际的情况。

准备镜像目录和隔离镜像压缩包

  1. 在可以访问互联网的机器上,从您计划安装的K3s版本的https://scc.suse.com/rancher-docs/rancherprime/latest/en/reference-guide.html#prime-artifacts-url[Prime Artifacts URL]页面下载适合您架构的镜像归档。例如:

    curl -L -o k3s-airgap-images-amd64.tar.zst "<PRIME-ARTIFACTS-URL>/k3s/v1.35.1%2Bk3s1/k3s-airgap-images-amd64.tar.zst"
  2. 将镜像归档传输到隔离节点。将它们放置在代理的镜像目录中,例如:

    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.33.1%2Bk3s1/k3s-airgap-images-amd64.tar.zst"
    sudo cp k3s-airgap-images-amd64.tar.zst /var/lib/rancher/k3s/agent/images/k3s-airgap-images-amd64.tar.zst
  3. 继续查看下面的 安装 K3s 部分。

启用条件镜像导入

版本门控

条件镜像导入自2025年5月的版本开始可用:v1.33.1+k3s1,v1.32.5+k3s1,v1.31.9+k3s1,v1.30.13+k3s1。

每次k3s启动时都会导入镜像归档。这样做是为了确保所有镜像始终可用,即使某些镜像在上次启动后被删除或修剪。然而,这会延迟启动,因为kubelet在处理完所有归档之前不会启动。为了缓解这种延迟,有一个选项可以仅导入自上次导入以来发生变化的归档,即使在重启之间也是如此。

要启用此功能,请在镜像目录中创建一个`.cache.json`文件:

touch /var/lib/rancher/k3s/agent/images/.cache.json

缓存文件将在处理归档时存储元数据。只要归档的大小和修改时间保持不变,K3s 的后续重启将不会导入镜像。

当启用此功能时,将无法确保每次k3s启动时所有镜像都可用。如果自上次启动以来删除或修剪了某个镜像,请手动采取措施重新导入该镜像。或者:

  • 手动使用`ctr image import`导入归档。

  • 使用`touch`来修改包含镜像的归档的时间戳。

  • 清空`.cache.json`文件的内容,然后重启k3s。

K3s 包含一个嵌入式分布式 OCI 兼容的注册表镜像。 当启用并正确配置时,任何节点上的 containerd 镜像存储中的可用镜像可以被其他集群成员拉取,而无需访问外部镜像注册表。

镜像可以来自上游注册表、注册表镜像或隔离镜像归档。 有关启用嵌入式分布式注册表镜像的更多信息,请参见嵌入式注册表镜像文档。

安装K3s

先决条件

在安装K3s之前,选择上面的加载镜像选项之一,以预填充K3s安装所需的镜像。

下载二进制文件和脚本

  • 从https://scc.suse.com/rancher-docs/rancherprime/latest/en/reference-guide.html#prime-artifacts-url[Prime Artifacts URL]页面下载K3s二进制文件,确保与获取隔离镜像时使用的版本相匹配。将二进制文件放置在每个隔离节点的`/usr/local/bin`中,并确保其可执行。

    sudo curl -Lo /usr/local/bin/k3s <PRIME-ARTIFACTS-URL>/k3s/v1.35.1%2Bk3s1/k3s
    sudo chmod +x /usr/local/bin/k3s
  • 在https://get.k3s.io[get.k3s.io]下载K3s安装脚本。将安装脚本放置在每个隔离节点的任意位置,并命名为`install.sh`。

    curl -Lo install.sh https://get.k3s.io
    chmod +x install.sh
设置默认网络路由 - 对于没有默认路由的节点是必需的

如果您的节点没有具有默认路由的接口,则必须配置默认路由;即使是通过虚拟接口的黑洞路由也可以。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
下载SELinux RPM - 对于启用SELinux的隔离节点是必需的

如果在启用SELinux的隔离节点上运行,您必须在安装K3s之前手动安装k3s-selinux RPM。此 RPM 包含 K3s 正常运行所需的 SELinux 策略。最新版本的 RPM 可以在 这里 找到。例如,在 CentOS 8 上:

# On an internet accessible machine:
curl -LO https://github.com/k3s-io/k3s-selinux/releases/download/v1.6.stable.1/k3s-selinux-1.6-1.el8.noarch.rpm

# Transfer RPM to air-gapped machine
sudo yum install ./k3s-selinux-1.6-1.el8.noarch.rpm

k3s-selinux RPM 安装需要以下依赖项在操作系统中可用:

  • container-selinux

  • policycoreutils

  • selinux-policy

有关更多信息,请参见 SELinux 部分。

运行安装脚本

您可以按照以下描述在一个或多个服务器上安装 K3s。

  • 单服务器配置

  • 高可用性配置

要在单个服务器上安装 K3s,只需在服务器节点上执行以下操作:

INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh

要添加额外的代理,请在每个代理节点上执行以下操作:

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 | INSTALL_K3S_ARTIFACT_URL=<PRIME-ARTIFACTS-URL>/k3s 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

K3s 的 --resolv-conf 标志会传递给 kubelet,这可能有助于在没有配置上游名称服务器的隔离网络中配置 pod DNS 解析。

升级

  • 手动升级

  • 自动升级方法

升级隔离环境可以通过以下方式完成:

  1. Prime Artifacts URL 页面下载您将要升级的 K3s 版本的新隔离镜像(tar 文件)。将 tar 文件放置在每个节点的 /var/lib/rancher/k3s/agent/images/ 目录中。删除旧的 tar 文件。

  2. 在每个节点的 /usr/local/bin 中复制并替换旧的 K3s 二进制文件。将安装脚本复制到 https://get.k3s.io(因为自上次发布以来可能已更改)。再次运行脚本,就像您过去一样,使用相同的环境变量。

  3. 重启 K3s 服务(如果安装程序没有自动重启的话)。

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

您需要与您打算升级的 K3s 版本相对应的 rancher/k3s-upgrade 版本。请注意,镜像标签将 K3s 发布中的 ` 替换为 `-`,因为 Docker 镜像不支持 `

您还需要在您将要部署的 system-upgrade-controller 清单 YAML 中指定的 system-upgrade-controller 和 kubectl 的版本。检查system-upgrade-controller的最新发布https://github.com/rancher/system-upgrade-controller/releases/latest[这里],并下载system-upgrade-controller.yaml以确定您需要推送到私有注册表的版本。例如,在 Upgrade Controller 的 v0.4.0 版本(即 system-upgrade-controller)中,这些映像在清单 YAML 中指定:

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

一旦您将必要的rancher/k3s-upgrade、rancher/system-upgrade-controller和rancher/kubectl映像添加到您的私有注册表中,请遵循自动升级指南。