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

Rancher 离线安装

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

您可按照 Rancher 离线 Helm CLI 安装 文档在离线环境中安装 Rancher。

最佳实践

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

    #!/bin/bash

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

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

    Registry 服务器建议预留至少 100GB 的磁盘空间以存储 Rancher 所需的全部镜像。

    登录至私有镜像仓库:

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

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

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

  2. Rancher GitHub Release 页面下载 Rancher 的镜像列表文件 rancher-images.txt

    本例使用版本为 v2.7.9

    wget 'https://github.com/rancher/rancher/releases/download/v2.7.9/rancher-images.txt'

    rancher-images.txt 镜像列表文件包含 Rancher 核心镜像、Chart 镜像、以及 KDM(Kontainer Driver Metadata)镜像(KDM 镜像包含了 RKE、RKE2 和 K3s 镜像)。

  3. 本例使用 cert-manager 生成 Rancher 的 HTTPS 证书。参考 收集 cert-manager 镜像 文档将 cert-manager 镜像添加至 rancher-images.txt 镜像列表中。

    helm repo add jetstack https://charts.jetstack.io
    helm repo update
    helm fetch jetstack/cert-manager --version v1.11.0
    helm template ./cert-manager-v1.11.0.tgz | awk '$1 ~ /image:/ {print $2}' | sed s/\"//g >> ./rancher-images.txt
  4. 如果私有镜像仓库的主机可以访问公共网络,您可使用 Hangar mirror 命令,将 amd64arm64 架构的容器镜像从公开的镜像仓库服务器 Mirror 至私有镜像仓库。

    #!/bin/bash

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

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

    #!/bin/bash

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

    #!/bin/bash

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

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

    在下载镜像时请确保磁盘预留了足够的空间。以上命令最终下载的镜像压缩包体积可能会超过 50GB。

    建议至少预留 80GB 的磁盘空间。

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

    #!/bin/bash

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

    # 如有需要,验证已上传的镜像。
    hangar load validate \
    -s 'rancher-images.zip' \
    -d 'localhost:5000' \
    --arch 'amd64,arm64' \
    --os 'linux' \
    --jobs 5 \
    --tls-verify=false
  6. 在部署完私有镜像仓库后,您可以使用该私有镜像仓库运行 RKE、RKE2 或 K3s 集群。

    本例中使用 K3s 版本 v1.26.8+k3s1 作为 Rancher 的 Kubernetes 集群。

    rancher-images.txt 镜像列表文件中已包含了 K3s 所需镜像,您无需重新拷贝容器镜像至私有镜像仓库中。

    参考 K3s 私有镜像仓库配置,创建 /etc/rancher/k3s/registries.yaml 配置文件。

    备注

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

    mkdir -p /etc/rancher/k3s
    /etc/rancher/k3s/registries.yaml
    mirrors:
    docker.io:
    endpoint:
    - "http://registry.example.com:5000"
    "registry.example.com:5000":
    endpoint:
    - "http://registry.example.com:5000"
  7. 参考 离线安装 K3s,下载 K3s install.sh 一键安装脚本和二进制文件,之后安装 K3s。

    export INSTALL_K3S_SKIP_DOWNLOAD=true
    export INSTALL_K3S_EXEC="--system-default-registry=registry.example.com:5000"

    ./install.sh

    在安装 Rancher 之前,您还需要安装 kubectlhelm 工具。

  8. 在安装 K3s 后,您可执行以下命令,从私有镜像仓库中拉取镜像,以确保 registries.yaml 配置正确:

    k3s crictl pull registry.example.com:5000/rancher/mirrored-pause:3.6

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

    $ sudo k3s crictl images
    IMAGE TAG IMAGE ID SIZE
    registry.example.com:5000/rancher/klipper-helm v0.8.2-build20230815 5f89cb8137ccb 90.9MB
    registry.example.com:5000/rancher/local-path-provisioner v0.0.24 b29384aeb4b13 14.9MB
    ......
  9. 参考 离线 Helm CLI 安装 Rancher 文档,安装 Rancher。

    备注

    本例中,假设您的 Rancher 服务器 IP 地址绑定了域名 rancher.example.com

    安装 cert-manager CRD 并参考 获取 Cert-Manager Chart 文档安装 cert-manager

    #!/bin/bash

    kubectl create namespace cert-manager
    kubectl apply -f cert-manager-crd.yaml

    helm install cert-manager ./cert-manager-v1.11.0.tgz \
    --namespace 'cert-manager' \
    --set image.repository='registry.example.com:5000/jetstack/cert-manager-controller' \
    --set webhook.image.repository='registry.example.com:5000/jetstack/cert-manager-webhook' \
    --set cainjector.image.repository='registry.example.com:5000/jetstack/cert-manager-cainjector' \
    --set startupapicheck.image.repository='registry.example.com:5000/jetstack/cert-manager-ctl'

    之后 下载 Rancher Helm Chart 文件 并使用 Helm CLI 安装 Rancher。

    #!/bin/bash

    kubectl create namespace cattle-system

    helm install rancher ./rancher-2.7.9.tgz \
    --namespace cattle-system \
    --set replicas=1 \
    --set bootstrapPassword="RancherForFun" \
    --set hostname="rancher.example.com" \
    --set rancherImage="registry.example.com:5000/rancher/rancher" \
    --set systemDefaultRegistry="registry.example.com:5000" \
    --set useBundledSystemChart=true # Use the packaged Rancher system charts
  10. 安装完成后,在浏览器通过 Rancher Hostname 链接(本例为 rancher.example.com)访问 Rancher。

    本例中,BootstrapPassword 为 RancherForFun