Skip to main content

2、同步镜像到私有镜像仓库

Helm 3 已经发布,Rancher 提供了使用 Helm 3 安装 Rancher 的操作指导。 Helm 3 的易用性和安全性都比 Helm 2 更高,如果您使用的是 Helm 2,我们建议您首先将 Helm 2迁移到 Helm 3,然后使用 Helm3 安装 Rancher。 本文提供了较早版本的使用 Helm 2 安装 Rancher 高可用的安装方法,如果无法升级到 Helm 3,可以使用此方法。

先决条件: 已创建私有镜像仓库

注意: 对于高可用安装和单节点安装而言,同步镜像到私有镜像仓库的过程是相同的。但是同步用来创建 Linux 集群的镜像和用来创建 Windows 集群的镜像过程是不同的。

默认情况下,Rancher 中所有用于创建 Kubernetes 集群或运行任何工具的镜像都从 Docker Hub 中拉取,如: 监控、日志、告警、流水线等镜像。但是在离线环境下安装 Rancher 的步骤略有不同。您需要创建一个私有镜像库,将所有镜像下载到这个私有镜像库里,然后使用 Rancher Server 访问这个仓库,从仓库中拉取镜像。

本节描述如何在离线环境中设置您的私有镜像库,以便在安装 Rancher 时,Rancher 从私有镜像库拉取所需的镜像。

默认情况下,我们假设只配置 Linux 集群,所以本文只提供了如何推送 Linux 需要的镜像到私有镜像库的步骤。如果您需要创建 Windows 集群,请参考创建 Windows 集群

只需要通过 Rancher 创建 Linux 集群#

对于只用来创建 Linux 集群的 Rancher Server,请按以下步骤推送镜像到私有镜像库。

  • A. 查找您用的 Rancher 版本所需要的资源
  • B. 搜集所有必需的镜像
  • C. 将镜像保存到您的工作站中
  • D. 推送镜像到私有镜像库

先决条件#

这些步骤要求您使用一个 Linux 工作站,它可以访问互联网和您的私有镜像库。请确保至少有 20GB 的磁盘空间可用。

如果要使用 ARM64 主机,则镜像库必须支持 docker manifest 功能。截至 2020 年 5 月,Amazon Elastic Container Registry 不支持 docker manifest。

A. 查找您用的 rancher 版本所需要的资源#

  1. 浏览我们的版本发布页面,查找您想安装的 Rancher v2.x.x 版本。不要下载标记为 rcPre-release 的版本,因为它们在生产环境下是不稳定的。

  2. 从发行版 Assets 部分下载以下文件:

Release 文件描述
rancher-images.txt此文件包含安装 Rancher、创建集群和运行 Rancher 工具所需的镜像列表。
rancher-save-images.sh这个脚本会从 DockerHub 中拉取在文件rancher-images.txt中描述的所有镜像,并将它们保存为文件rancher-images.tar.gz
rancher-load-images.sh这个脚本会载入文件rancher-images.tar.gz中的镜像,并将它们推送到您自己的私有镜像库。

B. 收集所有必需的镜像(针对使用 Rancher 生成的自签名证书的高可用安装)#

在安装高可用过程中,如果选择使用 Rancher 默认的自签名 TLS 证书,则还必须将 cert-manager 镜像添加到 rancher-images.txt 文件中。如果使用自己的证书,则跳过此步骤。

  1. 获取最新的cert-manager Helm chart,并解析模板以获取镜像详细信息:

    注意: 由于cert-manager最近的改动,您需要升级cert-manager版本。果您要升级 Rancher 并且使用cert-manager的版本低于 v0.12.0,请看我们的升级文档

    helm repo add jetstack https://charts.jetstack.io
    helm repo update
    helm fetch jetstack/cert-manager --version v0.12.0
    helm template ./cert-manager-<version>.tgz | grep -oP '(?<=image: ").*(?=")' >> ./rancher-images.txt
  2. 对镜像列表进行排序和唯一化,以去除重复的镜像源。

    sort -u rancher-images.txt -o rancher-images.txt

C. 将镜像保存到您的工作站中#

  1. 添加 rancher-save-images.sh文件的可执行权限。

    chmod +x rancher-save-images.sh
  2. 执行脚本rancher-save-images.sh并以--image-list ./rancher-images.txt 作为参数,创建所需镜像的压缩包。

    ./rancher-save-images.sh --image-list ./rancher-images.txt
    提示

    国内用户,可以从 http://mirror.rancher.cn --> rancher --> [rancher 版本] 下载 rancher-save-images.sh,该脚本支持通过参数 --from-aliyun true 来指定从阿里云镜像仓库拉去 rancher 镜像(从 rancher/rancher release 下载的 rancher-save-images.sh 不支持该参数),例如:

    ./rancher-save-images.sh --image-list ./rancher-images.txt --from-aliyun true
    Image pull success: registry.cn-hangzhou.aliyuncs.com/rancher/busybox
    Image pull success: registry.cn-hangzhou.aliyuncs.com/rancher/backup-restore-operator:v1.0.4-rc4
    ...

    结果: Docker 开始会拉取用于离线安装所需的镜像。这个过程会花费几分钟时间。完成时,您的当前目录会输出名为rancher-images.tar.gz的压缩包。请确认文件存在这个目录里。

