将 vSphere 树内卷迁移到 CSI

Kubernetes 正在逐渐不在树内维护云提供商。vSphere 有一个树外云提供商,可通过安装 vSphere 云提供商和云存储插件来使用。

本页介绍如何从树内 vSphere 云提供商迁移到树外,以及如何在迁移后管理现有虚拟机。

本文遵循官方 vSphere 迁移文档中提供的步骤,并介绍了要在 Rancher 中执行的步骤。

Cloud-config 格式限制

由于 vSphere CSI 中的现有错误,使用以下 cloud-config 格式配置的现有卷将不会迁移。

如果 cloud-config 具有以下格式的 datastore 和资源池路径,vsphere CSI 驱动将无法识别它:

  1. default-datastore: </datacenter>/datastore/<default-datastore-name>
  2. resourcepool-path: "</datacenter>/host/<cluster-name>/Resources/<resource-pool-name>"

格式如下的使用树内提供商预置的卷将能正确迁移:

  1. default-datastore: <default-datastore-name>
  2. resourcepool-path: "<cluster-name>/Resources/<resource-pool-name>"

上游 bug:https://github.com/kubernetes-sigs/vsphere-csi-driver/issues/628

跟踪此 bug 的 Rancher issue:https://github.com/rancher/rancher/issues/31105

先决条件

  • vSphere CSI 迁移需要 vSphere 7.0u1。为了管理现有的树内 vSphere 卷,请将 vSphere 升级到 7.0u1。
  • Kubernetes 版本必须为 1.19 或更高版本。

迁移

1. 安装 CPI 插件

在安装 CPI 之前,我们需要使用 node.cloudprovider.kubernetes.io/uninitialized=true:NoSchedule 为所有节点添加污点。

这可以通过运行以下命令来完成:

  1. curl -O https://raw.githubusercontent.com/rancher/helm3-charts/56b622f519728378abeddfe95074f1b87ab73b1e/charts/vsphere-cpi/taints.sh

或者:

  1. wget https://raw.githubusercontent.com/rancher/helm3-charts/56b622f519728378abeddfe95074f1b87ab73b1e/charts/vsphere-cpi/taints.sh
  2. chmod +x taints.sh
  3. ./taints.sh <path to kubeconfig if running the command outside the cluster>

通过运行脚本为所有节点添加污点后,启动 Helm vSphere CPI Chart:

  • Rancher v2.6.5+
  • Rancher 版本低于 v2.6.5
  1. 点击 ☰ > 集群管理
  2. 转到将安装 vSphere CPI chart 的集群,然后单击 Explore
  3. 单击 Apps > Charts
  4. 单击 vSphere CPI
  5. 单击安装
  6. 填写所需的 vCenter 详细信息,然后单击安装

  7. 点击 ☰ > 集群管理

  8. 转到将安装 vSphere CPI chart 的集群,然后单击 Explore
  9. 单击应用 & 应用市场 > Chart
  10. 单击 vSphere CPI
  11. 单击安装
  12. 填写所需的 vCenter 详细信息,然后单击安装

vSphere CPI 使用 vSphere CSI 驱动所需的 ProviderID 来初始化所有节点。

运行以下命令,检查是否已使用 ProviderID 初始化了所有节点:

  1. kubectl describe nodes | grep "ProviderID"

2. 安装 CSI 驱动

  • Rancher v2.6.5+
  • Rancher 版本低于 v2.6.5
  1. 点击 ☰ > 集群管理
  2. 转到将安装 vSphere CSI chart 的集群,然后单击 Explore
  3. 单击 Apps > Charts
  4. 单击 vSphere CSI
  5. 单击安装
  6. 填写所需的 vCenter 详细信息,然后单击安装
  7. 选中在安装前自定义 Helm 选项,然后单击下一步
  8. 功能选项卡中,选中启用 CSI 迁移
  9. 你也可以转到存储选项卡并设置 datastore。此 Chart 使用 csi.vsphere.vmware.com 作为置备程序来创建一个 StorageClass。在创建此 StorageClass 时,你也可以提供用于配置 CSI 卷的 datastore URL。通过选择 datastore 并转到概述选项卡,你可以在 vSphere 客户端中找到 datastore URL。填写 StorageClass 的详细信息。
  10. 单击安装

  11. 点击 ☰ > 集群管理

  12. 转到将安装 vSphere CSI chart 的集群,然后单击 Explore
  13. 单击应用 & 应用市场 > Chart
  14. 单击 vSphere CSI
  15. 单击安装
  16. 填写所需的 vCenter 详细信息,然后单击安装
  17. 选中在安装前自定义 Helm 选项,然后单击下一步
  18. 功能选项卡中,选中启用 CSI 迁移
  19. 你也可以转到存储选项卡并设置 datastore。此 Chart 使用 csi.vsphere.vmware.com 作为置备程序来创建一个 StorageClass。在创建此 StorageClass 时,你也可以提供用于配置 CSI 卷的 datastore URL。通过选择 datastore 并转到概述选项卡,你可以在 vSphere 客户端中找到 datastore URL。填写 StorageClass 的详细信息。
  20. 单击安装

3. 编辑集群以启用 CSI 迁移的功能开关

  1. 在编辑集群时,如果 Kubernetes 版本低于 1.19,请从 Kubernetes 版本下拉菜单中选择 Kubernetes 1.19 或更高版本。

  2. 要启用功能开关,请单击以 YAML 文件编辑,然后在 kube-controller 和 kubelet 下添加以下内容:

    1. extra_args:
    2. feature-gates: "CSIMigration=true,CSIMigrationvSphere=true"

4. 清空 worker 节点

在更改 kubelet 和 kube-controller-manager 参数之前,必须在升级期间清空 worker 节点:

  1. 点击 ☰ > 集群管理
  2. 转到要清空 worker 节点的集群,然后单击 ⋮ > 编辑配置
  3. 高级选项中,将最大不可用的 Worker 节点数字段设置为 1。
  4. 要在升级期间清空节点,请选择清空节点 > 是
  5. 强制删除本地数据设置为 true
  6. 点击保存以升级集群。