第 3 章 容器原生虚拟化 2.1 发行注记


3.1. 容器原生虚拟化 2.1 发行注记

3.1.1. 关于容器原生虚拟化

3.1.1.1. 容器原生虚拟化的作用

容器原生虚拟化(container-native virtualization)是 OpenShift Container Platform 的一个附加组件,可用于运行和管理虚拟机工作负载以及容器工作负载。

容器原生虚拟化通过 Kubernetes 自定义资源添加新对象至 OpenShift Container Platform 集群中,以启用虚拟化任务。这些任务包括:

  • 创建和管理 Linux 和 Windows 虚拟机
  • 通过各种控制台和 CLI 工具连接至虚拟机
  • 导入和克隆现有虚拟机
  • 管理虚拟机上附加的网络接口控制器和存储磁盘
  • 在节点间实时迁移虚拟机

增强版 web 控制台提供了一个图形化的门户界面 来管理虚拟化资源以及 OpenShift Container Platform 集群容器和基础架构。

3.1.1.2. 容器原生虚拟化支持

重要

容器原生虚拟化仅是一项技术预览功能。技术预览功能不被红帽产品服务等级协议 (SLA) 支持,且可能在功能方面有缺陷。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的详情,请参阅 https://access.redhat.com/support/offerings/techpreview/

3.1.2. 新增和改变的功能

3.1.2.1. Web 控制台的改进

  • OpenShift Container Platform 仪表板收集有关集群的高级别信息。在 OpenShift Container Platform Web 控制台中,点击 Home Dashboards Overview 访问仪表板。请注意,Web 控制台项目概述中不再列出虚拟机。虚拟机现在列在 Cluster Inventory 仪表板卡中。

3.1.2.2. 其他改进

  • 安装容器原生虚拟化后,MVM 池管理器会自动启动。如果您在不指定 MAC 地址的情况下定义了第二个 NIC,则 MAC 池管理器会为 NIC 分配一个唯一的 MAC 地址。

    注意

    如果您使用特定 MAC 地址定义了二级 NIC,则 MAC 地址可能会与集群中的另一个 NIC 冲突。

