第 4 章 配置 cloud-init

本章包含 cloud-init 最常见的配置任务示例。

您的 cloud-init 配置可能需要在 cloud.cfg 文件和 cloud.cfg.d 目录中添加指令。或者,您的具体数据源可能需要您在文件中添加指令,如用户数据文件和元数据文件。数据源可能需要将您的指令上传到 HTTP 服务器。检查您的数据源要求并相应地添加指令。

4.1. 为 NoCloud 数据源创建包含 cloud-init 的虚拟机

要创建一个包含 cloud-init 的新虚拟机(VM),请参阅以下流程。在此过程中,您可以创建一个 meta-datauser-data 文件。

  • 您的 meta-data 文件包括了实例的详细信息。
  • 您的 user-data 文件包含用于创建用户和授予访问权限的信息。

然后,您将这些文件包含在新 ISO 镜像中,并将 ISO 文件附加到您从 KVM 客户机镜像创建的新虚拟机。在这种情况下,数据源是 NoCloud。

流程

  1. 创建名为 cloudinitiso 的目录并移动到其中。

    $ mkdir cloudinitiso
    $ cd cloudinitiso
  2. 创建名为 meta-data 的文件。在该文件中添加以下信息。

    instance-id: citest
    local-hostname: citest-1
  3. 创建名为 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 公钥。在尝试这个示例步骤时,请将该行修改为包含您的一个公钥。

  4. 使用 genisoimage 命令创建包含 user-datameta-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)
  5. 从红帽客户门户下载 KVM 客户机镜像到 /var/lib/libvirt/images 目录。
  6. 使用 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
  7. 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 目录布局包含更多信息。

注意

对于 OpenStack,创建和管理实例 包含有关使用 cloud-init 配置实例的信息。请参阅为特定流程 创建自定义实例