$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
您可以配置实时迁移设置,以确保迁移过程不会压垮集群。
您可以配置实时迁移策略,将不同的迁移配置应用于虚拟机 (VM) 组。
通过更新位于openshift-cnv
命名空间中的HyperConverged
自定义资源 (CR),为集群配置实时迁移限制和超时。
编辑HyperConverged
CR 并添加必要的实时迁移参数
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
namespace: openshift-cnv
spec:
liveMigrationConfig:
bandwidthPerMigration: 64Mi (1)
completionTimeoutPerGiB: 800 (2)
parallelMigrationsPerCluster: 5 (3)
parallelOutboundMigrationsPerNode: 2 (4)
progressTimeout: 150 (5)
allowPostCopy: false (6)
1 | 每次迁移的带宽限制,值为每秒字节数。例如,值2048Mi 表示2048 MiB/s。默认值:0 ,表示无限制。 |
2 | 如果迁移未在此时间内完成,则会取消迁移,单位为每GiB内存的秒数。例如,如果6GiB内存的虚拟机在4800秒内未完成迁移,则会超时。如果迁移方法 为BlockMigration ,则计算中会包含正在迁移的磁盘的大小。 |
3 | 集群中并行运行的迁移次数。默认值:5 。 |
4 | 每个节点出站迁移的最大数量。默认值:2 。 |
5 | 如果内存复制未能在此时间内取得进展,则会取消迁移,单位为秒。默认值:150 。 |
6 | 如果虚拟机正在运行繁重的工作负载并且内存脏页率过高,这可能会阻止从一个节点到另一个节点的迁移收敛。为防止这种情况,您可以启用后期复制模式。默认情况下,allowPostCopy 设置为false 。 |
您可以通过删除键/值对并保存文件来恢复任何 |
迁移运行繁重工作负载(例如数据库处理)且内存脏页率较高的虚拟机时,需要更高的带宽才能完成迁移。
如果脏页率过高,则从一个节点到另一个节点的迁移不会收敛。为防止这种情况,请启用后期复制模式。
如果初始预复制阶段未在定义的超时时间内完成,则会触发后期复制模式。在后期复制期间,虚拟机 CPU 在源主机上暂停,同时传输所需的最少内存页。然后,虚拟机 CPU 在目标主机上激活,其余内存页在运行时传输到目标节点。
通过更新位于openshift-cnv
命名空间中的HyperConverged
自定义资源 (CR),为繁重工作负载配置实时迁移。
编辑HyperConverged
CR 并添加迁移繁重工作负载的必要参数
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
namespace: openshift-cnv
spec:
liveMigrationConfig:
bandwidthPerMigration: 0Mi (1)
completionTimeoutPerGiB: 150 (2)
parallelMigrationsPerCluster: 5 (3)
parallelOutboundMigrationsPerNode: 1 (4)
progressTimeout: 150 (5)
allowPostCopy: true (6)
1 | 每次迁移的带宽限制,值为每秒字节数。默认值为0 ,表示无限制。 |
2 | 如果迁移未在此时间内完成,则会取消迁移并触发后期复制模式(如果启用了后期复制)。此值以每GiB内存的秒数为单位。您可以降低completionTimeoutPerGiB 以在迁移过程的早期触发后期复制模式,或者提高completionTimeoutPerGiB 以在迁移过程的后期触发后期复制模式。 |
3 | 集群中并行运行的迁移次数。默认值为5 。迁移繁重工作负载时,最好将parallelMigrationsPerCluster 设置保持较低。 |
4 | 每个节点出站迁移的最大数量。为繁重工作负载配置每个节点一台虚拟机。 |
5 | 如果内存复制在此时间内未能取得进展,则迁移将被取消。此值以秒为单位测量。对于运行繁重工作负载的大型内存,请增加此参数。 |
6 | 当内存脏数据率很高时,使用后期复制模式以确保迁移收敛。将allowPostCopy 设置为true 以启用后期复制模式。 |
可选:如果您的主网络过于繁忙而无法进行迁移,请配置一个辅助的专用迁移网络。
后期复制模式可能会影响传输期间的性能,不应将其用于关键数据或不稳定的网络。 |
您可以创建实时迁移策略,将不同的迁移配置应用于由虚拟机或项目标签定义的虚拟机组。
您可以使用 OpenShift Virtualization Web 控制台创建实时迁移策略。 |
您可以使用命令行创建实时迁移策略。KubeVirt 使用任何标签组合将实时迁移策略应用于选定的虚拟机 (VM)。
虚拟机标签,例如size
、os
或gpu
项目标签,例如priority
、bandwidth
或hpc-workload
要使策略应用于特定虚拟机组,虚拟机组上的所有标签必须与策略的标签匹配。
如果多个实时迁移策略应用于一台虚拟机,则具有最多匹配标签的策略优先。 如果多个策略符合此条件,则会按匹配标签键的字母顺序对策略进行排序,并按此顺序选择第一个策略。 |
编辑您要应用实时迁移策略的虚拟机对象,并添加相应的虚拟机标签。
打开资源的 YAML 配置文件。
$ oc edit vm <vm_name>
调整配置的.spec.template.metadata.labels
部分中所需的标签值。例如,为了将虚拟机标记为迁移策略的production
虚拟机,请添加kubevirt.io/environment: production
行。
apiVersion: migrations.kubevirt.io/v1alpha1
kind: VirtualMachine
metadata:
name: <vm_name>
namespace: default
labels:
app: my-app
environment: production
spec:
template:
metadata:
labels:
kubevirt.io/domain: <vm_name>
kubevirt.io/size: large
kubevirt.io/environment: production
# ...
保存并退出配置。
使用相应的标签配置MigrationPolicy
对象。以下示例配置一个策略,该策略应用于所有标记为production
的虚拟机。
apiVersion: migrations.kubevirt.io/v1alpha1
kind: MigrationPolicy
metadata:
name: <migration_policy>
spec:
selectors:
namespaceSelector: (1)
hpc-workloads: "True"
xyz-workloads-type: ""
virtualMachineInstanceSelector: (2)
kubevirt.io/environment: "production"
1 | 指定项目标签。 |
2 | 指定虚拟机标签。 |
运行以下命令创建迁移策略。
$ oc create migrationpolicy -f <migration_policy>.yaml