SUSE Edge 文档|Day 2 操作|Edge 3.5 迁移

35 Edge 3.5 迁移

本章介绍如何将管理群集和下游群集从 Edge 3.4 迁移到 Edge 3.5.0

重要
重要

始终从 Edge 3.4最新 z-stream 版本执行群集迁移。

始终迁移到 Edge 3.5.0 版本。对于迁移后的后续升级,请参见管理群集(第 36 章 “管理群集)和下游群集(第 37 章 “下游群集)章节。

下表列出了不同类型的群集及其对应的升级方法:

表 35.1︰ 群集和下游群集的升级方法
群集类型方式

EIB 置备的群集

有关详细信息,请参见第 35.1.3 节 “Fleet”

Metal3 置备的群集

有关详细信息,请参见第 44.3 节 “下游群集升级”

Phone-home 置备的群集

请参见 Kubernetes 版本升级了解 Kubernetes 版本升级流程,参见第 37 章 “下游群集了解 SUC、操作系统及其他组件的升级流程。

35.1 管理群集

本节将介绍以下主题:

第 35.1.1 节 “先决条件” - 开始迁移前需要完成的先决步骤。

第 35.1.2 节 “升级控制器” - 如何使用第 22 章 “升级控制器执行管理群集迁移。

第 35.1.3 节 “Fleet” - 如何使用第 8 章 “Fleet执行管理群集迁移。

35.1.1 先决条件

35.1.1.1 升级裸机操作器 CRD

注意
注意

此步骤仅适用于需要升级第 10 章 “Metal3 chart 的 CAPI/Metal3 管理群集。

Metal3 Helm chart 利用 Helm 的 CRD 目录来包含裸机操作器 (BMO) CRD。

然而,这种方法存在一定的局限性,特别是无法使用 Helm 升级此目录中的 CRD。有关详细信息,请参见 Helm 文档

因此,在将 Metal3 升级到与 Edge 3.5.0 兼容的版本之前,用户必须手动升级底层的 BMO CRD。

在安装了 Helmkubectl 已配置为指向管理群集的计算机上:

  1. 手动应用 BMO CRD:

    helm show crds oci://registry.suse.com/edge/charts/metal3 --version 305.0.21+up0.13.0 | kubectl apply -f -

35.1.1.2 SUSE Storage 迁移的准备工作

升级到 Edge 3.5.0 版本时,需要从原先的 Longhorn chart 迁移到 SUSE Application Collection 中维护的 SUSE Storage chart。

注意
注意

此过程仅适用于需要升级 Longhorn chart 的管理群集。

您必须先将管理群集更新至最新的 3.4 z-stream 版本,该版本包含所需的 SUSE Storage 1.9.2 版本。

