16.1.2.2. cloud-init
16.1.2.2.1. 快速
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
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
16.1.2.2.2. 参考
https://documentation.ubuntu.com/lxd/en/stable-5.21/cloud-init/
16.1.2.2.3. 介绍
cloud-init 是一个用于自动初始化和自定义 Linux 发行版实例的工具。
通过在您的实例中添加 cloud-init 配置,您可以指示 cloud-init 在实例第一次启动时执行特定操作。可能的操作包括:
更新和安装软件包
应用特定配置
添加用户
启用服务
运行命令或脚本
自动将虚拟机的文件系统扩展到磁盘大小
备注
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。
16.1.2.2.4. 配置选项
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)
16.1.2.2.4.1. 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 如何合并提供的数据。有关说明,请参阅合并用户数据部分。
16.1.2.2.5. 配置cloud-init
16.1.2.2.5.1. 命令方式
#cloud-config
package_upgrade: true
packages:
- package1
- package2
将上面的yml的内容写入到cloud-init.yml文件中,并使用下面的命令导入:
lxc config set <instance_name> cloud-init.user-data - < cloud-init.yml
16.1.2.2.5.2. API方式
lxc query --request PATCH /1.0/instances/<instance_name> --data '{
"config": {
"cloud-init.user-data": "#cloud-config\npackage_upgrade: true\npackages:\n - package1\n - package2"
}
}'
16.1.2.2.5.3. 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 配置选项。
16.1.2.2.6. 检查cloud-init的状态
cloud-init status
如果结果是 status: running,则表示 cloud-init 仍在运行。如果结果是 status: done,则表示它已经完成。
或者,使用 –wait 标志仅在 cloud-init 完成时收到通知。
16.1.2.2.7. 如何指定用户或供应商数据
user-data 和 vendor-data 配置可用于例如升级或安装软件包、添加用户或运行命令。
提供的值必须在第一行指明传递给 cloud-init 的用户数据格式类型。对于升级软件包或设置用户等活动,#cloud-config 是要使用的数据格式。
配置数据存储在实例根文件系统中的以下文件中:
/var/lib/cloud/instance/cloud-config.txt /var/lib/cloud/instance/user-data.txt
16.1.2.2.8. 如何指定网络配置数据
默认情况下,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)
16.1.2.2.8.1. 例子
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