跳到主要内容
版本:v1.7

RKE2 离线安装

本例将引导您使用 Hangar 快速搭建包含多架构容器镜像的 Registry 服务器,以用于 RKE2 Air-Gap(离线环境)安装。

您可按照 RKE2 私有镜像仓库方法 在离线环境安装 RKE2。

最佳实践

  1. 部署一个 registry 服务器,用于存储 RKE2 容器镜像。

    #!/bin/bash

    # 本例中,将 RKE2 容器镜像 Layer 文件存储至本地目录
    mkdir -p registry

    docker run -d \
    -p 5000:5000 \
    -v $(pwd)/registry:/var/lib/registry \
    --name registry \
    registry:2

    登录至私有镜像仓库:

    hangar login 'localhost:5000' --tls-verify=false
    备注

    默认情况下,Registry 可以使用任意的用户名和密码登录。

    您可以参考 Distribution Registry Token Authentication 配置 Registry 的认证信息,并参考 HTTPS certificate 配置 HTTPS。

  2. RKE2 GitHub Release 页面下载 RKE2 镜像列表。

    本例使用版本为 v1.27.7+rke2r1

    # 下载 AMD64 架构镜像列表
    wget 'https://github.com/rancher/rke2/releases/download/v1.27.7%2Brke2r1/rke2-images-all.linux-amd64.txt'

    # 下载 ARM64 架构镜像列表
    wget 'https://github.com/rancher/rke2/releases/download/v1.27.7%2Brke2r1/rke2-images-all.linux-arm64.txt'

    如果您需要在 amd64 架构和 arm64 架构的机器上运行 RKE2,可使用以下命令将 amd64arm64 架构的镜像列表合并为一个镜像列表。

    sort rke2-images-all.linux-*.txt | uniq > rke2-images-all.linux.txt
  3. 如果私有镜像仓库的主机可以访问公共网络,您可使用 Hangar mirror 命令,将 amd64arm64 架构的容器镜像从 Docker Hub Mirror 至私有镜像仓库。

    #!/bin/bash

    hangar mirror \
    -f 'rke2-images-all.linux.txt' \
    -s 'docker.io' \
    -d 'localhost:5000' \
    --arch 'amd64,arm64' \
    --os 'linux' \
    --jobs 5 \
    --tls-verify=false

    可使用 mirror validate 命令确保镜像均被正确拷贝至私有镜像仓库中。

    #!/bin/bash

    hangar mirror validate \
    -f 'rke2-images-all.linux.txt' \
    -s 'docker.io' \
    -d 'localhost:5000' \
    --arch 'amd64,arm64' \
    --os 'linux' \
    --jobs 5 \
    --tls-verify=false
  4. 如果主机无法访问至公共网络,可先在有网络连接的主机上使用 hangar save 命令保存镜像,之后使用 hangar load 命令将保存的容器镜像拷贝至私有镜像仓库中。

    #!/bin/bash

    # 将镜像保存在 rke-images.zip 压缩包中。
    # 在有网络连接的设备执行以下命令。
    hangar save \
    -f 'rke2-images-all.linux.txt' \
    -s 'docker.io' \
    -d 'rke2-images.zip' \
    --arch 'amd64,arm64' \
    --os 'linux' \
    --jobs 5

    # 如有需要,验证已保存的镜像。
    hangar save validate \
    -f 'rke2-images-all.linux.txt' \
    -s 'docker.io' \
    -d 'rke2-images.zip' \
    --arch 'amd64,arm64' \
    --os 'linux' \
    --jobs 5

    生成的 rke2-images.zip 压缩包含有 amd64arm64 架构的容器镜像。

    #!/bin/bash

    # 将 rke2-images.zip 保存的镜像上传至私有镜像仓库。
    # 可在无网络连接的设备上执行此命令。
    hangar load \
    -s 'rke2-images.zip' \
    -d 'localhost:5000' \
    --arch 'amd64,arm64' \
    --os 'linux' \
    --jobs 5 \
    --tls-verify=false

    # 如有需要,验证已上传的镜像。
    hangar load validate \
    -s 'rke2-images.zip' \
    -d 'localhost:5000' \
    --arch 'amd64,arm64' \
    --os 'linux' \
    --jobs 5 \
    --tls-verify=false
  5. 参考 RKE2 Containerd 镜像仓库配置 文档,创建 /etc/rancher/rke2/registries.yaml 配置文件。

    备注

    本例中,假设您的镜像仓库的 IP 地址绑定了域名 registry.example.com

    mkdir -p /etc/rancher/rke2
    /etc/rancher/rke2/registries.yaml
    mirrors:
    docker.io:
    endpoint:
    - "http://registry.example.com:5000"
    "registry.example.com:5000":
    endpoint:
    - "http://registry.example.com:5000"
  6. 参考 RKE2 离线安装 文档,安装 RKE2。

    创建配置文件,设定 RKE2 的 system-default-registryregistry.example.com

    /etc/rancher/rke2/config.yaml
    system-default-registry: "registry.example.com:5000"

    使用以下命令检查 RKE2 服务的运行状态。

    # 检查 RKE2 systemd 服务状态
    systemctl status rke2-server

    # 查看 RKE2 集群的所有 Pod
    # 默认的 kubeconfig 文件为 /etc/rancher/rke2/rke2.yaml
    export KUBECONFIG="/etc/rancher/rke2/rke2.yaml"
    kubectl get pods -A
  7. 在安装并启动 RKE2 后,您可执行以下命令,从私有镜像仓库中拉取镜像,以确保 registries.yaml 配置正确:

    sudo /var/lib/rancher/rke2/bin/crictl \
    --config "/var/lib/rancher/rke2/agent/etc/crictl.yaml" \
    pull registry.example.com:5000/rancher/mirrored-pause:3.6

    使用以下命令查看已拉取的镜像:

    $ sudo /var/lib/rancher/rke2/bin/crictl --config "/var/lib/rancher/rke2/agent/etc/crictl.yaml" images
    IMAGE TAG IMAGE ID SIZE
    registry.example.com:5000/rancher/hardened-calico v3.26.1-build20230802 a0e7293895577 195MB
    registry.example.com:5000/rancher/hardened-etcd v3.5.9-k3s1-build20230802 c6b7a4f2f79b2 64.4MB
    ......