SUSE Storage chart 不再单独提供 CRD Helm chart,而是将其整合为一个整体,因此需要按照 SUSE Storage 文档中的说明,执行额外的迁移步骤。

  1. 首先,可检查当前已安装的 Longhorn CRD 版本。

    helm list --all-namespaces | grep longhorn-crd
    longhorn-crd                    longhorn-system 1               2026-01-16 02:17:16.7804359 +0000 UTC   deployed        longhorn-crd-107.1.1+up1.9.2          v1.9.2
  2. 接下来,克隆与当前已安装 Longhorn 版本对应的 rancher/chart 代码库,操作前必须先下载该脚本

    该脚本的执行命令如下:

    ./download-longhorn-crd-chart.sh 107.1.1+up1.9.2

    执行后,longhorn-crd chart 会被下载至本地目录 ./107.1.1+up1.9.2

  3. 下载完成后,打开 Chart.yaml 文件,验证 appVersion 字段是否为 v1.9.2,以确认 chart 版本正确:

    cat 107.1.1+up1.9.2/Chart.yaml
    
    annotations:
      catalog.cattle.io/certified: rancher
      catalog.cattle.io/hidden: "true"
      catalog.cattle.io/namespace: longhorn-system
      catalog.cattle.io/release-name: longhorn-crd
    apiVersion: v1
    appVersion: v1.9.2
    description: Installs the CRDs for longhorn.
    name: longhorn-crd
    version: 107.1.1+up1.9.2
  4. 随后,需要在克隆得到的 longhorn-crd chart的 templates/crds.yaml 文件中,将 helm.sh/resource-policy 注解的值修改为 keep。该配置可确保 Helm 在卸载版本时,不会删除对应的 CRD。

    您可以下载该脚本,实现注解的自动修改:

    ./patch-resource-policy-annotation.sh 107.1.1+up1.9.2/templates/crds.yaml
    
    Processing CRDs in '107.1.1+up1.9.2/templates/crds.yaml'...
    Creating backup: '/tmp/crds.yaml.original'
    Successfully processed the file
    Original file backed up to: '/tmp/crds.yaml.original'
    Modified file saved as: '107.1.1+up1.9.2/templates/crds.yaml'
    Found 22 CustomResourceDefinition(s)
    Added 22 helm.sh/resource-policy: keep annotation(s)
    Original file: 4575 lines, Modified file: 4597 lines
  5. 验证 CRD 是否已正确修改,可对比原始模板与修改后的模板,确认 helm.sh/resource-policy 注解的值已设为 keep

    vim -d /tmp/crds.yaml.original 107.1.1+up1.9.2/templates/crds.yaml
  6. 接下来,使用本地修改后的 chart,升级 longhorn-crd Helm 版本:

    helm upgrade longhorn-crd -n longhorn-system ./107.1.1+up1.9.2
  7. 完成后,从系统中卸载 longhorn-crd Helm 版本。由于已进行上述修改,对应的 CRD 将会保留:

    helm uninstall longhorn-crd --namespace longhorn-system
    
    These resources were kept due to the resource policy:
    [CustomResourceDefinition] backingimagedatasources.longhorn.io
    [CustomResourceDefinition] backingimagemanagers.longhorn.io
    [CustomResourceDefinition] nodes.longhorn.io
    [CustomResourceDefinition] orphans.longhorn.io
    [CustomResourceDefinition] recurringjobs.longhorn.io
    [CustomResourceDefinition] replicas.longhorn.io
    [CustomResourceDefinition] settings.longhorn.io
    [CustomResourceDefinition] sharemanagers.longhorn.io
    [CustomResourceDefinition] snapshots.longhorn.io
    [CustomResourceDefinition] supportbundles.longhorn.io
    [CustomResourceDefinition] systembackups.longhorn.io
    [CustomResourceDefinition] systemrestores.longhorn.io
    [CustomResourceDefinition] backingimages.longhorn.io
    [CustomResourceDefinition] volumeattachments.longhorn.io
    [CustomResourceDefinition] volumes.longhorn.io
    [CustomResourceDefinition] backupbackingimages.longhorn.io
    [CustomResourceDefinition] backups.longhorn.io
    [CustomResourceDefinition] backuptargets.longhorn.io
    [CustomResourceDefinition] backupvolumes.longhorn.io
    [CustomResourceDefinition] engineimages.longhorn.io
    [CustomResourceDefinition] engines.longhorn.io
    [CustomResourceDefinition] instancemanagers.longhorn.io
    
    release "longhorn-crd" uninstalled
  8. 重新运行以下命令确认 longhorn-crd 不存在,以确保 longhorn-crd chart 已成功卸载:helm list --all-namespaces | grep longhorn-crd

    完成上述操作后,需要更新现有 Longhorn CRD 的所属标签,为升级到 SUSE Storage Helm chart 做准备。

    执行该脚本,完成标签替换操作。

    ./migrate-crd-ownership.sh
    
    # The output will look like the following for each CRD. The most important thing to note is that each operation says "Successfully updated CRD..." at the end:
    
    Processing CRD: volumes.longhorn.io
    Warning: resource customresourcedefinitions/volumes.longhorn.io is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
    customresourcedefinition.apiextensions.k8s.io/volumes.longhorn.io configured
    Successfully updated CRD: volumes.longhorn.io
    注意
    注意

    Rancher Application Collection 仓库的登录凭证可在您的设置中的访问令牌部分查看(必须先登录)。

    此外,您可在此处查看 Rancher Application Collection 的更多相关文档。

  9. 当所有 CRD 准备就绪后,登录到 Rancher Application Collection 中,以便拉取对应的 Helm chart:

    helm registry login dp.apps.rancher.io -u ${APPS.RANCHER.IO_USERNAME} -p ${APPS.RANCHER.IO_ACCESS_TOKEN}
  10. 随后,创建 docker-registry 机密,用于拉取容器映像:

    kubectl create secret docker-registry rancher-app-collection \
      --namespace longhorn-system \
      --docker-server=dp.apps.rancher.io \
      --docker-username="${APPS.RANCHER.IO_USERNAME}" \
      --docker-password="${APPS.RANCHER.IO_ACCESS_TOKEN}"
  11. 最后,将您的 Longhorn 实例升级到 SUSE Storage:

    helm upgrade longhorn oci://dp.apps.rancher.io/charts/suse-storage \
    	--namespace longhorn-system \
    	--version 1.10.1 \
    	--set privateRegistry.registrySecret=rancher-app-collection

    如果需要,可在升级命令后附加 -f values.yaml,指定自定义的 values.yaml 文件。

