使用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 命令行连接远程 Windows 系统

    安装 xfreerdp 在使用 xfreerdp 之前,您需要安装它。在大多数 Linux 发行版中,您可以使用包管理器来执行此操作。 在 Ubuntu / Debian 和 Linux Mint 上,运行以下命令 基于 RHEL 的发行版,如 Rocky Linux、AlmaLinux 和 Fedora,运行以下命令 使用 xfreerdp 远程连接 Wi…

    2023年9月20日
    18100
  • zabbix用户密码忘记并找回

    解决方案: 1、登陆zabbix服务器,连接到mysql数据库 [root@localhost ~]# mysql -uroot -p     // -u 后面加用户名,-p 回车,输入数据库密码Enter password:   2、进入mysql数据库以后查询users表 MariaDB [(none)]> …

    2023年2月25日
    89700
  • K8S集群搭建高可用prometheus+grafana

    使用k3s来搭建测试环境。 为什么使用k3s K3s 是一个轻量级的、完全兼容的 Kubernetes 发行版本。非常适合测试。 K3s将所有 Kubernetes 控制平面组件都封装在单个二进制文件和进程中,文件大小<100M,占用资源更小,且包含了kubernetes运行所需要的部分外部依赖和本地存储提供程序。 K3s提供了离线安装包,安装起来非常…

    2022年11月22日
    47300
  • Centos7.6下宝塔安装及资产管理系统部署

    一:宝塔安装 1、连接linux服务器 2、执行命令开始安装 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec 安装成功出现下方界面 3、访问外网地址…

    2022年6月8日
    2.1K90
  • Rocky Linux 9 配置静态ip

    almalinux9.x 放弃了 老的网络配置方式。 先备份默认配置文件 ens33.nmconnection 然后修改内容 重启网络 远程修改一定要成对出现 否则网络起不来 查看ip 重新加载网卡

    2023年4月4日
    26500

发表回复

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

在线咨询: QQ交谈

邮件:712342017@qq.com

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

关注微信