使用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

相关推荐

  • 如何升级vCenter(VCSA)补丁?

    VCSA的升级分为repo源和iso镜像两种方式,由于使用repo源进行升级只支持HTTPS和FTPS协议,需要额外搭建环境,略复杂,本文介绍使用iso镜像方式升级。 一、下载补丁: 1、登录VMware官网下载最新的补丁包:(需要注册VMware会员) 下载地址:https://my.vmware.com/cn/group/vmware/patch#sea…

    2023年2月4日
    1.2K00
  • 轻松掌握组件启动之Redis单机、主从、哨兵、集群配置

    Redis安装 下载地址:http://redis.io/download 安装步骤: 1: 安装gcc编译器:yum install gcc 2: 将下载好的redis‐5.0.3.tar.gz文件放置在/usr/local文件夹下,并解压redis‐5.0.3.tar.gz文件 3: 切换到解压后的redis‐5.0.3目录下,完成编译与安装 4: 修改…

    2024年5月11日
    1.2K00
  • Linux实验案例:构建DHCP服务器

    公司要求将闲置的一台Linux主机配置为DHCP服务器,以便为局域网内员工的办公用机提供自动分配IP地址服务,提高网络管理和维护的效率。 需求描述 给局域网内各主机自动分配的IP地址范围为192.168.10.20~192.168.10.30 局域网内各主机使用的默认网关地址为192.168.10.2 局域网内各主机使用的DNS服务器地址分别为202.96.…

    2024年6月24日
    1.6K00
  • Key exchange was not finished, connection is closed.解决办法

    利用java连接Linux服务器中碰到错误:Key exchange was not finished, connection is closed.,导致服务器的连接失败,报错如下 原因 是ssh中的key交换算法不兼容导致 解决办法 修改配置文件 添加如下内容 重启服务

    2023年7月25日
    1.8K00
  • Shell脚本——提取目录名和文件名

    在许多场景下,我们都需要对文件名称或者文件所在的目录进行操作,已达到我们业务目的。通常的操作是由路径中提取文件名,从路径中提取目录名,提取文件后缀等等一系列的操作。 一、${} 1.${var##*/} 2.${var##*.} 3.${var#*.} 4.${var%/*} 5.${var%%.*} 6.总结 其实 ${} 并不是专门为提取文件名或目录名的…

    2024年2月18日
    1.4K00

发表回复

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

在线咨询: QQ交谈

邮件:712342017@qq.com

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

关注微信