35.1.1.3 Rancher Turtles 升级的准备工作

注意
注意

此过程仅适用于需要升级 rancher turtles chart 的 CAPI/Metal3 管理群集。

您必须先将管理群集更新至最新的 3.4 z-stream 版本,该版本包含所需的 Rancher Turtles 0.24.3 版本。

从 Rancher 2.13 版本开始,安装 Rancher 时会默认安装 Rancher Turtles,因此需要按照 Rancher Turtles 文档中的说明,执行额外的迁移步骤。

首先,去除已安装的 CAPIProvider 资源:

kubectl delete capiprovider -A --all

等待上述步骤完成后,去除已安装的 rancher-turtles chart 以及 rancher-turtles-airgap-resources(如果已安装)。如果该组件是通过 Edge Image Builder 安装的,还需要去除对应的 HelmChart 资源:

kubectl delete -n kube-system helmchart rancher-turtles
kubectl delete -n kube-system helmchart rancher-turtles-airgap-resources

随后,按照 Rancher Turtles 文档中的说明,修改 CRD 资源的配置:

kubectl patch crd capiproviders.turtles-capi.cattle.io --type=json -p='[{"op": "add", "path": "/metadata/annotations/meta.helm.sh~1release-namespace", "value": "cattle-turtles-system"}]'
kubectl patch crd clusterctlconfigs.turtles-capi.cattle.io --type=json -p='[{"op": "add", "path": "/metadata/annotations/meta.helm.sh~1release-namespace", "value": "cattle-turtles-system"}]'

接下来,按照常规步骤,将管理群集升级到 Edge 3.5.0 版本。

35.1.1.4 Rancher Turtles 升级后操作

完成以下步骤将群集升级到 Edge 3.5.0 版本,需要安装新版 rancher-turtles-providers Helm chart,该操作将创建新的 CAPIProvider 资源,替换升级前步骤中去除的资源。

该 chart 需要通过 HelmChart 资源进行安装,以便后续通过升级控制器实现自动升级:

helm pull oci://registry.suse.com/edge/charts/rancher-turtles-providers --version 305.0.4+up0.25.1

cat > turtles-providers-helmchart.yaml <<EOF
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
  annotations:
    edge.suse.com/repository-url: oci://registry.suse.com/edge/charts/rancher-turtles-providers
  name: rancher-turtles-providers
  namespace: kube-system
spec:
  chartContent: $(base64 -w 0 rancher-turtles-providers-305.0.4+up0.25.1.tgz)
  failurePolicy: reinstall
  createNamespace: true
  targetNamespace: cattle-turtles-system
  version: 305.0.4+up0.25.1
EOF
kubectl apply -f turtles-providers-helmchart.yaml

