documentation.suse.com / SUSE Edge 文档 / Day 2 操作 / Edge 3.1 迁移

27 Edge 3.1 迁移

本节提供将现有 Edge 3.0 版(包括 3.0.1 和 3.0.2 等次要版本)管理下游群集迁移到 Edge 3.1.0 版的迁移指南。

有关 Edge 3.1.0 组件版本的列表,请参见发行说明(第 45.1 节 “摘要”)。

27.1 管理群集

本节介绍如何将管理群集从 Edge 3.0 迁移到 Edge 3.1.0

管理群集组件应按以下顺序迁移:

27.1.1 操作系统 (OS)

本节介绍将管理群集节点的操作系统迁移到 Edge 3.1.0 支持的版本所需的步骤。

重要
重要

应对管理群集的每个节点执行以下步骤。

为了避免任何不可预见的问题,请先迁移群集的控制平面节点,然后再迁移工作节点。

27.1.1.1 先决条件

  • 已向 SCC 注册的节点 - 确保您的群集节点的操作系统已使用相应的订阅密钥注册,该密钥支持 Edge 3.1 发行说明(第 45.1 节 “摘要”)中指定的操作系统版本。

隔离:

  • 镜像 SUSE RPM 储存库 - 与 Edge 3.1.0 版本(第 45.1 节 “摘要”)中指定的操作系统相关的 RPM 储存库应镜像到本地,以便 transactional-update 可以访问。方法是使用 RMTSUMA

27.1.1.2 迁移步骤

注意
注意

以下步骤假设您以 root 身份运行,并且 kubectl 已配置为连接到管理群集。

  1. 将节点标记为不可调度:

    kubectl cordon <node_name>

    有关 cordon 命令选项的完整列表,请参见 kubectl cordon

  2. 或者,在某些情况下,您可能希望清空节点的工作负载:

    kubectl drain <node>

    有关 drain 命令选项的完整列表,请参见 kubectl drain

  3. 在迁移之前,您需要确保当前操作系统上的软件包已更新。为此,请执行:

    transactional-update

    上述命令执行 zypper up 以更新操作系统软件包。有关 transactional-update 的详细信息,请参见 transactional-update 指南

  4. 继续执行操作系统迁移:

    transactional-update --continue migration
    注意
    注意

    此处使用 --continue 选项来重用上一个快照,而无需重引导系统。

    • 如果您的订阅密钥支持 SUSE Linux Micro 6.0 版本,您将收到类似以下内容的提示:

      Day2 迁移操作系统迁移提示

      选择 SUSE Linux Micro 6.0 <arch> 对应的编号

      注意
      注意

      Edge 3.1.0 版本支持 SUSE Linux Micro 6.0 操作系统。

  5. 成功运行 transactional-update 后,要使更改在系统上生效,您需要重引导:

    reboot
  6. 主机重引导后,验证操作系统是否已迁移到 SUSE Linux Micro 6.0

    cat /etc/os-release

    输出应类似于:

    NAME="SL-Micro"
    VERSION="6.0"
    VERSION_ID="6.0"
    PRETTY_NAME="SUSE Linux Micro 6.0"
    ID="sl-micro"
    ID_LIKE="suse"
    ANSI_COLOR="0;32"
    CPE_NAME="cpe:/o:suse:sl-micro:6.0"
    HOME_URL="https://www.suse.com/products/micro/"
    DOCUMENTATION_URL="https://documentation.suse.com/sl-micro/6.0/"
    注意
    注意

    如果迁移失败,您可以使用以下命令回滚到上一个正常工作的快照:

    transactional-update rollback last

    您需要重引导系统才能使回滚生效。有关回滚过程的详细信息,请参见官方的 transactional-update 文档

  7. 将节点标记为可调度:

    kubectl uncordon <node_name>

27.1.2 RKE2

重要
重要

应对管理群集的每个节点执行以下步骤。

正如 RKE2 文档中所述,升级过程要求先升级群集的控制平面节点,且一次只能升级一个,等到这些节点都升级之后,再升级代理节点。

注意
注意

