6.5. 配置 virt-who
使用环境变量和 sysconfig 文件的使用来配置 virt-who 已被弃用。它们在下一个主发行版本中将忽略它们。
每个虚拟化平台支持的 virt-who 配置不同:
- 要为红帽产品配置 virt-who,请参阅 在红帽管理程序中安装和配置 virt-who。
- 要为 VMware vCenter 配置 virt-who,请参阅配置 virt-who 以连接到 VMware vCenter。
- 要为 Microsoft Hyper-V 配置 virt-who,请参阅配置 virt-who 以连接到 Microsoft-Hyper-V。
- 要为 OpenShift Virtualization 配置 virt-who,请参阅配置 virt-who 以连接到 OpenShift Virtualization。
6.5.1. 在红帽 hypervisor 上安装和配置 virt-who
使用这个流程,在 Red Hat Enterprise Linux Virtualization (KVM) (KVM)、Red Hat Virtualization 或 Red Hat OpenStack Platform 的每个虚拟机监控程序上安装和配置 virt-who。
先决条件
- 将 hypervisor 注册到红帽订阅管理。
-
如果您使用 Red Hat Virtualization Host (RHVH),请将其更新至最新版本,以便最小 virt-who 版本可用。默认情况下,virt-who 在 RHVH 上可用,但无法从
rhel-7-server-rhvh-4-rpms
存储库中单独更新。
流程
在 hypervisor 上安装 virt-who:
# yum install virt-who
可选:编辑
/etc/virt-who.conf
文件以更改或添加全局设置。由于 virt-who 安装在本地,因此这些设置仅适用于此 hypervisor。-
更改
VIRTWHO_INTERVAL
的值,以指定 virt-who 查询 hypervisor 的频率(以分钟为单位)。由于虚拟机被授予了最多 7 天的临时订阅,因此不需要频繁查询;您可以选择适合您环境大小的间隔。一旦一天(1440
)适合大多数环境。 如果要使用 HTTP 代理进行 virt-who 通信,请添加指定代理的行:
http_proxy=https://proxy.example.com:443
如果您不想为此服务器的任何 virt-who 通信使用 HTTP 代理,请添加以下行:
NO_PROXY=*
注意NO_PROXYcategories
可以使用,但只能在/etc/sysconfig/virt-who
中使用。NO_PROXY
不是/etc/virt-who.conf
中的有效配置。
-
更改
将模板配置文件复制到新的独立配置文件中:
# cp /etc/virt-who.d/template.conf /etc/virt-who.d/local.conf
编辑您刚才创建的配置文件,将示例值改为特定于您的配置:
[local] 1 type=libvirt 2 owner=1234567 3 hypervisor_id=hostname 4
启动并启用 virt-who 服务:
# systemctl enable --now virt-who
为每个虚拟机监控程序重复这些步骤。
6.5.2. 配置 virt-who 以连接到 VMware vCenter
使用这个流程配置 virt-who 以连接到 VMware vCenter Server。
先决条件
- 在 vCenter Server 中创建只读 virt-who 用户。virt-who 用户至少需要对 vCenter 数据中心中的所有对象进行只读访问。
- 在 Red Hat Enterprise Linux 服务器上准备 virt-who 主机。
流程
在 virt-who 主机上,使用
virt-who-password
程序加密 virt-who 用户的密码:# virt-who-password
出现提示时,输入 virt-who 用户的密码,然后记下密码的加密形式。
将模板配置文件复制到新的独立配置文件中:
# cp /etc/virt-who.d/template.conf /etc/virt-who.d/vcenter1.conf
为了在故障排除时轻松识别配置文件,请使用 VMware vCenter 主机名作为新文件的名称。在本例中,主机名是 vcenter1。
编辑您刚才创建的配置文件,使用特定于您的配置的值更改示例值:
[vcenter1] 1 type=esx 2 server=vcenter1.example.com 3 username=virt_who_user 4 encrypted_password=bd257f93d@482B76e6390cc54aec1a4d 5 owner=1234567 6 hypervisor_id=hostname 7 filter_hosts=esx1.example.com, esx2.example.com 8
- 1
- 每个单独配置文件的名称必须是唯一的。使用 vCenter Server 主机名可以轻松地识别每个 hypervisor 的配置文件。
- 2
- 指定此 virt-who 连接是 VMware vCenter Server。
- 3
- vCenter 服务器的 FQDN。
- 4
- vCenter 服务器上 virt-who 用户的名称。
- 5
- virt-who 用户的加密密码。
- 6
- 管理程序所属的组织。您可以通过在虚拟机监控程序上运行
subscription-manager 组织
来查找机构。 - 7
- 指定如何识别 hypervisor。使用主机名为订阅管理提供有意义的主机名。
或者,您可以使用
uuid
或hwuuid
来避免在虚拟机监控程序重命名时出现重复。 - 8
- 如果某些虚拟机监控程序从不运行 Red Hat Enterprise Linux 虚拟机,则这些虚拟机监控程序不需要由 virt-who 报告。您可以使用以下选项之一过滤 hypervisor。支持通配符和正则表达式。如果名称包含特殊字符,请将其用引号括起。
-
filter_hosts
或exclude_hosts
:根据指定的hypervisor_id
提供以逗号分隔的虚拟机监控程序列表。例如,如果虚拟机监控程序由其主机名标识,它们必须由主机名包含或排除。 -
filter_host_parents
或exclude_host_parents
:提供以逗号分隔的集群列表。过滤的集群中虚拟机监控程序由 virt-who 报告。排除集群中的 hypervisor 不会被 virt-who 报告。
-
重启 virt-who 服务:
# systemctl restart virt-who
为每个 vCenter 服务器重复这些步骤。
6.5.3. 配置 virt-who 以连接到 Microsoft Hyper-V
使用这个流程配置 virt-who 以连接到 Microsoft Hyper-V hypervisor。
先决条件
- Red Hat Enterprise Linux 9 或更高版本。
- 在 Red Hat Enterprise Linux 服务器上准备 virt-who 主机。
- 为 hypervisor 启用基本身份验证模式。
- 在 hypervisor 上启用远程管理。
- 在 hypervisor 中创建只读 virt-who 用户。
流程
在 virt-who 主机上,使用
virt-who-password
程序加密 hypervisor 的 virt-who 用户的密码:# virt-who-password
出现提示时,输入 virt-who 用户的密码,然后记下密码的加密形式。
将模板配置文件复制到新的独立配置文件中:
# cp /etc/virt-who.d/template.conf /etc/virt-who.d/hyperv1.conf
为了在故障排除时轻松识别配置文件,请使用 hypervisor 的主机名作为新文件的名称。在本例中,主机名是 hyperv1。
编辑您刚才创建的配置文件,使用特定于您的配置的值更改示例值:
[hyperv1] 1 type=hyperv 2 server=hyperv1.example.com 3 username=virt_who_user 4 encrypted_password=bd257f93d@482B76e6390cc54aec1a4d 5 owner=1234567 6 hypervisor_id=hostname 7
- 1
- 每个单独配置文件的名称必须是唯一的。使用 hypervisor 的主机名,可以轻松地识别每个 hypervisor 的配置文件。
- 2
- 指定此 virt-who 连接是 Microsoft Hyper-V hypervisor。
- 3
- Hyper-V hypervisor 的 FQDN。
- 4
- hypervisor 上 virt-who 用户的名称。
- 5
- virt-who 用户的加密密码。
- 6
- 此 hypervisor 所属的组织。您可以通过在 hypervisor 上运行
subscription-manager 组织
来查找机构。 - 7
- 指定如何识别 hypervisor。使用主机名为订阅管理提供有意义的主机名。
或者,如果虚拟机监控程序被重命名,您可以使用
uuid
来避免重复。不要将hwuuid
用于单个虚拟机监控程序。
重启 virt-who 服务:
# systemctl restart virt-who
为每个虚拟机监控程序重复这些步骤。
6.5.4. 配置 virt-who 以连接到 OpenShift Virtualization
支持的平台
OpenShift Virtualization 支持的 virt-who 状态:
- virt-who-0.28.x-1.el7 (RHEL 7.9)
- virt-who-0.29.x-1.el8 (RHEL 8.3)
流程
在您要订阅的集群中,创建一个名为 virt-who 的项目和服务帐户:
$ oc new-project virt-who $ oc create serviceaccount virt-who
创建集群角色,以列出节点和虚拟机实例。
$ oc create clusterrole lsnodes --verb=list --resource=nodes $ oc create clusterrole lsvmis --verb=list --resource=vmis
创建集群角色绑定。
$ oc adm policy add-cluster-role-to-user lsnodes system:serviceaccount:virt-who:virt-who $ oc adm policy add-cluster-role-to-user lsvmis system:serviceaccount:virt-who:virt-who
验证 virt-who 系统帐户是否有所有运行的虚拟机的权限:
$ oc get vmis -A --as=system:serviceaccount:virt-who:virt-who
在主机上安装 virt-who,该主机可以是在 OpenShift Virtualization 本身上运行的虚拟机:
[virtwho-host]$ yum install virt-who
在订阅的主机上查找所有者号:
$ subscription-manager orgs
将模板配置文件复制到新的单个配置文件中。为了在故障排除时轻松识别配置文件,请使用集群 API 的主机名。在本例中,主机名是
openshift-cluster-1
。[virtwho-host]# cp /etc/virt-who.d/template.conf /etc/virt-who.d/openshift-cluster-1.conf [cnv] type=kubevirt kubeconfig=/root/.kube/config hypervisor_id=hostname owner=<owner_number>
获取 virt-who 服务帐户的令牌:
# oc serviceaccounts get-token virt-who
如果
/usr/bin/oc
不可用,请安装/usr/bin/oc
,并使用令牌登录并创建有效的 kubeconfig 文件。您必须通过包含 url 来指定集群 api。例如:[virtwho-host]# oc login https://api.testcluster-1.example.org:6443 --token=<token>
要在 kubeconfig 文件中使用 OpenShift Virtualization certificate-authority (CA)证书,将其从集群中提取,并将其保存到运行 virt-who 作为控制器守护进程的系统上的文件:
oc get secret -n openshift-kube-apiserver-operator loadbalancer-serving-signer -o jsonpath='{.data.tls\.crt}' | base64 -d > $cluster-ca.pem
更改 kubeconfig 文件,使其包含提取的 CA 证书。例如:
[virtwho-host]$ cat /root/.kube/config apiVersion: v1 clusters: - cluster: server: https://api.testcluster.example.org:6443 certificate-authority: /root/testcluster-ca.pem name: api-testcluster-example-org:6443 contexts: - context: cluster: api-test-cluster-example-org:6443 namespace: default
在启动该服务前,您可以手动测试配置:
[virtwho-host]# virt-who --print
如果安装了 jq
程序,您可以使用它更轻松地读取输出:{ virt-who --print | jq
启用 virt-who 服务:
[virtwho-host]# systemctl enable virt-who
重启 virt-who 服务以使用新配置。
[virtwho-host]# systemctl restart virt-who
virt-who 日志位于 /var/log/rhsm/rhsm.log
中。在这个文件中,您可以查看配置或连接错误。