使用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月31日 下午4:36
下一篇 2023年2月2日 下午4:26

相关推荐

  • linux 文件挂载配置错误解决办法

    linux中挂载命令经常能够用到,特别是配置开机自动挂载的时候,一不留神就配置错误了,这样造成的后果就是重启过后就会发现系统起不来了!!! 首先进行模拟测试 格式化磁盘 mkfs.ext4 /dev/sdb1 挂载磁盘 mount /dev/sdb1 /mnt 修改配置文件并进行破环 vi /etc/fstab 重启验证后发现不能远程登录,系统进入救援模式!…

    2023年9月27日
    63500
  • 在Linux系统内启动某个服务时提示task: Cannot allocate memory该如何处理?

    问题现象 在ECS实例中启动某个服务进程时,系统提示task: Cannot allocate memory错误,如下图所示。 可能原因 可能是系统进程数超限导致。 Linux内核通过内核配置参数kernel.pid_max限制进程的数量,当运行的服务的总进程数超出kernel.pid_max的值时,再创建新进程时系统会报错task: Cannot allo…

    2023年11月14日
    54000
  • 云服务器上的目录定时同步到Github

    具体操作与脚本 第一 在Github上创建私有仓库这一步相信大家都知道怎么操作 第二 在服务器拉取Github仓库并把.git目录复制到需要同步的目录下假设服务器需要同步的目录为:/usr/share/nginx/html/imgs 第三 编写定时同步脚本具体脚本如下,如脚本位置: /root/script/sync_to_github.sh 第四 通过Li…

    2023年5月15日
    82400
  • Ubuntu 输入正确的密码后,黑屏一闪,重新返回到登陆界面问题解决

    一,问题描述: Ubuntu出现登陆界面后,选择用户名,输入密码,然后登陆画面消失,似乎要进入系统了;但很快,又出现了同样的用户登陆界面,再次选择用户名、输入密码,再次来到这个状态,形成一个死循环。 二,解决办法: 1.若是本地的虚拟机运行的服务: 在登录界面Ctrl+Alt+F1进入命令行界面: 先找到这个文件: /home/user/.xsession-…

    2023年11月29日
    1.3K00
  • 爽了!免费的SSL,还能自动续期!

    兄弟👬🏻,当你手里有不少域名,每个域名又配置子域名,那么ssl将是一笔不小的费用。当然各个云厂商,也都有提供免费的ssl证书,但这里有一个问题,就是基本都不提供免费的泛域名证书(免费20个单域名证书),比如 x.gaga.plus、b.gaga.plus 这就要申请2个域名证书了!并且3个月就过期,一年就折腾这,都能折腾哭😭!那咋办? 像我这样做技术分享的,…

    2024年6月4日
    68100

发表回复

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

在线咨询: QQ交谈

邮件:712342017@qq.com

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

关注微信