为了确保能够实现灾难恢复,我们建议备份 RKE2 群集数据。有关如何执行此操作的信息,请查看 RKE2 备份和恢复指南rke2 二进制文件的默认位置为 /opt/rke2/bin

您可以使用 RKE2 安装脚本将 RKE2 版本升级到 Edge 3.1.0,如下所示:

  1. 将节点标记为不可调度:

    kubectl cordon <node_name>

    有关 cordon 命令选项的完整列表,请参见 kubectl cordon

  2. 或者,在某些情况下,您可能希望清空节点的工作负载:

    kubectl drain <node>

    有关 drain 命令选项的完整列表,请参见 kubectl drain

  3. 使用 RKE2 安装脚本安装 Edge 3.1.0 兼容的正确 RKE2 版本:

    curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION=v1.30.3+rke2r1 sh -
  4. 重新启动 rke2 进程:

    # For control-plane nodes:
    systemctl restart rke2-server
    
    # For worker nodes:
    systemctl restart rke2-agent
  5. 验证节点的 RKE2 版本是否已升级:

    kubectl get nodes
  6. 将节点标记为可调度:

    kubectl uncordon <node_name>

27.1.3 Edge Helm chart

注意
注意

本节假设您已经在系统上安装了 Helm,并且有一个指向所需群集的有效 kubeconfig。有关 helm 安装说明,请查看安装 Helm 指南。

本节提供特定 Edge 版本的 Helm chart 组件的升级指南,涵盖以下主题:

27.1.3.1 已知限制

本节介绍当前迁移过程的已知限制。用户在升级他们的 Helm chart 之前,应先完成此处所述的步骤。

27.1.3.1.1 Rancher 升级

Edge 3.1.0 使用的当前 RKE2 版本存在一个问题,即所有不包含 IngressClass 的入口都会被入口控制器忽略。为了解决这种情况,用户需要手动将默认 IngressClass 的名称添加到默认 Rancher 入口中。

有关以下步骤修复的问题的详细信息,请参见上游 RKE2 问题,以及此评论中的具体说明。

注意
注意

某些情况下,默认 IngressClass 的名称可能并非 nginx

请确保运行以下命令来验证名称:

kubectl get ingressclass

在升级 Rancher 之前,请确保执行以下命令:

  • 如果 Rancher 是通过 EIB(第 9 章 “Edge Image Builder)部署的:

    kubectl patch helmchart rancher -n <namespace> --type='merge' -p '{"spec":{"set":{"ingress.ingressClassName":"nginx"}}}'
  • 如果 Rancher 是通过 Helm 部署的,请在 upgrade 命令中添加 --set ingress.ingressClassName=nginx 标志。有关如何使用此选项的完整示例,请参见 第 27.1.3.4.1 节 “示例”

27.1.3.2 群集 API 控制器迁移

Edge 3.1.0 开始,Metal3 管理群集上的群集 API (CAPI) 控制器将通过 Rancher Turtles 进行管理。

要将 CAPI 控制器版本迁移到 Edge 3.1.0 兼容的版本,请安装 Rancher Turtles chart:

helm install rancher-turtles oci://registry.suse.com/edge/3.1/rancher-turtles-chart --version 0.3.2 --namespace rancher-turtles-system --create-namespace

一段时间后,在 capi-systemcapm3-systemrke2-bootstrap-systemrke2-control-plane-system 名称空间中运行的控制器 Pod 会升级为与 Edge 3.1.0 兼容的控制器版本。

有关如何在隔离环境中安装 Rancher Turtles 的信息,请参见"Rancher Turtles 隔离式安装"(第 27.1.3.2.1 节 “Rancher Turtles 隔离式安装”)。

27.1.3.2.1 Rancher Turtles 隔离式安装
注意
注意

