第 4 章 配置 cloud-init
本章包含 cloud-init
最常见的配置任务示例。
您的 cloud-init
配置可能需要在 cloud.cfg
文件和 cloud.cfg.d
目录中添加指令。或者,您的具体数据源可能需要您在文件中添加指令,如用户数据文件和元数据文件。数据源可能需要将您的指令上传到 HTTP 服务器。检查您的数据源要求并相应地添加指令。
4.1. 为 NoCloud 数据源创建包含 cloud-init 的虚拟机
要创建一个包含 cloud-init
的新虚拟机(VM),请参阅以下流程。在此过程中,您可以创建一个 meta-data
和 user-data
文件。
-
您的
meta-data
文件包括了实例的详细信息。 -
您的
user-data
文件包含用于创建用户和授予访问权限的信息。
然后,您将这些文件包含在新 ISO 镜像中,并将 ISO 文件附加到您从 KVM 客户机镜像创建的新虚拟机。在这种情况下,数据源是 NoCloud。
流程
创建名为
cloudinitiso
的目录并移动到其中。$ mkdir cloudinitiso $ cd cloudinitiso
创建名为
meta-data
的文件。在该文件中添加以下信息。instance-id: citest local-hostname: citest-1
创建名为
user-data
的文件。在该文件中包含以下信息。#cloud-config password: cilogon chpasswd: {expire: False} ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AAA...fhHQ== sample@redhat.com
注意user-data
文件的最后一行引用 SSH 公钥。在~/.ssh/id_rsa.pub
中查找您的 SSH 公钥。在尝试这个示例步骤时,请将该行修改为包含您的一个公钥。使用
genisoimage
命令创建包含user-data
和meta-data
的 ISO 镜像。# genisoimage -output ciiso.iso -volid cidata -joliet -rock user-data meta-data I: -input-charset not specified, using utf-8 (detected in locale settings) Total translation table size: 0 Total rockridge attributes bytes: 331 Total directory bytes: 0 Path table size(bytes): 10 Max brk space used 0 183 extents written (0 MB)
-
从红帽客户门户下载 KVM 客户机镜像到
/var/lib/libvirt/images
目录。 使用
virt-install
命令从 KVM 客户机镜像创建新虚拟机。包含您创建的 ISO 镜像作为镜像的附件。virt-install \ --memory 4096 \ --vcpus 4 \ --name mytestcivm \ --disk /var/lib/libvirt/images/rhel-8.1-x86_64-kvm.qcow2,device=disk,bus=virtio,format=qcow2 \ --disk /home/sample/cloudinitiso/ciiso.iso,device=cdrom \ --os-type Linux \ --os-variant rhel8.0 \ --virt-type kvm \ --graphics none \ --import
以
cloud-user
用户身份登录您的镜像。您的密码为cion
。citest-1 login: cloud-user Password: [cloud-user@citest-1 ~]$
验证
检查
cloud-init
状态,以查看它已完成的任务。[cloud-user@citest-1 instance]$ cloud-init status status: done
当
cloud-init
在/var/lib/cloud
下创建cloud-init
目录布局,它会根据指定的指令更新或更改某些目录内容。例如,您可以通过检查数据源文件来确认数据源为
NoCloud
。$ cd /var/lib/cloud/instance $ cat datasource DataSourceNoCloud: DataSourceNoCloud [seed=/dev/sr0][dsmode=net]
cloud-init
将 user-data 复制到/var/lib/cloud/instance/user-data.txt
。$cat user-data.txt #cloud-config password: cilogon chpasswd: {expire: False} ssh_pwauth: True ssh_authorized_keys: - ssh-rsa AAA...fhHQ== sample@redhat.com
这些是示例。
cloud-init
目录布局包含更多信息。
其它资源