D. 推送镜像到私有镜像库#

使用脚本将文件 rancher-images.tar.gz 中的镜像转移到您自己的私有镜像库。文件 rancher-images.txt 应该位于工作站中运行 rancher-load-images.sh 脚本的同一目录下。

  1. 登录私有镜像库。

    docker login <REGISTRY.YOURDOMAIN.COM:PORT>
  2. 添加 rancher-load-images.sh文件的可执行权限。

    chmod +x rancher-load-images.sh
  3. 使用脚本 rancher-load-images.sh提取rancher-images.tar.gz文件中的镜像,根据文件rancher-images.txt中的镜像列表对提取的镜像文件重新打 tag 并推送到您的私有镜像库中。

    ./rancher-load-images.sh --image-list ./rancher-images.txt --registry <REGISTRY.YOURDOMAIN.COM:PORT>`

需要通过 Rancher 创建 Linux 集群 和 Windows 集群#

v2.3.0 及以后版本可用

对于用来创建 Linux 和 Windows 集群的 Rancher Server,会有不同的步骤来为您的私有镜像库同步 Windows 镜像和 Linux 镜像。因为一个 Windows 集群会包含 Linux 和 Windows 的混合节点。

同步 Windows 镜像#

从 Windows 工作站中收集和推送 Windows 镜像。

  • A. 查找您用的 rancher 版本所需要的资源
  • B. 将镜像保存到您的 Windows 服务工作站中
  • C. 准备 Docker 守护进程
  • D. 推送镜像到私有镜像库

先决条件#

这些步骤要求您使用 Windows Server 1809 工作站,该工作站能访问网络、能访问您的私有镜像库 以及至少 50 GB 的磁盘空间。

工作站必须安装 Docker 18.02+版本,因为这个版本的 Docker 支持 manifests,这个特性是设置 Windows 集群所必须的。

如果要使用 ARM64 主机,则镜像库必须支持 docker manifest 功能。截至 2020 年 5 月,Amazon Elastic Container Registry 不支持 docker manifest。

A. 查找您用的 Rancher 版本所需要的资源#

  1. 浏览我们的版本发布页面并查找您想要安装的 Rancher v2.x.x 版本。不要下载标记为 rcPre-release 的版本,因为它们在生产环境下不稳定。

  2. 从发行版本的 "Assets" 部分,下载下列文件:

    Release 文件描述
    rancher-windows-images.txt这个文件包含设置 Windows 集群所需的 Windows 镜像列表。
    rancher-save-images.ps1这个脚本会从 DockerHub 上拉取所有在文件rancher-windows-images.txt中列举的镜像,并将它们保存到rancher-windows-images.tar.gz文件中。
    rancher-load-images.ps1这个脚本会从压缩包rancher-windows-images.tar.gz中加载镜像,并把它们推送到您的私有镜像库 中。

B. 将镜像保存到您的 Windows 服务工作站中#

  1. powershell中,进入上一步有下载文件的目录里。

  2. 运行脚本 rancher-save-images.ps1, 去创建所有必需的压缩包:

    ./rancher-save-images.ps1

    步骤结果: Docker 会开始拉取离线安装所需要的镜像。这个过程需要几分钟时间,请耐心等待。拉取镜像结束后,您的当前目录会输出名为rancher-windows-images.tar.gz的压缩包。请确认输出文件是否存在。

C. 准备 Docker 守护进程#

将您的私有镜像库地址追加到 Docker 守护进程配置文件(C:\ProgramData\Docker\config\daemon.json)的allow-nondistributable-artifacts配置字段中。由于 Windows 镜像的基础镜像是由mcr.microsoft.com Registry 维护的,这一步是必须的,因为 Docker Hub 中缺少 Microsoft 镜像仓库层,需要将其拉入私有镜像库。

{
...
"allow-nondistributable-artifacts": [
...
"<REGISTRY.YOURDOMAIN.COM:PORT>"
]
...
}

D. 推送镜像到私有镜像库#

通过脚本将文件rancher-windows-images.tar.gz中的镜像移入到您私有镜像库中。在工作站中,文件rancher-windows-images.txt要放在与运行脚本rancher-load-images.ps1同一目录下。

  1. 如果需要,请使用 powershell,登录到您的私有镜像库:

    docker login <REGISTRY.YOURDOMAIN.COM:PORT>
  2. powershell中,使用 rancher-load-images.ps1脚本,提取文件rancher-images.tar.gz中的镜像,重新打 tag 并将它们推送到您的私有镜像库中:

    ./rancher-load-images.ps1 --registry <REGISTRY.YOURDOMAIN.COM:PORT>

同步 Linux 镜像#

Linux 镜像需要从 Linux 主机上收集和推送,但是必须先将 Windows 镜像推送到您的私有镜像库,然后再推送 Linux 镜像。这些步骤不同于只支持 Linux 集群设置步骤,因为被推送的 Linux 镜像实际是支持 Windows 和 Linux 镜像的 manifest 镜像。

  • A. 查找您用的 rancher 版本所需要的资源
  • B. 收集所有需要的镜像
  • C. 将镜像保存到您的 Linux 服务工作站中
  • D. 推送镜像到私有镜像库

先决条件#

在把 Linux 镜像推送到私有镜像库中之前,必须先把 Windows 镜像推送到私有镜像库中。如果您已经把 Linux 镜像推送到私有镜像库中,则需要再次按照这些说明重新推送,因为它们将发布支持 Windows 和 Linux 镜像的 manifest 镜像。

这些步骤要求您使用一个 Linux 工作站,它能访问互联网,而且可以访问您的私有镜像库。并且至少有 20GB 的磁盘空间。

因为需要支持 manifest 特性,工作站必须装有 Docker 18.02+ 版本,这是配置 Windows 集群的先决条件。

A. 查找您用的 Rancher 版本所需要的资源#

  1. 浏览我们的版本发布页面并查找您想要安装的 Rancher v2.x.x 版本。不要下载标记为 rc or Pre-release 的版本,因为它们在生产环境下不稳定。

  2. 从发行版 Assets 部分下载以下文件,这些文件是离线环境下安装 Rancher 所必需的:

    Release 文件描述
    rancher-images.txt此文件包含安装 Rancher、设置集群和用户 Rancher 工具所需的镜像列表。
    rancher-windows-images.txt此文件包含需要设置 Windows 集群所需的镜像列表。
    rancher-save-images.sh这个脚本会从 Docker Hub 中拉取所有在文件rancher-images.txt中列举的镜像并将它们保存到rancher-images.tar.gz文件中。
    rancher-load-images.sh这个脚本会从压缩包rancher-images.tar.gz中加载镜像,并把它们推送到您的私有镜像库 中。

B. 收集所有必需的镜像#

针对使用 Rancher 生成的自签名证书安装的高可用: 在安装 Kubernetes 过程中,如果选择使用 Rancher 默认的自签名 TLS 证书,则还必须将cert-manager镜像添加到rancher-images.txt文件中。如果使用自己的证书,则跳过此步骤。

  1. 获取最新的cert-manager Helm chart,并解析模板以获取镜像详细信息:

    注意: 由于cert-manager最近的改动,您需要升级cert-manager版本。如果您要升级 Rancher 并且使用cert-manager的版本低于 v0.12.0,请看我们的升级文档

    helm repo add jetstack https://charts.jetstack.io
    helm repo update
    helm fetch jetstack/cert-manager --version v0.12.0
    helm template ./cert-manager-<version>.tgz | grep -oP '(?<=image: ").*(?=")' >> ./rancher-images.txt
  2. 对镜像列表进行排序和唯一化,以去除重复的镜像源:

    sort -u rancher-images.txt -o rancher-images.txt

C. 将镜像保存到您的工作站中#

  1. 给脚本添加 rancher-save-images.sh 可执行权限:

    chmod +x rancher-save-images.sh
  2. 以镜像列表文件rancher-images.txt为参数执行脚本 rancher-save-images.sh来创建所有必须镜像的压缩包:

    ./rancher-save-images.sh --image-list ./rancher-images.txt
    提示

    国内用户,可以从 http://mirror.rancher.cn --> rancher --> [rancher 版本] 下载 rancher-save-images.sh,该脚本支持通过参数 --from-aliyun true 来指定从阿里云镜像仓库拉去 rancher 镜像(从 rancher/rancher release 下载的 rancher-save-images.sh 不支持该参数),例如:

    ./rancher-save-images.sh --image-list ./rancher-images.txt --from-aliyun true
    Image pull success: registry.cn-hangzhou.aliyuncs.com/rancher/busybox
    Image pull success: registry.cn-hangzhou.aliyuncs.com/rancher/backup-restore-operator:v1.0.4-rc4
    ...

    结果: Docker 会开始拉取用于离线安装所需的镜像。这个过程会花费几分钟时间。完成时,您的当前目录会输出名为 rancher-images.tar.gz 的压缩包。请确认文件存在这个目录里。

D. 推送镜像到私有镜像库#

用脚本rancher-load-images.sh将文件rancher-images.tar.gz中的镜像移入到您私有镜像库中。在工作站中,镜像列表文件 rancher-images.txt / rancher-windows-images.txt要放在与运行脚本rancher-load-images.sh同一目录下。

  1. 请先登录到自己的私有镜像库 中:

    docker login <REGISTRY.YOURDOMAIN.COM:PORT>
  2. 给文件 rancher-load-images.sh 添加可执行权限:

    chmod +x rancher-load-images.sh
  3. 使用 rancher-load-images.sh脚本,提取文件rancher-images.tar.gz中的镜像,重新打 tag 并将它们推送到您的私有镜像库 中:

    ./rancher-load-images.sh --image-list ./rancher-images.txt \
    --windows-image-list ./rancher-windows-images.txt \
    --registry <REGISTRY.YOURDOMAIN.COM:PORT>

后续操作#

安装 Rancher 高可用安装 Rancher 单节点

Last updated on by yzeng25