以下步骤假设 kubectl 已配置为连接到要升级的管理群集。

  1. 在安装下面提到的 rancher-turtles-airgap-resources Helm chart 之前,请确保它对 clusterctl 创建的名称空间拥有正确的所有权:

    1. capi-system 所有权更改:

      kubectl label namespace capi-system app.kubernetes.io/managed-by=Helm --overwrite
      
      kubectl annotate namespace capi-system meta.helm.sh/release-name=rancher-turtles-airgap-resources --overwrite
      kubectl annotate namespace capi-system meta.helm.sh/release-namespace=rancher-turtles-system --overwrite
    2. capm3-system 所有权更改:

      kubectl label namespace capm3-system app.kubernetes.io/managed-by=Helm --overwrite
      
      kubectl annotate namespace capm3-system meta.helm.sh/release-name=rancher-turtles-airgap-resources --overwrite
      kubectl annotate namespace capm3-system meta.helm.sh/release-namespace=rancher-turtles-system --overwrite
    3. rke2-bootstrap-system 所有权更改:

      kubectl label namespace rke2-bootstrap-system app.kubernetes.io/managed-by=Helm --overwrite
      
      kubectl annotate namespace rke2-bootstrap-system meta.helm.sh/release-name=rancher-turtles-airgap-resources --overwrite
      kubectl annotate namespace rke2-bootstrap-system meta.helm.sh/release-namespace=rancher-turtles-system --overwrite
    4. rke2-control-plane-system 所有权更改:

      kubectl label namespace rke2-control-plane-system app.kubernetes.io/managed-by=Helm --overwrite
      
      kubectl annotate namespace rke2-control-plane-system meta.helm.sh/release-name=rancher-turtles-airgap-resources --overwrite
      kubectl annotate namespace rke2-control-plane-system meta.helm.sh/release-namespace=rancher-turtles-system --overwrite
  2. 提取 rancher-turtles-airgap-resourcesrancher-turtles chart 存档:

    helm pull oci://registry.suse.com/edge/3.1/rancher-turtles-airgap-resources-chart --version 0.3.2
    helm pull oci://registry.suse.com/edge/3.1/rancher-turtles-chart --version 0.3.2
  3. 为了向 Rancher Turtles Helm chart 的隔离式安装提供所需的资源,请安装 rancher-turtles-airgap-resources Helm chart:

    helm install rancher-turtles-airgap-resources ./rancher-turtles-airgap-resources-chart-0.3.2.tgz --namespace rancher-turtles-system --create-namespace
  4. Rancher Turtles Helm chart 中配置 cluster-api-operator,以从正确的位置获取控制器数据:

    cat > values.yaml <<EOF
    cluster-api-operator:
      cluster-api:
        core:
          fetchConfig:
            selector: "{\"matchLabels\": {\"provider-components\": \"core\"}}"
        rke2:
          bootstrap:
            fetchConfig:
              selector: "{\"matchLabels\": {\"provider-components\": \"rke2-bootstrap\"}}"
          controlPlane:
            fetchConfig:
              selector: "{\"matchLabels\": {\"provider-components\": \"rke2-control-plane\"}}"
        metal3:
          infrastructure:
            fetchConfig:
              selector: "{\"matchLabels\": {\"provider-components\": \"metal3\"}}"
    EOF
  5. 安装 Rancher Turtles

    helm install rancher-turtles ./rancher-turtles-chart-0.3.2.tgz --namespace rancher-turtles-system --create-namespace --values values.yaml

一段时间后,在 capi-systemcapm3-systemrke2-bootstrap-systemrke2-control-plane-system 名称空间中运行的控制器 Pod 将升级为与 Edge 3.1.0 兼容的控制器版本。

27.1.3.3 Edge Helm chart 升级 - EIB

本节介绍如何将 Helm chart 从通过 EIB(第 9 章 “Edge Image Builder)部署的 Edge 组件堆栈升级到 Edge 3.1.0 兼容的版本。

27.1.3.3.1 先决条件

Edge 3.1 中,EIB 更改了部署 chart 的方式,不再使用 RKE2/K3s 清单自动部署机制。

这意味着,在升级到 Edge 3.1.0 兼容版本之前,使用 EIB 部署在 Edge 3.0 环境上的任何 Helm chart 都应从相关 Kubernetes 发行版的清单目录中去除其 chart 清单。

警告
警告

否者,任何 chart 升级都将在操作系统重新启动过程中由 RKE2/K3s 进程恢复。

