将 vSphere 树内卷迁移到 CSI
Kubernetes 正在逐渐不在树内维护云提供商。vSphere 有一个树外云提供商,可通过安装 vSphere 云提供商和云存储插件来使用。
本页介绍如何从树内 vSphere 云提供商迁移到树外,以及如何在迁移后管理现有虚拟机。
本文遵循官方 vSphere 迁移文档中提供的步骤,并介绍了要在 Rancher 中执行的步骤。
Cloud-config 格式限制
由于 vSphere CSI 中的现有错误,使用以下 cloud-config 格式配置的现有卷将不会迁移。
如果 cloud-config 具有以下格式的 datastore 和资源池路径,vsphere CSI 驱动将无法识别它:
default-datastore: </datacenter>/datastore/<default-datastore-name>
resourcepool-path: "</datacenter>/host/<cluster-name>/Resources/<resource-pool-name>"
格式如下的使用树内提供商预置的卷将能正确迁移:
default-datastore: <default-datastore-name>
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
为所有节点添加污点。
这可以通过运行以下命令来完成:
curl -O https://raw.githubusercontent.com/rancher/helm3-charts/56b622f519728378abeddfe95074f1b87ab73b1e/charts/vsphere-cpi/taints.sh
或者:
wget https://raw.githubusercontent.com/rancher/helm3-charts/56b622f519728378abeddfe95074f1b87ab73b1e/charts/vsphere-cpi/taints.sh
chmod +x taints.sh
./taints.sh <path to kubeconfig if running the command outside the cluster>
通过运行脚本为所有节点添加污点后,启动 Helm vSphere CPI Chart:
- Rancher v2.6.5+
- Rancher 版本低于 v2.6.5
- 点击 ☰ > 集群管理。
- 转到将安装 vSphere CPI chart 的集群,然后单击 Explore。
- 单击 Apps > Charts。
- 单击 vSphere CPI。
- 单击安装。
填写所需的 vCenter 详细信息,然后单击安装。
点击 ☰ > 集群管理。
- 转到将安装 vSphere CPI chart 的集群,然后单击 Explore。
- 单击应用 & 应用市场 > Chart。
- 单击 vSphere CPI。
- 单击安装。
- 填写所需的 vCenter 详细信息,然后单击安装。
vSphere CPI 使用 vSphere CSI 驱动所需的 ProviderID 来初始化所有节点。
运行以下命令,检查是否已使用 ProviderID 初始化了所有节点:
kubectl describe nodes | grep "ProviderID"
2. 安装 CSI 驱动
- Rancher v2.6.5+
- Rancher 版本低于 v2.6.5
- 点击 ☰ > 集群管理。
- 转到将安装 vSphere CSI chart 的集群,然后单击 Explore。
- 单击 Apps > Charts。
- 单击 vSphere CSI。
- 单击安装。
- 填写所需的 vCenter 详细信息,然后单击安装。
- 选中在安装前自定义 Helm 选项,然后单击下一步。
- 在功能选项卡中,选中启用 CSI 迁移。
- 你也可以转到存储选项卡并设置 datastore。此 Chart 使用
csi.vsphere.vmware.com
作为置备程序来创建一个 StorageClass。在创建此 StorageClass 时,你也可以提供用于配置 CSI 卷的 datastore URL。通过选择 datastore 并转到概述选项卡,你可以在 vSphere 客户端中找到 datastore URL。填写 StorageClass 的详细信息。 单击安装。
点击 ☰ > 集群管理。
- 转到将安装 vSphere CSI chart 的集群,然后单击 Explore。
- 单击应用 & 应用市场 > Chart。
- 单击 vSphere CSI。
- 单击安装。
- 填写所需的 vCenter 详细信息,然后单击安装。
- 选中在安装前自定义 Helm 选项,然后单击下一步。
- 在功能选项卡中,选中启用 CSI 迁移。
- 你也可以转到存储选项卡并设置 datastore。此 Chart 使用
csi.vsphere.vmware.com
作为置备程序来创建一个 StorageClass。在创建此 StorageClass 时,你也可以提供用于配置 CSI 卷的 datastore URL。通过选择 datastore 并转到概述选项卡,你可以在 vSphere 客户端中找到 datastore URL。填写 StorageClass 的详细信息。 - 单击安装。
3. 编辑集群以启用 CSI 迁移的功能开关
在编辑集群时,如果 Kubernetes 版本低于 1.19,请从 Kubernetes 版本下拉菜单中选择 Kubernetes 1.19 或更高版本。
要启用功能开关,请单击以 YAML 文件编辑,然后在 kube-controller 和 kubelet 下添加以下内容:
extra_args:
feature-gates: "CSIMigration=true,CSIMigrationvSphere=true"
4. 清空 worker 节点
在更改 kubelet 和 kube-controller-manager 参数之前,必须在升级期间清空 worker 节点:
- 点击 ☰ > 集群管理。
- 转到要清空 worker 节点的集群,然后单击 ⋮ > 编辑配置。
- 在高级选项中,将最大不可用的 Worker 节点数字段设置为 1。
- 要在升级期间清空节点,请选择清空节点 > 是。
- 将强制和删除本地数据设置为 true。
- 点击保存以升级集群。