3.1.3. 已解决的问题

  • 以前,如果您使用 web 控制台创建与现有虚拟机名称相同的虚拟机模板,则操作会失败。这会导致出现 Name is already used by another virtual machine信息。此问题已在容器原生虚拟化 2.1 中解决。(BZ#1717802)
  • 以前,如果您通过以 bridge 模式连接的 Pod 网络创建虚拟机并使用 cloud-init 磁盘,则虚拟机重启后会断开网络连接。此问题已在容器原生虚拟化 2.1 中解决。(BZ#1708680)

3.1.4. 已知问题

  • 虚拟机的 masquerade 绑定方法不能用于包含 RHEL 7 计算节点的集群。(BZ#1741626)
  • 当在容器原生虚拟化安装过程中创建 KubeVirt HyperConverged Cluster Operator Deployment 自定义资源时,会显示一个带有不正确值的 YAML 文件。该文件类似于以下示例:

    apiVersion: hco.kubevirt.io/v1alpha1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
      BareMetalPlatform: 'false' 1
    1
    'false' 的单引号不正确。在点 Create 前,需要编辑这个文件来使行读取 BareMetalPlatform: false。如果没有删除引号,则部署将无法成功。(BZ#1767167)
  • 当通过 web 控制台中的 Disks 选项卡向虚拟机添加磁盘时,添加的磁盘总是具有 Filesystem 的 volumeMode,而不考虑 kubevirt-storage-class-default ConfigMap 中设置的 volumeMode。(BZ#1753688)
  • 迁移后,会为虚拟机分配一个新的 IP 地址。但是,oc get vmioc describe vmi 命令仍会生成包含过时 IP 地址的输出。(BZ#1686208)

    • 作为临时解决方案,请运行以下命令来查看正确的 IP 地址:

      $ oc get pod -o wide
  • 对于没有管理员特权的用户,虚拟机向导不会加载。此问题是由于缺少允许用户加载网络附加定义的权限造成的。(BZ#1743985)

    • 作为临时解决方案,请为用户提供加载网络附加定义的权限。

      1. 使用以下示例将 ClusterRoleClusterRoleBinding 对象定义到 YAML 配置文件:

        apiVersion: rbac.authorization.k8s.io/v1
        kind: ClusterRole
        metadata:
         name: cni-resources
        rules:
        - apiGroups: ["k8s.cni.cncf.io"]
         resources: ["*"]
         verbs: ["*"]
        apiVersion: rbac.authorization.k8s.io/v1
        kind: ClusterRoleBinding
        metadata:
          name: <role-binding-name>
        roleRef:
          apiGroup: rbac.authorization.k8s.io
          kind: ClusterRole
          name: cni-resources
        subjects:
        - kind: User
          name: <user to grant the role to>
          namespace: <namespace of the user>
      2. 作为 cluster-admin 用户,运行以下命令来创建您定义的 ClusterRoleClusterRoleBinding 对象:

        $ oc create -f <filename>.yaml
  • 当导航到 Virtual Machines Console 选项卡时,有时不会显示任何内容。作为临时解决方案,请使用串行控制台。(BZ#1753606)
  • 当您尝试从浏览器中列出容器原生虚拟化 Operator 的所有实例时,您会收到 404(未找到页面)错误。(BZ#1757526)

    • 作为临时解决方案,请运行以下命令:

      $ oc get pods -n openshift-cnv | grep operator
  • 移除容器原生虚拟化时,仍会不当保留某些资源。您必须手动删除这些资源以便重新安装容器原生虚拟化。(BZ#1712429)、BZ#1757705)

  • 如果虚拟机使用有保证的 CPU,则可不调度,因为节点上不会自动设置 cpumanager=true 标签。为解决这一问题,请从 kubevirt-config ConfigMap 中移除 CPUManager 条目。然后,为节点手动添加 cpumanager=true 标签,然后在您的集群上运行有保证 CPU 的虚拟机。(BZ#1718944)
  • 当节点具有不同的 CPU 型号时,实时迁移会失败。即使节点具有相同的物理 CPU 型号,微代码更新引入的差异也会产生同样的问题。这是因为默认设置触发了主机 CPU 透传行为,这与实时迁移不兼容。(BZ#1760028)

    • 作为临时解决方案,请在 kubevirt-config ConfigMap 中设置默认 CPU 型号,如下例所示:

      注意

      您必须在启动支持实时迁移的虚拟机前进行此更改。

      1. 运行以下命令,打开 kubevirt-config ConfigMap 以进行编辑:

        $ oc edit configmap kubevirt-config -n openshift-cnv
      2. 编辑 ConfigMap:

        kind: ConfigMap
        metadata:
          name: kubevirt-config
        data:
          default-cpu-model: "<cpu-model>" 1
        1
        <cpu-model> 替换为实际 CPU 型号值。要确定此值,您可以为所有节点运行 oc describe node <node> 并查看 cpu-model-<name> 标签。选择所有节点上出现的 CPU 型号。
  • 由于 Operator Lifecycle Manager (OLM) 的中断,容器原生虚拟化升级过程偶尔会失败。造成此问题的原因是使用声明性 API 来跟踪容器原生虚拟化 Operator 状态具有局限性。在安装过程中启用自动更新降低了遇到此问题的风险。(BZ#1759612)
  • 容器原生虚拟化无法可靠识别由运行 oc adm drainkubectl drain 触发的节点排空。不要在部署容器原生虚拟化的任何集群节点上运行这些命令。节点上如有虚拟机正在运行,则不会排空。当前解决方案为将节点设置为维护模式。(BZ#1707427)
  • 当运行 virtctl image-uploadqcow2 格式上传大型虚拟机磁盘镜像时,在传输数据后可能会报告一个文件终止 (EOF) 错误,即使上传正常或完成。(BZ#1754920)

    运行以下命令,检查指定 PVC 中上传的状态:

    $ oc describe pvc <pvc-name> | grep cdi.kubevirt.io/storage.pod.phase
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.