注意
注意

从 RKE2/K3s 目录中删除清单不会导致资源从群集中去除。

根据 RKE2/K3s 文档中所述:

“从此目录中删除文件不会从群集中删除相应的资源。”

去除 EIB 部署的任何 chart 清单涉及以下步骤:

  1. 为了确保能够实现灾难恢复,请备份每个 EIB 部署的清单:

    注意
    注意

    EIB 部署的清单会有 "edge.suse.com/source:pedge image builder" 标签。

    注意
    注意

    确保您提供给以下命令的 <backup_location> 存在。

    grep -lrIZ 'edge.suse.com/source: edge-image-builder' /var/lib/rancher/rke2/server/manifests | xargs -0 -I{} cp {} <backup_location>
  2. 去除所有 EIB 部署的清单:

    grep -lrIZ 'edge.suse.com/source: edge-image-builder' /var/lib/rancher/rke2/server/manifests | xargs -0 rm -f --
27.1.3.3.2 升级步骤
注意
注意

以下步骤假设 kubectl 已配置为连接到要升级的管理群集。

  1. 查看发行说明(第 45.1 节 “摘要”),找到要迁移到的 Edge 3.1 兼容 chart 版本。

  2. 提取所需的 Helm chart 版本:

    • 对于托管在 HTTP 储存库中的 chart:

      helm repo add <chart_repo_name> <chart_repo_urls>
      
      helm pull <chart_repo_name>/<chart_name> --version=X.Y.Z
    • 对于托管在 OCI 注册表中的 chart:

      helm pull oci://<chart_oci_url> --version=X.Y.Z
  3. 对提取的 chart 存档进行编码:

    base64 -w 0 <chart_name>-X.Y.Z.tgz  > <chart_name>-X.Y.Z.txt
  4. 如果需要对 chart 执行任何其他步骤,请查看“已知限制”(第 27.1.3.1 节 “已知限制”)一节。

  5. 为现有的 HelmChart 资源打补丁:

    重要
    重要

    确保为以下命令传递 HelmChart 名称名称空间编码文件版本

    kubectl patch helmchart <helmchart_name> --type=merge -p "{\"spec\":{\"chartContent\":\"$(cat <helmchart_name>-X.Y.Z.txt)\", \"version\":\"<helmchart_version>\"}}" -n <helmchart_namespace>
  6. 此操作将指示 helm-controller 安排一个作业,以创建将升级所需的 Helm chart 的 Pod。要查看创建的 Pod 的日志,请执行以下步骤:

    1. 找到创建的 Pod:

      kubectl get pods -l helmcharts.helm.cattle.io/chart=<helmchart_name> -n <namespace>
    2. 查看 Pod 日志:

      kubectl logs <pod_name> -n <namespace>

如果已完成的 Pod 的日志没有任何错误,所需 Helm chart 的升级即告成功。

有关如何升级通过 EIB 部署的 Helm chart 的完整示例,请参见“示例”(第 27.1.3.3.3 节 “示例”)一节。

27.1.3.3.3 示例

本节提供的示例演示了如何将 RancherMetal3 Helm chart 升级到与 Edge 3.1.0 兼容的版本。它遵循“升级步骤”(第 27.1.3.3.2 节 “升级步骤”)一节中介绍的步骤。

用例:

  • 当前的 RancherMetal3 chart 需要升级到 Edge 3.1.0 兼容的版本。

    • Rancher 通过 EIB 部署,其 HelmChart 部署在默认名称空间中。

    • Metal3 通过 EIB 部署,其 HelmChart 部署在 kube-system 名称空间中。