等待数分钟后,可观察到类似以下的输出信息:

kubectl get capiprovider -A
NAMESPACE                   NAME                 TYPE             PROVIDERNAME    INSTALLEDVERSION   PHASE
capm3-system                metal3               infrastructure   metal3          v1.10.4            Ready
cattle-capi-system          cluster-api          core             cluster-api     v1.10.6            Ready
fleet-addon-system          fleet                addon            rancher-fleet   v0.12.0            Ready
metal3-ipam-system          metal3ipam           ipam             metal3ipam      v1.10.4            Ready
rke2-bootstrap-system       rke2-bootstrap       bootstrap        rke2            v0.21.1            Ready
rke2-control-plane-system   rke2-control-plane   controlPlane     rke2            v0.21.1            Ready

35.1.2 升级控制器

重要
重要

升级控制器目前仅支持非隔离管理群集的 Edge 版本迁移。

本节将介绍以下主题:

第 35.1.2.1 节 “先决条件” - 针对升级控制器的先决条件。

第 35.1.2.2 节 “迁移步骤” - 使用升级控制器管理群集迁移到新 Edge 版本的步骤。

35.1.2.1 先决条件

35.1.2.1.1 Edge 3.5 升级控制器

使用升级控制器之前,必须先确保其运行的版本能够迁移到目标 Edge 版本。

操作步骤如下:

  1. 如果您已在之前的 Edge 版本中部署了升级控制器,请升级其 chart:

    helm upgrade upgrade-controller -n upgrade-controller-system oci://registry.suse.com/edge/charts/upgrade-controller --version 305.0.3+up0.1.3
  2. 如果您尚部署升级控制器,请按照第 22.3 节 “安装升级控制器”中所述操作。

35.1.2.2 迁移步骤

使用升级控制器执行管理群集迁移本质上与执行升级类似。

唯一的区别是,UpgradePlan 必须指定 3.5.0 版本:

apiVersion: lifecycle.suse.com/v1alpha1
kind: UpgradePlan
metadata:
  name: upgrade-plan-mgmt
  # Change to the namespace of your Upgrade Controller
  namespace: CHANGE_ME
spec:
  releaseVersion: 3.5.0

有关如何使用上述 UpgradePlan 进行迁移的信息,请参见升级控制器升级过程(第 36.1 节 “升级控制器”)。

35.1.3 Fleet

注意
注意

只要有可能,便使用第 35.1.2 节 “升级控制器”进行迁移。

仅在升级控制器未涵盖的使用场景下,才需参考本节内容。

使用 Fleet 执行管理群集迁移本质上与执行升级类似。

主要区别在于:

  1. 必须使用 release-3.5.0 版本 suse-edge/fleet-examples 储存库中的 Fleet。

  2. 安排升级的 chart 必须升级到与 Edge 3.5.0 版本兼容的版本。有关 Edge 3.5.0 组件的列表,请参见第 53.3 节 “3.5.0 版本”

重要
重要

为确保 Edge 3.5.0 迁移成功,用户必须遵守上述要点。

鉴于上述要点,用户可参考管理群集 Fleet(第 36.2 节 “Fleet”)文档,获取执行迁移需要完成的步骤的全面指南。

35.2 下游群集

第 35.2.1 节 “Fleet” - 如何使用第 8 章 “Fleet执行下游群集迁移。

35.2.1 Fleet

使用 Fleet 执行下游群集迁移本质上与执行升级类似。

主要区别在于:

  1. 必须使用 release-3.5.0 版本 suse-edge/fleet-examples 储存库中的 Fleet。

  2. 安排升级的 chart 必须升级到与 Edge 3.5.0 版本兼容的版本。有关 Edge 3.5.0 组件的列表,请参见第 53.3 节 “3.5.0 版本”

重要
重要

为确保 Edge 3.5.0 迁移成功,用户必须遵守上述要点。

鉴于上述要点,用户可参考下游群集 Fleet(第 37.1 节 “Fleet”)文档,获取执行迁移需要完成的步骤的全面指南。