断网环境安装
您可以使用两种不同的方法在断网环境中安装 K3s。断网环境是指任何未直接连接到互联网的环境。您可以部署私有注册表并镜像 docker.io,或者您可以手动部署镜像(例如小型集群)。
加载镜像
私有注册表方法
这些步骤假设您已在断网环境中创建了节点,正在使用捆绑的 containerd 作为容器运行时,并且在您的环境中有一个符合 OCI 标准的私有注册表可用。
如果您尚未设置私有 Docker 注册表,请参考官方注册表文档。
创建注册表 YAML 并推送镜像
- 从您将运行的 K3s 版本的发行版页面获取您架构的镜像存档。
- 使用
docker image load k3s-airgap-images-amd64.tar.zst
从 tar 文件将镜像导入到 docker 中。 - 使用
docker tag
和docker push
重新标记并推送加载的镜像到您的私有注册表。 - 按照私有注册表配置指南创建和配置
registries.yaml
文件。 - 继续执行下面的安装 K3s部分。
手动部署镜像方法
这些步骤假设您已在断网环境中创建了节点,正在使用捆绑的 containerd 作为容器运行时,并且无法或不想使用私有注册表。
此方法要求您手动将必要的镜像部署到每个节点,适用于运行私有注册表不切实际的边缘部署。
准备镜像目录和断网镜像 tarball
- 从您将运行的 K3s 版本的发行版页面获取您架构的镜像存档。
- 将镜像存档下载到代理的镜像目录,例如
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"
- 继续执行下面的安装 K3s部分。
嵌入式注册表镜像
嵌入式注册表镜像作为 2024 年 1 月发布的实验性功能提供:v1.26.13+k3s1、v1.27.10+k3s1、v1.28.6+k3s1、v1.29.1+k3s1
K3s 包含一个嵌入式分布式符合 OCI 标准的注册表镜像。启用并正确配置后,任何节点上的 containerd 镜像存储区中可用的镜像都可以被其他集群成员拉取,而无需访问外部镜像注册表。
镜像的来源可以是上游注册表、注册表镜像或断网镜像 tarball。有关启用嵌入式分布式注册表镜像的更多信息,请参阅嵌入式注册表镜像文档。
安装 K3s
先决条件
在安装 K3s 之前,请完成上面的私有注册表方法或手动部署镜像方法,预填充 K3s 安装所需的镜像。
二进制文件
- 从发行版页面下载 K3s 二进制文件,与用于获取断网镜像的版本相同。将二进制文件放置在每个断网节点上的
/usr/local/bin
中,并确保它是可执行的。 - 在get.k3s.io下载 K3s 安装脚本。将安装脚本放置在每个断网节点上的任何位置,并将其命名为
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
使用 INSTALL_K3S_SKIP_DOWNLOAD
环境变量运行 K3s 脚本时,K3s 将使用脚本和二进制文件的本地版本。
SELinux RPM
如果您打算在启用 SELinux 的情况下部署 K3s,则还需要在所有节点上安装相应的 k3s-selinux RPM。RPM 的最新版本可以在此处找到。例如,在 CentOS 8 上
On internet accessible machine:
curl -LO https://github.com/k3s-io/k3s-selinux/releases/download/v1.4.stable.1/k3s-selinux-1.4-1.el8.noarch.rpm
# Transfer RPM to air-gapped machine
On air-gapped machine:
sudo yum install ./k3s-selinux-1.4-1.el8.noarch.rpm
有关更多信息,请参阅SELinux部分。
在断网环境中安装 K3s
您可以在一台或多台服务器上安装 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
服务器的令牌通常位于 /var/lib/rancher/k3s/server/token
。
参考使用外部数据库实现高可用性或使用嵌入式数据库实现高可用性指南。您将调整安装命令,以便指定 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
K3s 的 --resolv-conf
标志传递给 kubelet,这可能有助于在主机未配置上游名称服务器的断网网络中配置 Pod DNS 解析。
升级
安装脚本方法
可以通过以下方式完成断网环境的升级
- 从您要升级到的 K3s 版本的发行版页面下载新的断网镜像(tar 文件)。将 tar 文件放置在每个节点上的
/var/lib/rancher/k3s/agent/images/
目录中。删除旧的 tar 文件。 - 复制并替换每个节点上
/usr/local/bin
中的旧 K3s 二进制文件。复制https://get.k3s.io上的安装脚本(因为它可能自上次发布以来已更改)。再次运行脚本,就像您过去使用相同的环境变量所做的那样。 - 重新启动 K3s 服务(如果安装程序未自动重新启动)。
自动升级方法
K3s 支持自动升级。要在断网环境中启用此功能,您必须确保所需的镜像在您的私有注册表中可用。
您将需要与您打算升级到的 K3s 版本相对应的 rancher/k3s-upgrade 版本。请注意,镜像标签将 K3s 发行版中的 +
替换为 -
,因为 Docker 镜像不支持 +
。
您还需要在部署的 system-upgrade-controller 清单 YAML 文件中指定的 system-upgrade-controller 和 kubectl 版本。查看 system-upgrade-controller 的最新版本 此处,并下载 system-upgrade-controller.yaml 以确定您需要推送到私有注册表的版本。例如,在 system-upgrade-controller 的 v0.4.0 版本中,这些镜像在清单 YAML 文件中指定。
rancher/system-upgrade-controller:v0.4.0
rancher/kubectl:v0.17.0
将必要的 rancher/k3s-upgrade、rancher/system-upgrade-controller 和 rancher/kubectl 镜像添加到您的私有注册表后,请按照 自动升级 指南操作。