步骤:

  1. 在发行说明(第 45.1 节 “摘要”)中找到所需的 RancherMetal3 版本。对于 Edge 3.1.0Rancher 的版本为 2.9.1Metal3 的版本为 0.8.1

  2. 提取所需的 chart 版本:

    • 对于 Rancher

      helm repo add rancher-prime https://charts.rancher.com/server-charts/prime
      helm pull rancher-prime/rancher --version=2.9.1
    • 对于 Metal3

      helm pull oci://registry.suse.com/edge/3.1/metal3-chart --version=0.8.1
  3. RancherMetal3 Helm chart 进行编码:

    base64 -w 0 rancher-2.9.1.tgz > rancher-2.9.1.txt
    base64 -w 0 metal3-chart-0.8.1.tgz > metal3-chart-0.8.1.txt
  4. 目录结构应类似于:

    .
    ├── metal3-chart-0.8.1.tgz
    ├── metal3-chart-0.8.1.txt
    ├── rancher-2.9.1.tgz
    └── rancher-2.9.1.txt
  5. 如果需要对 chart 执行任何其他步骤,请查看“已知限制”(第 27.1.3.1 节 “已知限制”)一节。

    • 对于 Rancher

      • 执行已知限制一节中描述的命令:

        # In this example the rancher helmchart is in the 'default' namespace
        kubectl patch helmchart rancher -n default --type='merge' -p '{"spec":{"set":{"ingress.ingressClassName":"nginx"}}}'
      • 验证是否已成功添加 ingressClassName 属性:

        kubectl get ingress rancher -n cattle-system -o yaml | grep -w ingressClassName
        
        # Example output
          ingressClassName: nginx
  6. RancherMetal3 HelmChart 资源打补丁:

    # Rancher deployed in the default namespace
    kubectl patch helmchart rancher --type=merge -p "{\"spec\":{\"chartContent\":\"$(cat rancher-2.9.1.txt)\", \"version\":\"2.9.1\"}}" -n default
    
    # Metal3 deployed in the kube-system namespace
    kubectl patch helmchart metal3 --type=merge -p "{\"spec\":{\"chartContent\":\"$(cat metal3-chart-0.8.1.txt)\", \"version\":\"0.8.1\"}}" -n kube-system
  7. 找到由 RancherMetal3 Pod 创建的 helm-controller

    • Rancher:

      kubectl get pods -l helmcharts.helm.cattle.io/chart=rancher -n default
      
      # Example output
      NAME                         READY   STATUS      RESTARTS   AGE
      helm-install-rancher-wg7nf   0/1     Completed   0          5m2s
    • Metal3

      kubectl get pods -l helmcharts.helm.cattle.io/chart=metal3 -n kube-system
      
      # Example output
      NAME                        READY   STATUS      RESTARTS   AGE
      helm-install-metal3-57lz5   0/1     Completed   0          4m35s
  8. 使用 kubectl logs 查看每个 Pod 的日志:

    • Rancher:

      kubectl logs helm-install-rancher-wg7nf -n default
      
      # Example successful output
      ...
      Upgrading rancher
      + helm_v3 upgrade --namespace cattle-system --create-namespace --version 2.9.1 --set-string global.clusterCIDR=10.42.0.0/16 --set-string global.clusterCIDRv4=10.42.0.0/16 --set-string global.clusterDNS=10.43.0.10 --set-string global.clusterDomain=cluster.local --set-string global.rke2DataDir=/var/lib/rancher/rke2 --set-string global.serviceCIDR=10.43.0.0/16 --set-string ingress.ingressClassName=nginx rancher /tmp/rancher.tgz --values /config/values-01_HelmChart.yaml
      Release "rancher" has been upgraded. Happy Helming!
      ...
    • Metal3

      kubectl logs helm-install-metal3-57lz5  -n kube-system
      
      # Example successful output
      ...
      Upgrading metal3
      + echo 'Upgrading metal3'
      + shift 1
      + helm_v3 upgrade --namespace metal3-system --create-namespace --version 0.8.1 --set-string global.clusterCIDR=10.42.0.0/16 --set-string global.clusterCIDRv4=10.42.0.0/16 --set-string global.clusterDNS=10.43.0.10 --set-string global.clusterDomain=cluster.local --set-string global.rke2DataDir=/var/lib/rancher/rke2 --set-string global.serviceCIDR=10.43.0.0/16 metal3 /tmp/metal3.tgz --values /config/values-01_HelmChart.yaml
      Release "metal3" has been upgraded. Happy Helming!
      ...
  9. 验证特定 chart 的 Pod 是否正在运行:

    # For Rancher
    kubectl get pods -n cattle-system
    
    # For Metal3
    kubectl get pods -n metal3-system

