如何在配置期间将虚拟机名称(而非主机名)传递给虚拟机

如何在配置期间将虚拟机名称(而非主机名)传递给虚拟机

简短版本

通过 vCenter API 配置新虚拟机时,我们需要在初始启动/配置阶段将虚拟机的名称(vCenter UI 中给出的名称,而不是主机名)传递给操作系统。我想知道是否有任何方法可以“询问”虚拟机管理程序以从操作系统级别为我提供该名称?

如果可能的话,我可以使用这个名称并发出 hostnamectl 命令来设置静态名称,这样就可以从 DHCP 服务器(发送基于主机名的 IP 分配)获得正确的 IP。VMware 是否为此类查找提供任何 API 支持?

长版:)

我们正在使用 Rancher 来配置 k8s 集群节点,使用其 vSphere 集成,效果非常好。节点通过 cloud-config 指令使用 cloud-init 进行自定义,一切都按宣传的那样运行,除了一个很小但对我们来说非常重要的部分。

基本配置基于根据我们的需求调整的 CentOS7 7.7.1908 VM,该 VM 已转换为模板。在 Rancher 中,我们创建了所谓的“节点模板”,它描述了应分配给已配置节点的各种设置。在这里,我们还提供了前面提到的云配置,它在配置期间作为 .iso 文件安装。现在,我想要实现的是能够将已配置的 VM 名称(例如在 vCenter 中看到的)传递给 cloud-init,以便能够设置静态主机名。

对我们来说这很重要,因为我们根据发送到 DHCP 服务器的主机名请求特定 IP。虽然主机名在稍后的配置阶段由“Rancher Agent”正确设置,但我们已经根据 VM 模板的主机名(可能是 template-centos-7-7-1908)获取了 IP!

我找到了一种解决方法,即在 cloud-init 进程完成五分钟后安排(使用“at”)“dhclient -r; systemctl restart network ...”。这种方法有效,但有一个主要缺点 - 我们最终会得到悬在初始主机名上的“幽灵 IP 分配”,这些分配最终会消失,但如果我们需要重新配置多个节点,我们可能会陷入糟糕的境地!

因此,我希望能够将给定的 VM 名称注入到 cloud-init 进程中,以便我们可以发出“hostnamectl set-hostname $VM_NAME”,其中 $VM_NAME 是注入的变量。是否有任何 VMware 工具/cloud-init 之类的东西可以帮助我实现此目的?在此先行致谢!!!!!!!

更新

上述过程确实解决了工作节点的问题,但并未解决 etcd/控制平面节点的问题。根据我的经验,他们对更改 IP 非常挑剔,但我可能错过了一些东西。

相关内容