将 Rancher 迁移到新集群

如果你要将 Rancher 迁移到一个新的 Kubernetes 集群,先不要在新集群上安装 Rancher。这是因为如果将 Rancher 还原到已安装 Rancher 的新集群,可能会导致问题。

先决条件

以下说明假设你已经完成备份创建,并且已经安装了用于部署 Rancher 的新 Kubernetes 集群。

将 Rancher 迁移到新集群 - 图1警告

你需要使用与第一个集群中设置的 Server URL 相同的主机名。否则,下游集群会在 UI 的管理页面显示为不可用,并且你不能点击集群内或集群的 Explore 按钮。

Rancher 必须是 2.5.0 或更高版本。

Rancher 可以安装到任意 Kubernetes 集群上,包括托管的 Kubernetes 集群(如 Amazon EKS 集群)。如需获取安装 Kubernetes 的帮助,请参见 Kubernetes 发行版的文档。你也可以使用以下 Rancher 的 Kubernetes 发行版:

1. 安装 rancher-backup Helm Chart

安装 rancher-backup chart,请使用 2.x.x 主要版本内的版本:

  1. 添加 helm 仓库:

    1. helm repo add rancher-charts https://charts.rancher.io
    2. helm repo update
  2. 使用 2.x.x rancher-backup 版本设置 CHART_VERSION 变量:

    1. helm search repo --versions rancher-charts/rancher-backup
    2. CHART_VERSION=<2.x.x>
  3. 安装 Chart:

    1. helm install rancher-backup-crd rancher-charts/rancher-backup-crd -n cattle-resources-system --create-namespace --version $CHART_VERSION
    2. helm install rancher-backup rancher-charts/rancher-backup -n cattle-resources-system --version $CHART_VERSION

    将 Rancher 迁移到新集群 - 图2备注

    以上假设你的环境具有到 Docker Hub 的出站连接。

    对于离线环境,在安装 rancher-backup Helm Chart 时,使用下面的 Helm 值从你的私有镜像仓库中拉取 backup-restore-operator 镜像。

    1. --set image.repository $REGISTRY/rancher/backup-restore-operator

2. 使用 Restore 自定义资源来还原备份

将 Rancher 迁移到新集群 - 图3重要提示:

Kubernetes v1.22 是 Rancher 2.6.3 的实验功能,不支持使用 apiVersion apiextensions.k8s.io/v1beta1来还原包含 CRD 文件的备份文件。在 v1.22 中,rancher-backup 应用的默认 resourceSet 只收集使用 apiextensions.k8s.io/v1 的 CRD。你可以通过下面两种方法解决这个问题。

  1. 使用 apiVersion v1 来更新默认 resourceSet,从而收集 CRD。

  2. 使用 apiextensions.k8s.io/v1 作为替代,来更新默认 resourceSet 和客户端,从而在内部使用新的 API。

    将 Rancher 迁移到新集群 - 图4备注

    在为 v1.22 版本制作或恢复备份时,Rancher 版本和本地集群的 Kubernetes 版本应该是一样的。由于集群中支持的 apiVersion 和备份文件中的 apiVersion 可能不同,因此在还原备份时请考虑 Kubernetes 的版本。

  3. 在使用 S3 对象存储作为需要使用凭证的还原的备份源时,请在此集群中创建一个 Secret 对象以添加 S3 凭证。Secret 数据必须有两个密钥,分别是包含 S3 凭证的 accessKeysecretKey

    你可以在任何命名空间中创建 Secret,本示例使用 default 命名空间。

    1. kubectl create secret generic s3-creds \
    2. --from-literal=accessKey=<access key> \
    3. --from-literal=secretKey=<secret key>

    将 Rancher 迁移到新集群 - 图5备注

    在上面的命令中添加你的 Access Key 和 Secret Key 作为 accessKeysecretKey 的值。

  4. 创建一个 Restore 对象:

    在迁移期间,prune 必须设置为 false。请参见下面的示例:

    1. # restore-migration.yaml
    2. apiVersion: resources.cattle.io/v1
    3. kind: Restore
    4. metadata:
    5. name: restore-migration
    6. spec:
    7. backupFilename: backup-b0450532-cee1-4aa1-a881-f5f48a007b1c-2020-09-15T07-27-09Z.tar.gz
    8. prune: false
    9. encryptionConfigSecretName: encryptionconfig
    10. storageLocation:
    11. s3:
    12. credentialSecretName: s3-creds
    13. credentialSecretNamespace: default
    14. bucketName: backup-test
    15. folder: ecm1
    16. region: us-west-2
    17. endpoint: s3.us-west-2.amazonaws.com

    将 Rancher 迁移到新集群 - 图6重要提示:

    只有在创建备份时启用了加密功能时,才需要设置 encryptionConfigSecretName 字段。

    如果适用,请提供包含加密配置文件的 Secret 对象的名称。如果你只有加密配置文件,但没有在此集群中创建 Secret,请按照以下步骤创建 Secret。

    1. 创建加密配置文件

    2. 下面的命令使用一个名为 encryption-provider-config.yaml 的文件,使用了 --from-file 标志。将 EncryptionConfiguration 保存到名为 encryption-provider-config.yaml 的文件中之后,运行以下命令:

      1. kubectl create secret generic encryptionconfig \
      2. --from-file=./encryption-provider-config.yaml \
      3. -n cattle-resources-system
  5. 应用清单,并监控 Restore 的状态:

    1. 应用 Restore 对象资源:

      1. kubectl apply -f restore-migration.yaml
    2. 观察 Restore 的状态:

      1. kubectl get restore
    3. 查看恢复日志:

      1. kubectl logs -n cattle-resources-system --tail 100 -f -l app.kubernetes.io/instance=rancher-backup
    4. Restore 资源的状态变成 Completed 后,你可以继续安装 cert-manager 和 Rancher。

3. 安装 cert-manager

按照在 Kubernetes 上安装 cert-manager的步骤安装 cert-manager

4. 使用 Helm 安装 Rancher

使用与第一个集群上使用的相同版本的 Helm 来安装 Rancher:

对于 Kubernetes v1.25 或更高版本,使用 Rancher v2.7.2-v2.7.4 时,将 global.cattle.psp.enabled 设置为 false。对于 Rancher v2.7.5 及更高版本来说,这不是必需的,但你仍然可以手动设置该选项。

  1. helm install rancher rancher-latest/rancher \
  2. --namespace cattle-system \
  3. --set hostname=<same hostname as the server URL from the first Rancher server> \
  4. --version x.y.z

将 Rancher 迁移到新集群 - 图7备注

如果原始的 Rancher 环境正在运行,你可以使用 kubeconfig 为原始环境收集当前值:

  1. helm get values rancher -n cattle-system -o yaml > rancher-values.yaml

你可以使用 rancher-values.yaml 文件来复用这些值。确保将 kubeconfig 切换到新的 Rancher 环境。

  1. helm install rancher rancher-latest/rancher -n cattle-system -f rancher-values.yaml --version x.y.z