27.1.3.4 Edge Helm chart 升级 - 非 EIB

本节介绍如何将 Helm chart 从通过 Helm 部署的 Edge 组件堆栈升级到 Edge 3.1.0 兼容的版本。

注意
注意

以下步骤假设 kubectl 已配置为连接到要升级的管理群集。

  1. 查看发行说明(第 45.1 节 “摘要”),找到要迁移到的 Edge 3.1.0 兼容 chart 版本。

  2. 获取当前运行的 Helm chart 的自定义值:

    helm get values <chart_name> -n <chart_namespace> -o yaml > <chart_name>-values.yaml
  3. 如果需要对 chart 执行任何其他步骤或更改,请查看“已知限制”(第 27.1.3.1 节 “已知限制”)一节。

  4. 将 Helm chart 升级到所需版本:

    • 对于非隔离式设置:

      # For charts hosted in HTTP repositories
      helm upgrade <chart_name> <chart_repo>/<chart_name> --version <version> --values <chart_name>-values.yaml -n <chart_namespace>
      
      # For charts hosted in OCI registries
      helm upgrade <chart_name> oci://<oci_registry_url>/<chart_name> --namespace <chart_namespace> --values <chart_name>-values.yaml --version=X.Y.Z
    • 对于隔离式设置:

      • 在可以访问互联网的机器上,提取所需的 chart 版本:

        # For charts hosted in HTTP repositories
        helm pull <chart_repo_name>/<chart_name> --version=X.Y.Z
        
        # For charts hosted in OCI registries
        helm pull oci://<chart_oci_url> --version=X.Y.Z
      • 将 chart 存档传输到您的管理群集:

        scp <chart>.tgz <machine-address>:<filesystem-path>
      • 升级 chart:

        helm upgrade <chart_name> <chart>.tgz --values <chart_name>-values.yaml -n <chart_namespace>
  5. 验证 chart Pod 是否正在运行:

    kubectl get pods -n <chart_namespace>

您可以通过检查 chart 特定的资源,对升级进行额外的验证。完成此操作后,升级便可视为成功。

有关完整示例,请参见“示例”(第 27.1.3.4.1 节 “示例”)一节。

27.1.3.4.1 示例

本节提供的示例演示了如何将 RancherMetal3 Helm chart 升级到与 Edge 3.1.0 兼容的版本。示例遵循“Edge Helm chart 升级 - 非 EIB”(第 27.1.3.4 节 “Edge Helm chart 升级 - 非 EIB”)一节中介绍的步骤。

用例:

  • 当前的 RancherMetal3 chart 需要升级到 Edge 3.1.0 兼容的版本。

    • Rancher Helm chart 是从 cattle-system 名称空间中的 Rancher Prime 储存库部署的。Rancher Prime 储存库通过以下方式添加:

      helm repo add rancher-prime https://charts.rancher.com/server-charts/prime
    • Metal3 是从 metal3-system 名称空间中的 registry.suse.com OCI 注册表部署的。

步骤:

  1. 在发行说明(第 45.1 节 “摘要”)中找到所需的 RancherMetal3 版本。对于 Edge 3.1.0,Rancher 的版本为 2.9.1,Metal3 的版本为 0.8.1

  2. 获取当前运行的 RancherMetal3 Helm chart 的自定义值:

    # For Rancher
    helm get values rancher -n cattle-system -o yaml > rancher-values.yaml
    
    # For Metal3
    helm get values metal3 -n metal3-system -o yaml > metal3-values.yaml
  3. 如果需要对 chart 执行任何其他步骤,请查看“已知限制”(第 27.1.3.1 节 “已知限制”)一节。

    • 对于 Rancher,需要在升级命令中添加 --set ingress.ingressClassName=nginx 选项。

  4. 升级 RancherMetal3 Helm chart:

    # For Rancher
    helm upgrade rancher rancher-prime/rancher --version 2.9.1 --set ingress.ingressClassName=nginx --values rancher-values.yaml -n cattle-system
    
    # For Metal3
    helm upgrade metal3 oci://registry.suse.com/edge/3.1/metal3-chart --version 0.8.1 --values metal3-values.yaml -n metal3-system
  5. 验证 Rancher 和 Metal3 Pod 是否正在运行:

    # For Rancher
    kubectl get pods -n cattle-system
    
    # For Metal3
    kubectl get pods -n metal3-system

