使用cloud-init新建虚拟机后重启系统网络IP地址丢失

cloud-init 是 Linux 平台的⼀个开源⼯具,可以为云平台的 Linux 虚拟机完成⼀系列系统初始化配置。作为⼀个⾮常驻服务,开机启动时执⾏后⽴即退出,不会监听任何端⼝。

环境

  • Red Hat OpenStack
  • cloud-init
  • SmartX

问题

  • cloud-init在新建虚拟机时修改网络配置后引发异常
  • SmartX在使用cloud-init模板部署虚拟机时新增网卡后,创建的虚拟机在配置Ip地址后,重启虚拟机IP地址会被重置为dhcp。
  • RedHat OpenStack相关报错如下:
util.py[DEBUG]: Reading from /sys/class/net/ens3/type (quiet=False)
util.py[DEBUG]: Read 2 bytes from /sys/class/net/ens3/type
util.py[WARNING]: failed stage init
util.py[DEBUG]: failed stage init
Traceback (most recent call last):
File "/usr/lib/python3.6/site-packages/cloudinit/cmd/main.py", line 653, in status_wrapper
ret = functor(name, args)
File "/usr/lib/python3.6/site-packages/cloudinit/cmd/main.py", line 362, in main_init
init.apply_network_config(bring_up=bool(mode != sources.DSMODE_LOCAL))
File "/usr/lib/python3.6/site-packages/cloudinit/stages.py", line 681, in apply_network_config
netcfg, src = self._find_networking_config()
File "/usr/lib/python3.6/site-packages/cloudinit/stages.py", line 646, in _find_networking_config
if self.datasource and hasattr(self.datasource, 'network_config'):
File "/usr/lib/python3.6/site-packages/cloudinit/sources/DataSourceConfigDrive.py", line 152, in network_config
self.network_json, known_macs=self.known_macs)
File "/usr/lib/python3.6/site-packages/cloudinit/sources/helpers/openstack.py", line 683, in convert_net_json
raise ValueError("Unable to find a system nic for %s" % d)
ValueError: Unable to find a system nic for {'type': 'physical', 'mtu': 1500, 'subnets': [{'type': 'dhcp4'}], 'mac_address': ''}
atomic_helper.py[DEBUG]: Atomically writing to file /var/lib/cloud/data/status.json (via temporary file /var/lib/cloud/data/tmpm9hc8a2w) - w: [644] 790 bytes/chars
util.py[DEBUG]: Reading from /proc/uptime (quiet=False)
util.py[DEBUG]: Read 13 bytes from /proc/uptime
util.py[DEBUG]: cloud-init mode 'init' took 0.124 seconds

解决方案

如果在firstboot部分之后不使用cloud init服务,解决此问题的方法是禁用并停止cloud init服务。在第一个引导步骤之后,禁用cloud init服务。

# systemctl stop cloud-init
# systemctl disable cloud-init
#systemctl mask cloud-init

原因

Cloudinit通过UserData获得了网络配置,并在firstboot时配置网络以进行设置。虽然第一次引导后不需要服务,但该服务在firstboot之后启用并运行。当Cloudinit检测到新接口时,它会在现有配置中搜索定义的NIC。然后当CloudInit找不到NIC时,它抛出异常。

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/6908

(0)
郭靖的头像郭靖
上一篇 2023年1月20日 下午2:50
下一篇 2023年2月4日 下午1:32

相关推荐

  • 安装 Smem – Linux工具 安装条件: 现代内核 (版本号高于 2.6.27) 较新的 Python 版本 (2.4 及以后版本) 可选的 matplotlib 库用于生成图表 对于当今的大多数的 Linux 发行版而言,内核版本和 Python 的版本都能够满足需要,所以仅需要为生成良好的图表安装 matplotlib 库。 RHEL,…

    2023年8月25日
    1.7K00
  • 在Linux中执行yum命令失败,提示“HTTP Error 404 -Not Found Trying other mirror”错误怎么办?

    问题描述 在Linux系统的ECS实例中执行yum命令(如yum -y install XXX、yum list、yum search XXX等)失败,出现类似如下错误信息。 问题原因 出现该问题可能有以下原因: 解决方案 切换CentOS 6/8的源地址 CentOS 6与CentOS 8操作系统版本结束了生命周期(EOL),Linux社区已不再维护该操作…

    2023年11月28日
    1.2K00
  • nginx使用htpasswd实现站点账密登录

    一:介绍 在Web应用程序的开发中,安全性是一项至关重要的任务。当用户需要访问敏感信息或执行特定操作时,需要使用账号和密码进行身份验证,htpasswd是Apache HTTP服务器下的一款用于HTTP用户basic认证工具,可用来建立和更新存储用户名、密码,同时生产用于 http 基本认证的工具 二:htpasswd安装 三:htpasswd配置密码 该命…

    2024年6月3日
    1.5K00
  • 解决Ubuntu DNS覆盖写入127.0.0.53

    问题: ubuntu22.04解析网址时报错如图所示: 因为/etc/resolve.conf中存在 nameserver 127.0.0.53回环地址造成循环引用 原因: ubuntu17.0之后特有,systemd-resolvd服务会一直覆盖 解决方法: 1、修改resolv.config文件中的nameserver(选做),修改完后DNS解析就能恢复…

    2022年12月1日
    4.3K00
  • 如何在 Ubuntu 20.04 上使用 UFW 来设置防火墙

    防火墙是一个用来监视和过滤进出网络流量的工具。它通过定义一系列安全规则,来决定是否允许或者屏蔽指定的流量。 Ubuntu 自带的防火墙配置工具被称为 UFW (Uncomplicated Firewall)。UFW 是一个用来管理 iptables 防火墙规则的用户友好的前端工具。它的主要目的就是为了使得管理 iptables 更简单,就像名字所说的,简单的…

    2023年3月17日
    2.6K00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信