$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
在 OpenShift Virtualization 上部署托管集群后,您可以通过完成以下步骤来管理集群。
您可以通过直接从资源获取kubeconfig
文件和kubeadmin
凭据,或使用hcp
命令行界面生成kubeconfig
文件来访问托管集群。
要通过直接从资源获取kubeconfig
文件和凭据来访问托管集群,您必须熟悉托管集群的访问密钥。托管集群(托管)命名空间包含托管集群资源和访问密钥。托管控制平面命名空间是托管控制平面运行的位置。
密钥名称格式如下所示
kubeconfig
密钥:<托管集群命名空间>-<名称>-admin-kubeconfig
(clusters-hypershift-demo-admin-kubeconfig)
kubeadmin
密码密钥:<托管集群命名空间>-<名称>-kubeadmin-password
(clusters-hypershift-demo-kubeadmin-password)
kubeconfig
密钥包含一个 Base64 编码的kubeconfig
字段,您可以将其解码并保存到文件中,然后使用以下命令:
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
kubeadmin
密码密钥也是 Base64 编码的。您可以对其进行解码,并使用该密码登录到托管集群的 API 服务器或控制台。
要使用hcp
CLI 生成kubeconfig
文件来访问托管集群,请执行以下步骤:
输入以下命令生成kubeconfig
文件:
$ hcp create kubeconfig --namespace <hosted_cluster_namespace> --name <hosted_cluster_name> > <hosted_cluster_name>.kubeconfig
保存kubeconfig
文件后,您可以输入以下示例命令来访问托管集群:
$ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
如果您没有提供任何高级存储配置,则默认存储类将用于 KubeVirt 虚拟机 (VM) 镜像、KubeVirt 容器存储接口 (CSI) 映射和 etcd 卷。
下表列出了基础架构必须提供的功能才能支持托管集群中的持久性存储。
基础架构 CSI 提供程序 | 托管集群 CSI 提供程序 | 托管集群功能 | 备注 |
---|---|---|---|
任何 RWX |
|
基本:RWO |
推荐 |
任何 RWX |
Red Hat OpenShift Data Foundation 外部模式 |
Red Hat OpenShift Data Foundation 功能集 |
|
任何 RWX |
Red Hat OpenShift Data Foundation 内部模式 |
Red Hat OpenShift Data Foundation 功能集 |
不要使用 |
KubeVirt CSI 支持映射能够进行ReadWriteMany
(RWX) 访问的基础架构存储类。您可以在集群创建期间将基础架构存储类映射到托管存储类。
要将基础架构存储类映射到托管存储类,请使用--infra-storage-class-mapping
参数运行以下命令:
$ hcp create cluster kubevirt \
--name <hosted_cluster_name> \ (1)
--node-pool-replicas <worker_node_count> \ (2)
--pull-secret <path_to_pull_secret> \ (3)
--memory <memory> \ (4)
--cores <cpu> \ (5)
--infra-storage-class-mapping=<infrastructure_storage_class>/<hosted_storage_class> \ (6)
1 | 指定托管集群的名称,例如example 。 |
2 | 指定工作程序数量,例如2 。 |
3 | 指定您的拉取密钥的路径,例如/user/name/pullsecret 。 |
4 | 指定内存的值,例如8Gi 。 |
5 | 指定 CPU 的值,例如2 。 |
6 | 将<infrastructure_storage_class> 替换为基础设施存储类名称,并将<hosted_storage_class> 替换为托管集群存储类名称。您可以在hcp create cluster 命令中多次使用--infra-storage-class-mapping 参数。 |
创建托管集群后,基础设施存储类将在托管集群中可见。当您在托管集群中创建一个使用其中一个存储类的持久卷声明 (PVC) 时,KubeVirt CSI 将使用您在集群创建期间配置的基础设施存储类映射来配置该卷。
KubeVirt CSI 只支持映射能够进行 RWX 访问的基础设施存储类。 |
下表显示了卷和访问模式功能如何映射到 KubeVirt CSI 存储类
基础设施 CSI 功能 | 托管集群 CSI 功能 | 虚拟机实时迁移支持 | 备注 |
---|---|---|---|
RWX: |
|
支持 |
使用 |
RWO |
RWO |
不支持 |
缺乏实时迁移支持会影响更新托管 KubeVirt VM 的底层基础设施集群的能力。 |
RWO |
RWO |
不支持 |
缺乏实时迁移支持会影响更新托管 KubeVirt VM 的底层基础设施集群的能力。使用基础设施 |
您可以使用 KubeVirt CSI 将您的基础设施卷快照类公开到托管集群。
要将您的卷快照类映射到托管集群,请在创建托管集群时使用--infra-volumesnapshot-class-mapping
参数。运行以下命令
$ hcp create cluster kubevirt \
--name <hosted_cluster_name> \ (1)
--node-pool-replicas <worker_node_count> \ (2)
--pull-secret <path_to_pull_secret> \ (3)
--memory <memory> \ (4)
--cores <cpu> \ (5)
--infra-storage-class-mapping=<infrastructure_storage_class>/<hosted_storage_class> \ (6)
--infra-volumesnapshot-class-mapping=<infrastructure_volume_snapshot_class>/<hosted_volume_snapshot_class> (7)
1 | 指定托管集群的名称,例如example 。 |
2 | 指定工作程序数量,例如2 。 |
3 | 指定您的拉取密钥的路径,例如/user/name/pullsecret 。 |
4 | 指定内存的值,例如8Gi 。 |
5 | 指定 CPU 的值,例如2 。 |
6 | 将<infrastructure_storage_class> 替换为基础设施集群中存在的存储类。将<hosted_storage_class> 替换为托管集群中存在的存储类。 |
7 | 将<infrastructure_volume_snapshot_class> 替换为基础设施集群中存在的卷快照类。将<hosted_volume_snapshot_class> 替换为托管集群中存在的卷快照类。 |
如果您不使用 |
您可以通过将多个卷快照类分配给特定组来将其映射到托管集群。只有当基础设施存储类和卷快照类属于同一组时,它们才是兼容的。
要将多个卷快照类映射到托管集群,请在创建托管集群时使用group
选项。运行以下命令
$ hcp create cluster kubevirt \
--name <hosted_cluster_name> \ (1)
--node-pool-replicas <worker_node_count> \ (2)
--pull-secret <path_to_pull_secret> \ (3)
--memory <memory> \ (4)
--cores <cpu> \ (5)
--infra-storage-class-mapping=<infrastructure_storage_class>/<hosted_storage_class>,group=<group_name> \ (6)
--infra-storage-class-mapping=<infrastructure_storage_class>/<hosted_storage_class>,group=<group_name> \
--infra-storage-class-mapping=<infrastructure_storage_class>/<hosted_storage_class>,group=<group_name> \
--infra-volumesnapshot-class-mapping=<infrastructure_volume_snapshot_class>/<hosted_volume_snapshot_class>,group=<group_name> \ (7)
--infra-volumesnapshot-class-mapping=<infrastructure_volume_snapshot_class>/<hosted_volume_snapshot_class>,group=<group_name>
1 | 指定托管集群的名称,例如example 。 |
2 | 指定工作程序数量,例如2 。 |
3 | 指定您的拉取密钥的路径,例如/user/name/pullsecret 。 |
4 | 指定内存的值,例如8Gi 。 |
5 | 指定 CPU 的值,例如2 。 |
6 | 将<infrastructure_storage_class> 替换为基础设施集群中存在的存储类。将<hosted_storage_class> 替换为托管集群中存在的存储类。将<group_name> 替换为组名。例如,infra-storage-class-mygroup/hosted-storage-class-mygroup,group=mygroup 和infra-storage-class-mymap/hosted-storage-class-mymap,group=mymap 。 |
7 | 将<infrastructure_volume_snapshot_class> 替换为基础设施集群中存在的卷快照类。将<hosted_volume_snapshot_class> 替换为托管集群中存在的卷快照类。例如,infra-vol-snap-mygroup/hosted-vol-snap-mygroup,group=mygroup 和infra-vol-snap-mymap/hosted-vol-snap-mymap,group=mymap 。 |
在集群创建时,您可以使用--root-volume-storage-class
参数配置用于托管 KubeVirt VM 根卷的存储类。
要为 KubeVirt VM 设置自定义存储类和卷大小,请运行以下命令
$ hcp create cluster kubevirt \
--name <hosted_cluster_name> \ (1)
--node-pool-replicas <worker_node_count> \ (2)
--pull-secret <path_to_pull_secret> \ (3)
--memory <memory> \ (4)
--cores <cpu> \ (5)
--root-volume-storage-class <root_volume_storage_class> \ (6)
--root-volume-size <volume_size> (7)
1 | 指定托管集群的名称,例如example 。 |
2 | 指定工作程序数量,例如2 。 |
3 | 指定您的拉取密钥的路径,例如/user/name/pullsecret 。 |
4 | 指定内存的值,例如8Gi 。 |
5 | 指定 CPU 的值,例如2 。 |
6 | 指定存储类的名称以托管 KubeVirt VM 根卷,例如ocs-storagecluster-ceph-rbd 。 |
7 | 指定卷大小,例如64 。 |
结果,您将获得一个托管集群,该集群上的 VM 托管在 PVC 上。
您可以使用 KubeVirt VM 镜像缓存来优化集群启动时间和存储使用率。KubeVirt VM 镜像缓存支持使用能够进行智能克隆和ReadWriteMany
访问模式的存储类。有关智能克隆的更多信息,请参见使用智能克隆克隆数据卷。
镜像缓存的工作原理如下
VM 镜像被导入到与托管集群关联的 PVC。
为每个作为工作节点添加到集群的 KubeVirt VM 创建该 PVC 的唯一克隆。
镜像缓存通过只需要单次镜像导入来减少 VM 启动时间。当存储类支持写时复制克隆时,它可以进一步减少整体集群存储使用率。
要启用镜像缓存,在集群创建期间,请使用--root-volume-cache-strategy=PVC
参数运行以下命令
$ hcp create cluster kubevirt \
--name <hosted_cluster_name> \ (1)
--node-pool-replicas <worker_node_count> \ (2)
--pull-secret <path_to_pull_secret> \ (3)
--memory <memory> \ (4)
--cores <cpu> \ (5)
--root-volume-cache-strategy=PVC (6)
1 | 指定托管集群的名称,例如example 。 |
2 | 指定工作程序数量,例如2 。 |
3 | 指定您的拉取密钥的路径,例如/user/name/pullsecret 。 |
4 | 指定内存的值,例如8Gi 。 |
5 | 指定 CPU 的值,例如2 。 |
6 | 指定镜像缓存的策略,例如PVC 。 |
KubeVirt 容器存储接口 (CSI) 将底层基础设施集群的存储功能扩展到托管集群。CSI 驱动程序使用以下安全约束来确保对基础设施存储类和托管集群的安全和隔离访问
托管集群的存储与其他托管集群隔离。
托管集群中的工作节点没有对基础设施集群的直接 API 访问权限。托管集群只能通过受控的 KubeVirt CSI 接口在基础设施集群上配置存储。
托管集群无权访问 KubeVirt CSI 集群控制器。因此,托管集群无法访问与托管集群无关的基础设施集群上的任意存储卷。KubeVirt CSI 集群控制器在托管控制平面命名空间中的 Pod 中运行。
KubeVirt CSI 集群控制器的基于角色的访问控制 (RBAC) 将持久卷声明 (PVC) 访问权限限制为仅托管控制平面命名空间。因此,KubeVirt CSI 组件无法访问其他命名空间中的存储。
在集群创建时,您可以使用--etcd-storage-class
参数配置用于托管 etcd 数据的存储类。
要为 etcd 配置存储类,请运行以下命令
$ hcp create cluster kubevirt \
--name <hosted_cluster_name> \ (1)
--node-pool-replicas <worker_node_count> \ (2)
--pull-secret <path_to_pull_secret> \ (3)
--memory <memory> \ (4)
--cores <cpu> \ (5)
--etcd-storage-class=<etcd_storage_class_name> (6)
1 | 指定托管集群的名称,例如example 。 |
2 | 指定工作程序数量,例如2 。 |
3 | 指定您的拉取密钥的路径,例如/user/name/pullsecret 。 |
4 | 指定内存的值,例如8Gi 。 |
5 | 指定 CPU 的值,例如2 。 |
6 | 指定 etcd 存储类名称,例如lvm-storageclass 。如果您没有提供--etcd-storage-class 参数,则使用默认存储类。 |
您可以使用 OpenShift Virtualization 上托管集群中的hcp
命令行界面 (CLI) 将一个或多个 NVIDIA 图形处理单元 (GPU) 设备附加到节点池。
将 NVIDIA GPU 设备附加到节点池仅是技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围。 |
您已将 NVIDIA GPU 设备作为资源公开在 GPU 设备所在的节点上。更多信息,请参阅 NVIDIA GPU 算子与 OpenShift 虚拟化。
您已将 NVIDIA GPU 设备作为节点上的 扩展资源 公开,以将其分配给节点池。
您可以在集群创建期间通过运行以下命令将 GPU 设备附加到节点池
$ hcp create cluster kubevirt \
--name <hosted_cluster_name> \(1)
--node-pool-replicas <worker_node_count> \(2)
--pull-secret <path_to_pull_secret> \(3)
--memory <memory> \(4)
--cores <cpu> \(5)
--host-device-name="<gpu_device_name>,count:<value>" (6)
1 | 指定托管集群的名称,例如example 。 |
2 | 指定工作节点数量,例如,3 。 |
3 | 指定您的拉取密钥的路径,例如/user/name/pullsecret 。 |
4 | 指定内存值,例如,16Gi 。 |
5 | 指定 CPU 的值,例如2 。 |
6 | 指定 GPU 设备名称和数量,例如,--host-device-name="nvidia-a100,count:2" 。--host-device-name 参数采用基础架构节点上的 GPU 设备名称和一个可选计数,该计数表示要附加到节点池中每个虚拟机 (VM) 的 GPU 设备数量。默认计数为 1 。例如,如果您将 2 个 GPU 设备附加到 3 个节点池副本,则节点池中的所有 3 个虚拟机都将附加到 2 个 GPU 设备。 |
您可以多次使用 |
您可以通过配置 NodePool
资源中的 nodepool.spec.platform.kubevirt.hostDevices
字段,将一个或多个 NVIDIA 图形处理器 (GPU) 设备附加到节点池。
将 NVIDIA GPU 设备附加到节点池仅是技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让您抢先体验即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围。 |
将一个或多个 GPU 设备附加到节点池
要附加单个 GPU 设备,请使用以下示例配置来配置 NodePool
资源
apiVersion: hypershift.openshift.io/v1beta1
kind: NodePool
metadata:
name: <hosted_cluster_name> (1)
namespace: <hosted_cluster_namespace> (2)
spec:
arch: amd64
clusterName: <hosted_cluster_name>
management:
autoRepair: false
upgradeType: Replace
nodeDrainTimeout: 0s
nodeVolumeDetachTimeout: 0s
platform:
kubevirt:
attachDefaultNetwork: true
compute:
cores: <cpu> (3)
memory: <memory> (4)
hostDevices: (5)
- count: <count> (6)
deviceName: <gpu_device_name> (7)
networkInterfaceMultiqueue: Enable
rootVolume:
persistent:
size: 32Gi
type: Persistent
type: KubeVirt
replicas: <worker_node_count> (8)
1 | 指定托管集群的名称,例如example 。 |
2 | 指定托管集群命名空间的名称,例如,clusters 。 |
3 | 指定 CPU 的值,例如2 。 |
4 | 指定内存值,例如,16Gi 。 |
5 | hostDevices 字段定义您可以附加到节点池的不同类型的 GPU 设备列表。 |
6 | 指定要附加到节点池中每个虚拟机 (VM) 的 GPU 设备数量。例如,如果您将 2 个 GPU 设备附加到 3 个节点池副本,则节点池中的所有 3 个虚拟机都将附加到 2 个 GPU 设备。默认计数为 1 。 |
7 | 指定 GPU 设备名称,例如,nvidia-a100 。 |
8 | 指定工作节点数量,例如,3 。 |
要附加多个 GPU 设备,请使用以下示例配置来配置 NodePool
资源
apiVersion: hypershift.openshift.io/v1beta1
kind: NodePool
metadata:
name: <hosted_cluster_name>
namespace: <hosted_cluster_namespace>
spec:
arch: amd64
clusterName: <hosted_cluster_name>
management:
autoRepair: false
upgradeType: Replace
nodeDrainTimeout: 0s
nodeVolumeDetachTimeout: 0s
platform:
kubevirt:
attachDefaultNetwork: true
compute:
cores: <cpu>
memory: <memory>
hostDevices:
- count: <count>
deviceName: <gpu_device_name>
- count: <count>
deviceName: <gpu_device_name>
- count: <count>
deviceName: <gpu_device_name>
- count: <count>
deviceName: <gpu_device_name>
networkInterfaceMultiqueue: Enable
rootVolume:
persistent:
size: 32Gi
type: Persistent
type: KubeVirt
replicas: <worker_node_count>