27.2 下游群集

本节介绍如何将下游群集从 Edge 3.0.X 迁移到 Edge 3.1.0

27.2.1 先决条件

本节涵盖用户在开始迁移过程之前应完成的所有先决步骤。

27.2.1.1 通过 EIB 部署的 chart

Edge 3.1 中,EIB(第 9 章 “Edge Image Builder)更改了部署 chart 的方式,不再使用 RKE2/K3s 清单自动部署机制。

这意味着,在迁移到 Edge 3.1.0 兼容版本之前,使用 EIB 部署在 Edge 3.0 环境上的任何 Helm chart 都应从相关 Kubernetes 发行版的清单目录中去除其 chart 清单。

警告
警告

否者,任何 chart 升级都将在操作系统重新启动过程中由 RKE2/K3s 进程恢复。

在下游群集上,suse-edge/fleet-examples 储存库中名为 eib-charts-migration-prep 的 Fleet 会去除 EIB 创建的 chart 清单文件。

警告
警告

建议使用分支中的 eib-charts-migration-prep Fleet 文件。必须通过有效的 Edge 版本标记使用 Fleet 文件。

重要
重要

此过程要求已部署系统升级控制器 (SUC)。有关安装详细信息,请参见“安装系统升级控制器”(第 19.2 节 “安装系统升级控制器”)。

创建后,eib-charts-migration-prep Fleet 会附带一个 SUC(第 19 章 “系统升级控制器)计划,其中包含一个执行以下操作的脚本:

  1. 确定运行该脚本的当前节点是不是初始化器节点。如果不是,脚本不会执行任何操作。

  2. 如果节点是初始化器,它将:

    • 检测 EIB 部署的所有 HelmChart 资源。

    • 找到上述每个 HelmChart 资源的清单文件。

      注意
      注意

      HelmChart 清单文件仅位于 RKE2 的 /var/lib/rancher/rke2/server/manifests 和 K3s 的 /var/lib/rancher/k3s/server/manifests 下的初始化器节点上。

    • 为了确保能够实现灾难恢复,请备份 /tmp 下的每个清单:

      注意
      注意

      备份位置可以通过在 Fleet 的 SUC 计划文件中定义 MANIFEST_BACKUP_DIR 环境变量进行更改。

    • 去除与 EIB 部署的 HelmChart 资源相关的每个清单文件。

      注意
      注意

      从 RKE2/K3s 目录中删除清单不会导致资源从群集中去除。

      根据 RKE2/K3s 文档中所述:

      “从此目录中删除文件不会从群集中删除相应的资源。”

eib-charts-migration-prep Fleet 可以通过以下两种方式部署,具体取决于您的用例:

27.2.1.1.1 EIB chart 清单去除 Fleet 部署 - GitRepo
  1. 管理群集上,部署以下 GitRepo 资源:

    注意
    注意

    在部署下方资源之前,您必须提供有效的目标配置,以便 Fleet 了解资源要部署至哪些下游群集。有关如何映射到下游群集的信息,请参见映射到下游群集

    kubectl apply -n fleet-default -f - <<EOF
    apiVersion: fleet.cattle.io/v1alpha1
    kind: GitRepo
    metadata:
      name: eib-chart-migration-prep
    spec:
      revision: release-3.1.0
      paths:
      - fleets/day2/system-upgrade-controller-plans/eib-charts-migration-prep
      repo: https://github.com/suse-edge/fleet-examples.git
      targets:
      - clusterSelector: CHANGEME
      # Example matching all clusters:
      # targets:
      # - clusterSelector: {}
    EOF

    或者,也可以通过 Rancher UI 创建资源(如果有相关 UI)。有关详细信息,请参见在 Rancher UI 中访问 Fleet

  2. 在您的管理群集上创建上述 GitRepo 后,Fleet 将在与 GitRepo 中指定的目标相匹配的每个下游群集上部署名为 eib-chart-migration-prepSUC 计划。要监控此计划的生命周期,请参见“监控系统升级控制器计划”(第 19.3 节 “监控系统升级控制器计划”)。

