cloud-init ====================================== 快速 ------------------------------------- .. code-block:: bash vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg network: {config: disabled} #or echo "network: {config: disabled}" > /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg .. code-block:: yaml network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: - 10.196.126.21/24 routes: - to: default via: 10.196.126.1 nameservers: addresses: - 8.8.8.8 - 8.8.4.4 参考 ------------------------------------- https://documentation.ubuntu.com/lxd/en/stable-5.21/cloud-init/ 介绍 ----------------------------------- cloud-init 是一个用于自动初始化和自定义 Linux 发行版实例的工具。 通过在您的实例中添加 cloud-init 配置,您可以指示 cloud-init 在实例第一次启动时执行特定操作。可能的操作包括: * 更新和安装软件包 * 应用特定配置 * 添加用户 * 启用服务 * 运行命令或脚本 * 自动将虚拟机的文件系统扩展到磁盘大小 .. note:: cloud-init 操作仅在实例第一次启动时运行一次。重启实例不会重新触发这些操作。 要使用 cloud-init,您必须基于已安装 cloud-init 的镜像创建实例: 来自 ubuntu 和 ubuntu-daily 镜像服务器的所有镜像都支持 cloud-init。然而,对于 20.04 LTS 之前的 Ubuntu 版本,镜像需要进行特殊处理才能正确集成 cloud-init,以便 lxc exec 可以正常与使用这些镜像的虚拟机配合使用。请参阅 VM cloud-init 文档。 来自 images 远程服务器的镜像有启用 cloud-init 的变体,这些变体通常比默认变体大。cloud 变体使用 /cloud 后缀,例如,images:/edge/cloud。 配置选项 ------------------------------ LXD 支持两种不同的配置选项集来配置 cloud-init:cloud-init.* 和 user.*。您必须使用哪种配置选项集取决于您使用的镜像对 cloud-init 的支持情况。一般来说,较新的镜像支持 cloud-init.* 配置选项,而较旧的镜像支持 user.*。然而,这条规则也可能有例外。 支持以下配置选项: * cloud-init.vendor-data 或 user.vendor-data(参见 Vendor data) * cloud-init.user-data 或 user.user-data(参见 User data formats) * cloud-init.network-config 或 user.network-config(参见 Network configuration) Vendor data and user data ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ vendor-data 和 user-data 都用于向 cloud-init 提供云配置数据。 主要的理念是 vendor-data 用于通用的默认配置,而 user-data 用于实例特定的配置。这意味着您应该在配置文件中指定 vendor-data,而在实例配置中指定 user-data。LXD 不强制执行这种方法,但允许在配置文件和实例配置中同时使用 vendor-data 和 user-data。 如果为一个实例同时提供 vendor-data 和 user-data,cloud-init 会合并这两种配置。然而,如果在两种配置中使用相同的键,合并可能无法进行。在这种情况下,您需要配置 cloud-init 如何合并提供的数据。有关说明,请参阅合并用户数据部分。 配置cloud-init --------------------------------- 命令方式 ^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: yaml #cloud-config package_upgrade: true packages: - package1 - package2 将上面的yml的内容写入到cloud-init.yml文件中,并使用下面的命令导入: .. code-block:: bash lxc config set cloud-init.user-data - < cloud-init.yml API方式 ^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: bash lxc query --request PATCH /1.0/instances/ --data '{ "config": { "cloud-init.user-data": "#cloud-config\npackage_upgrade: true\npackages:\n - package1\n - package2" } }' UI方式 ^^^^^^^^^^^^^^^^^^^^^^^^ Go to the Configuration tab of the instance detail page and select Advanced > Cloud init. Then click Edit instance and override the configuration for one or more of the cloud-init configuration options. 进入实例详情页面的配置选项卡,选择Advanced > Cloud init。然后点击编辑实例,并覆盖一个或多个 cloud-init 配置选项。 检查cloud-init的状态 --------------------------------------------- .. code-block:: bash cloud-init status 如果结果是 status: running,则表示 cloud-init 仍在运行。如果结果是 status: done,则表示它已经完成。 或者,使用 --wait 标志仅在 cloud-init 完成时收到通知。 如何指定用户或供应商数据 -------------------------------------------- user-data 和 vendor-data 配置可用于例如升级或安装软件包、添加用户或运行命令。 提供的值必须在第一行指明传递给 cloud-init 的用户数据格式类型。对于升级软件包或设置用户等活动,#cloud-config 是要使用的数据格式。 配置数据存储在实例根文件系统中的以下文件中: /var/lib/cloud/instance/cloud-config.txt /var/lib/cloud/instance/user-data.txt 如何指定网络配置数据 -------------------------------------------- 默认情况下,cloud-init 在实例的 eth0 接口上配置一个 DHCP 客户端。您可以使用 network-config 选项定义自己的网络配置,以覆盖默认配置(这是由于模板的结构方式)。 然后,cloud-init 根据 Ubuntu 版本使用 ifupdown 或 netplan 在系统上呈现相关的网络配置。 配置数据存储在实例根文件系统中的以下文件中: /var/lib/cloud/seed/nocloud-net/network-config /etc/network/interfaces.d/50-cloud-init.cfg(如果使用 ifupdown) /etc/netplan/50-cloud-init.yaml(如果使用 netplan) 例子 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. code-block:: yaml config: cloud-init.network-config: | version: 1 config: - type: physical name: eth1 subnets: - type: static ipv4: true address: 10.10.101.20 netmask: 255.255.255.0 gateway: 10.10.101.1 control: auto - type: nameserver address: 10.10.10.254