本文档介绍了如何将 vSphere 数据存储区迁移到基于存储政策的管理 (SPBM)。
本页面适用于配置和管理存储性能、用量和费用的存储专家。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务。
1.30:正式版
1.29:预览版
1.16 及更低版本:不可用
上下文
在集群配置文件中,您可以在以下四个位置指定数据存储区:
管理员集群:vCenter.datastore
集群级用户集群,其中包含控制平面节点和所有工作器节点池:vCenter.datastore
用户集群控制平面节点:masterNode.vsphere.datastore
用户集群工作器节点池:nodePools[i].vsphere.datastore
这些字段的继承关系如下所示:
adminCluster.vCenter.datastore -> userCluster.vCenter.datastore -> (userCluster.masterNode.vsphere.datastore and userCluster.nodePools[i].vsphere.datastore)
示例:
如果
userCluster.vCenter.datastore
为空,则会从adminCluster.vCenter.datastore
继承值。如果
userCluster.nodePools[i].vsphere.datastore
为空,则会从userCluster.vCenter.datastore
继承值。
同样,您可以在以下四个位置指定存储政策:
集群级用户集群,其中包含控制平面节点和所有工作器节点池:vCenter.storagePolicyName
用户集群控制平面节点:masterNode.vsphere.storagePolicyName
用户集群工作器节点池:nodePools[i].vsphere.storagePolicyName
storagePolicyName
字段的继承关系与 datastore
字段相同。
准备工作
- 此过程是单向迁移。我们不支持迁移回之前的状态。
- 数据存储区必须与您要设置的新存储政策兼容。
- 仅支持高可用性 (HA) 管理员集群。如果您的管理员集群是非 HA 集群,您必须先将管理员集群迁移到 HA 集群。
迁移用户集群
您用于迁移的步骤取决于您是想迁移整个用户集群,还是想单独迁移控制平面节点和工作器节点池。使用此选项,您可以为控制平面节点和工作器节点池选择不同的存储政策。
为帮助您规划维护窗口,请注意以下事项:
迁移整个集群只需要进行一次集群更新。
单独迁移控制平面节点和工作器节点池需要进行两次集群更新。
整个集群
如果您想迁移整个集群(包括所有控制平面节点和工作器节点池),请按照以下步骤操作。用户集群版本必须为 1.30 或更高版本。
修改用户集群配置文件,如下所示:
使用存储政策的名称设置
vCenter.storagePolicyName
字段。如果指定了以下各项,请将其移除或注释掉:
vCenter.datastore
字段masterNode.vsphere
部分nodepools[i].vsphere.datastore
nodepools[i].vsphere.storagePolicyName
以下示例配置展示了这些更改。
更改前:
vCenter: datastore: ds-1
更改后:
vCenter: storagePolicyName: sp-1 # datastore: ds-1
更新用户集群:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
替换以下内容:
ADMIN_CLUSTER_KUBECONFIG
:管理员集群 kubeconfig 文件的路径USER_CLUSTER_CONFIG
:用户集群配置文件的路径
更新捆绑的 StorageClass
更新集群中的配置设置后,您需要更新捆绑的 StorageClass
。
获取捆绑的
vsphere-csi-driver
的当前默认StorageClass
(名为standard-rwo
),并将其保存到名为storage-class.yaml
的本地文件中。kubectl get storageclass standard-rwo -oyaml \ --kubeconfig USER_CLUSTER_KUBECONFIG > storage-class.yaml
将
USER_CLUSTER_KUBECONFIG
替换为用户集群 kubeconfig 文件的路径。为保险起见,请复制
storage-class.yaml
,因为您需要对该文件进行更改:cp storage-class.yaml storage-class.yaml-backup.yaml
从集群中删除默认的
StorageClass
:kubectl delete storageclass standard-rwo \ --kubeconfig USER_CLUSTER_KUBECONFIG
更新
storage-class.yaml
中的配置,如下所示:删除或注释掉以下字段:
parameters.datastoreURL
resourceVersion
添加
parameters.storagePolicyName
字段,并将其设置为存储政策的名称。
以下示例配置展示了这些更改。
更改前:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... datastoreURL: ds//ds-1
更改后:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... storagePolicyName: sp-1
将修改后的
StorageClass
应用于用户集群:kubectl apply -f storage-class.yaml \ --kubeconfig USER_CLUSTER_KUBECONFIG
仅限 kubeception 用户集群
对于 kubeception 用户集群,您需要更新管理员集群中用户集群控制平面节点的 StorageClass
。Kubeception 集群的配置字段 enableControlplaneV2
设置为 false
。启用 Controlplane V2 后,用户集群的控制平面在用户集群本身中运行。如果未启用 Controlplane V2,则用户集群的控制平面会在管理员集群中运行,称为 kubeception。
运行以下命令,确定集群是否已启用 ControlPlane V2:
kubectl get onpremuserclusters --kubeconfig USER_CLUSTER_KUBECONFIG \ -n kube-system -o jsonpath='{.items[0].spec.enableControlplaneV2}' && echo
如果输出为 false
,请完成以下步骤,以更新管理员集群中用户集群控制平面节点的默认 StorageClass
:
获取捆绑的
vsphere-csi-driver
的当前默认StorageClass
(名为USER_CLUSTER_NAME-csi
),并将其保存到名为storage-class-kubeception.yaml
的本地文件中。kubectl get storageclass USER_CLUSTER_NAME-csi -oyaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG > storage-class-kubeception.yaml
将
ADMIN_CLUSTER_KUBECONFIG
替换为管理员集群 kubeconfig 的路径。为保险起见,请复制
storage-class-kubeception.yaml
,因为您需要对该文件进行更改:cp storage-class-kubeception.yaml storage-class-kubeception-backup.yaml
从集群中删除默认的
StorageClass
:kubectl delete storageclass USER_CLUSTER_NAME-csi \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
更新
storage-class-kubeception.yaml
中的配置,如下所示:删除或注释掉以下字段:
parameters.datastoreURL
resourceVersion
添加
parameters.storagePolicyName
字段,并将其设置为存储政策的名称。
以下示例配置展示了这些更改。
更改前:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... datastoreURL: ds//ds-1
更改后:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... storagePolicyName: sp-1
将修改后的
StorageClass
应用于管理员集群:kubectl apply -f storage-class-kubeception.yaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
迁移后
如果您在迁移后创建新节点池,则新池会根据更新后的集群遵循继承规则。
例如,假设您已将 vCenter.datastore
迁移到存储政策。
现在,如果您创建新的节点池并将 nodePools[i].vsphere.datastore
和 nodePools[i].vsphere.storagePolicyName
都留空,则新节点池会继承 vCenter.storagePolicyName
中指定的存储政策。
单独迁移节点
如果您想单独迁移控制平面节点和工作器节点池,请按照以下步骤操作。
仅限 1.29 版:获取当前集群配置。如果用户集群为 1.30 版或更高版本,则无需执行此步骤。
gkectl get-config cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --cluster-name USER_CLUSTER_NAME \ --output-dir ./gen-files
替换以下内容:
ADMIN_CLUSTER_KUBECONFIG
:管理员集群的 kubeconfig 文件的路径。USER_CLUSTER_NAME
:用户集群的名称。
在
./gen-files
中,找到user-cluster.yaml
。如需详细了解如何获取配置文件,请参阅从集群生成配置文件。
生成的配置文件在每个级别(集群,
masterNode
[对于控制平面节点] 和nodepools
[对于工作器节点])都设置了datastore
名称,如以下示例所示:apiVersion: v1 kind: UserCluster ... # VCenter config in cluster level: vCenter: datastore: ds-1 ... # VCenter config in master node level: masterNode: vsphere: datastore: ds-1 ... # VCenter config in nodepool level: nodepools: - name: pool-1 vsphere: datastore: ds-1 - name: pool-2 vsphere: datastore: ds-1
迁移控制平面节点
如需迁移控制平面节点,请执行以下步骤:
在用户集群配置文件中进行以下更改:
- 使用存储政策的名称设置
masterNode.vsphere.storagePolicyName
字段。 - 删除或注释掉
masterNode.vsphere.datastore
字段。
以下示例配置展示了这些更改。
更改前:
masterNode: vsphere: datastore: ds-1
更改后:
masterNode: vsphere: # datastore: ds-1 storagePolicyName: sp-1
- 使用存储政策的名称设置
更新用户集群:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
替换以下内容:
ADMIN_CLUSTER_KUBECONFIG
:管理员集群 kubeconfig 文件的路径USER_CLUSTER_CONFIG
:用户集群配置文件的路径
等待更新命令完成后,然后再更新节点池。
迁移节点池
如需迁移所有节点池,请执行以下步骤:
在用户集群配置文件中进行以下更改:
- 使用存储政策的名称设置每个
nodePools[i].vsphere.storagePolicyName
字段。 - 删除或注释掉每个
nodePools[i].vsphere.datastore
字段。
以下示例配置展示了这些更改。
更改前:
nodepools: - name: pool-1 vsphere: datastore: ds-1 - name: pool-2 vsphere: datastore: ds-1
更改后:
nodepools: - name: pool-1 vsphere: # datastore: ds-1 storagePolicyName: sp-1 - name: pool-2 vsphere: # datastore: ds-1 storagePolicyName: sp-1
- 使用存储政策的名称设置每个
更新用户集群:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
(可选)在集群级别更新存储政策
对于用户集群,集群级 vCenter
部分中的 datastore
和 storagePolicyName
字段是 masterNode
和 nodepools
部分使用的默认值。完成上述步骤后,集群级 vCenter
datastore
和 storagePolicyName
设置不会被任何集群组件使用。您可以将集群级 vCenter
部分保留为原样,也可以更新该部分以与 masterNode
和 nodepools
保持一致。
如果您将该设置保留为原样,我们建议您在集群级 vCenter
部分上方添加注释,说明此设置会被忽略,因为它会被 masterNode
和 nodepools
部分中的设置替换。
如果您需要,可以更改集群级 vCenter
部分以匹配 masterNode
和 nodepools
部分,并按照以下步骤更新集群:
修改用户集群配置文件,如下所示:
- 使用存储政策的名称设置
vCenter.storagePolicyName
字段。 - 移除或注释掉
vCenter.datastore
字段。
- 使用存储政策的名称设置
更新用户集群:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
此更新命令不会对集群进行任何更改,但会更新服务器端 (
OnPremUserCluster
)vCenter.datastore
和vCenter.storagePolicyName
字段。
更新捆绑的 StorageClass
更新配置设置后,您需要更新捆绑的 StorageClass
。
获取捆绑的
vsphere-csi-driver
的当前默认StorageClass
(名为standard-rwo
),并将其保存到名为storage-class.yaml
的本地文件中。kubectl get storageclass standard-rwo -oyaml \ --kubeconfig USER_CLUSTER_KUBECONFIG > storage-class.yaml
将
USER_CLUSTER_KUBECONFIG
替换为用户集群 kubeconfig 文件的路径。为保险起见,请复制
storage-class.yaml
,因为您需要对该文件进行更改:cp storage-class.yaml storage-class.yaml-backup.yaml
从集群中删除默认的
StorageClass
:kubectl delete storageclass standard-rwo \ --kubeconfig USER_CLUSTER_KUBECONFIG
更新
storage-class.yaml
中的配置,如下所示:删除或注释掉以下字段:
parameters.datastoreURL
resourceVersion
添加
parameters.storagePolicyName
字段,并将其设置为存储政策的名称。
以下示例配置展示了这些更改。
更改前:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... datastoreURL: ds//ds-1
更改后:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... storagePolicyName: sp-1
将修改后的
StorageClass
应用于用户集群:kubectl apply -f storage-class.yaml \ --kubeconfig USER_CLUSTER_KUBECONFIG
仅限 kubeception 用户集群
对于 kubeception 用户集群,您需要更新管理员集群中用户集群控制平面节点的 StorageClass
。Kubeception 集群的配置字段 enableControlplaneV2
设置为 false
。启用 Controlplane V2 后,用户集群的控制平面在用户集群本身中运行。如果未启用 Controlplane V2,则用户集群的控制平面会在管理员集群中运行,称为 kubeception。
运行以下命令,确定集群是否已启用 ControlPlane V2:
kubectl get onpremuserclusters --kubeconfig USER_CLUSTER_KUBECONFIG \ -n kube-system -o jsonpath='{.items[0].spec.enableControlplaneV2}' && echo
如果输出为 false
,请完成以下步骤,以更新管理员集群中用户集群控制平面节点的默认 StorageClass
:
获取捆绑的
vsphere-csi-driver
的当前默认StorageClass
(名为USER_CLUSTER_NAME-csi
),并将其保存到名为storage-class-kubeception.yaml
的本地文件中。kubectl get storageclass USER_CLUSTER_NAME-csi -oyaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG > storage-class-kubeception.yaml
将
ADMIN_CLUSTER_KUBECONFIG
替换为管理员集群 kubeconfig 的路径。为保险起见,请复制
storage-class-kubeception.yaml
,因为您需要对该文件进行更改:cp storage-class-kubeception.yaml storage-class-kubeception-backup.yaml
从集群中删除默认的
StorageClass
:kubectl delete storageclass USER_CLUSTER_NAME-csi \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
更新
storage-class-kubeception.yaml
中的配置,如下所示:删除或注释掉以下字段:
parameters.datastoreURL
resourceVersion
添加
parameters.storagePolicyName
字段,并将其设置为存储政策的名称。
以下示例配置展示了这些更改。
更改前:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... datastoreURL: ds//ds-1
更改后:
apiVersion: storage.k8s.io/v1 kind: StorageClass name: standard-rwo Parameters: ... storagePolicyName: sp-1
将修改后的
StorageClass
应用于管理员集群:kubectl apply -f storage-class-kubeception.yaml \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG
迁移管理员集群
确保管理员集群也已使用存储政策名称进行更新。
在管理员集群配置文件中进行以下更改:
- 移除或注释掉
vCenter.datastore
字段。 - 使用存储政策的名称设置
vCenter.storagePolicyName
字段。
- 移除或注释掉
更新管理员集群:
gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config ADMIN_CLUSTER_CONFIG
替换以下内容:
ADMIN_CLUSTER_KUBECONFIG
:管理员集群 kubeconfig 文件的路径。ADMIN_CLUSTER_CONFIG
:管理员集群配置文件的路径。
使用 SPBM 进行存储迁移
完成数据存储区到 SPBM 的迁移后,您的集群现在将使用 SPBM。但迁移不会将任何存储工作负载(例如机器数据磁盘或容器卷)从旧数据存储区迁出。
如需迁移存储工作负载,请参阅通过基于存储政策的管理进行存储迁移。