27.2.1.1.2 EIB chart 清单去除 Fleet 部署 - 捆绑包

本节介绍如何将 eib-chart-migration-prep Fleet 转换为捆绑包资源,以便在无法利用本地 git 服务器的隔离环境中使用。

步骤:

  1. 在连接网络的计算机上下载 fleet-cli

    注意
    注意

    确保您下载的 fleet-cli 版本与群集上部署的 Fleet 版本匹配。

    • 对于 Mac 用户,有一个 fleet-cli Homebrew Formulae。

    • 对于 Linux 用户,每个 Fleet 版本都会有作为资产存在的二进制文件。

      • 检索所需的二进制文件:

        • Linux AMD:

          curl -L -o fleet-cli https://github.com/rancher/fleet/releases/download/<FLEET_VERSION>/fleet-linux-amd64
        • Linux ARM:

          curl -L -o fleet-cli https://github.com/rancher/fleet/releases/download/<FLEET_VERSION>/fleet-linux-arm64
      • 将二进制文件移动到 /usr/local/bin

        sudo mkdir -p /usr/local/bin
        sudo mv ./fleet-cli /usr/local/bin/fleet-cli
        sudo chmod 755 /usr/local/bin/fleet-cli
  2. 克隆您希望使用其 eib-chart-migration-prep Fleet 的 suse-edge/fleet-examples 版本

    git clone -b release-3.1.0 https://github.com/suse-edge/fleet-examples.git
  3. 导航到 fleet-examples 储存库中的 eib-chart-migration-prep Fleet:

    cd fleet-examples/fleets/day2/system-upgrade-controller-plans/eib-charts-migration-prep
  4. 创建一个指向您希望部署 Fleet 的所有下游群集的 targets.yaml 文件:

    cat > targets.yaml <<EOF
    targets:
    - clusterSelector: CHANGEME
    EOF

    有关如何映射到下游群集的信息,请参见映射到下游群集

  5. 继续构建捆绑包:

    注意
    注意

    请确保您没有下载 fleet-examples/fleets/day2/system-upgrade-controller-plans/eib-charts-migration-prep 目录中的 fleet-cli,否则它将和捆绑包打包在一起,不建议这么做。

    fleet-cli apply --compress --targets-file=targets.yaml -n fleet-default -o - eib-chart-migration-prep . > eib-chart-migration-prep-bundle.yaml

    有关此过程的详细信息,请参见将 Helm Chart 转换为捆绑包

    有关 fleet-cli apply 命令的详细信息,请参见 fleet apply

  6. eib-chart-migration-prep-bundle.yaml 捆绑包传输到您的管理群集计算机:

    scp eib-chart-migration-prep-bundle.yaml <machine-address>:<filesystem-path>
  7. 在您的管理群集上,部署 eib-chart-migration-prep-bundle.yaml 捆绑包:

    kubectl apply -f eib-chart-migration-prep-bundle.yaml
  8. 在您的管理群集上,验证捆绑包是否已部署:

    kubectl get bundle eib-chart-migration-prep -n fleet-default
    NAME                       BUNDLEDEPLOYMENTS-READY   STATUS
    eib-chart-migration-prep   1/1
  9. 在您的管理群集上创建上述捆绑包后,Fleet 将在与 targets.yaml 中指定的目标相匹配的每个下游群集上部署名为 eib-chart-migration-prepSUC 计划。要监控此计划的生命周期,请参见“监控系统升级控制器计划”(第 19.3 节 “监控系统升级控制器计划”)。

27.2.2 迁移步骤

执行先决条件(第 27.2.1 节 “先决条件”)步骤后,可以继续按照 Edge 3.1.0 版本的下游群集(第 29 章 “下游群集)升级文档进行操作。

Documentation survey