IBM Cloud Docs
用户数据

用户数据

创建 IBM Cloud® Virtual Servers for Virtual Private Cloud 实例时,可以指定用于自动执行常见配置任务或运行脚本的可选用户数据。 有关用户数据和用户名的更多信息,请参阅 IAM 访问权

IBM Cloud VPC 使用Cloud-init技术配置虚拟服务器实例。 VPC 的新虚拟服务器 页面上的 用户数据 字段允许用户使用 cloud-init 来放入定制配置选项。 Cloud-init 支持多种配置数据格式,包括 cloud-config 文件中的 yaml。

您可以直接在用户数据字段中指定云配置数据,也可以将云配置数据包含在文本文件中,并在创建实例时指定文件名。 例如,如果将 cloud-config 数据保存在 userdata.blob 中,请在使用 CLI 创建实例时指定 -user-data @userdata.blob

使用 IBM Hyper Protect Container Runtime 映像创建虚拟服务器实例时,必须将合同作为 用户数据 字段的一部分传递。 由于映像是禁用了 SSH 访问的锁定映像,因此与实例交互的唯一方法是传递合同。

用户数据 字段 (或文件) 的大小限制为 64 K 字节。

Linux 的用户数据示例

Linux 的默认用户账户取决于操作系统。 要查看操作系统列表及其对应的默认用户账户,请参阅 连接到 Linux 实例:确定默认用户账户

添加用户和 SSH 密钥

以下 cloud-init 示例显示了 Linux 用户可以如何添加用户,并向用户提供授权的 SSH 密钥。 Name 字段包含添加到 ~/.ssh/authorized_keys 的公钥。

对于 Linux 映像,仅当操作系统的 SSH 服务器支持此密钥类型时,才能使用 Ed25519 SSH 密钥类型。 有关更多信息,请参阅 SSH 密钥入门

#cloud-config
users:
  - name: demouser
    gecos: Demo User
    sudo: ALL=(ALL) NOPASSWD:ALL
    groups: users, admin
    ssh_import_id: None
    lock_passwd: true
    ssh_authorized_keys:
        - <ssh public key>

以下 shell 脚本示例显示了 Linux 用户可以如何为当前用户添加 SSH 密钥。

#!/bin/bash
echo <sshKey> > ~/.ssh/authorized_keys

可以将其中一个示例直接粘贴到用户数据字段中。 然后,在供应期间,用户数据可用于虚拟服务器实例。

如果您指定包含一个文件,且文件名前面有空格,则数据无法正确解析。 请确认 #!/bin/sh#!/bin/bash 是紧接文件名称(<<EOF )结尾后的第一行字符。字符不能缩进。

更多 Linux 用户数据示例和信息,请参阅 云配置示例)

使用 cloud-config 脚本配置单个磁盘实例存储器

实例存储器是 VPC 的一项功能,您可以在其中请求连接了快速本地存储器的虚拟服务器实例。 有关实例存储器的更多信息,请参阅 关于实例存储器

缺省情况下,当您使用实例存储器供应虚拟服务器实例,然后首次登录到该服务器时,不会配置实例存储磁盘。 它们显示为块设备 (例如,/dev/vdb),需要先完成以下操作,然后才能将它们用于文件系统:

  • 对设备进行分区。
  • 使用文件系统格式化分区。
  • 安装文件系统。

当您使用 用户数据 字段来供应虚拟实例时,也可以自动执行这些活动。 cloud-config 脚本定义以下操作:

  • 指示在虚拟实例首次启动时运行云初始化过程。
  • 自动对设备进行分区。
  • 使用 ext4 文件系统格式化分区。
  • 安装文件系统。

请勿指定 用户数据 字段以自动配置不属于虚拟实例定义的实例存储磁盘。 尝试自动配置不属于虚拟实例定义的实例存储磁盘将以 dev/vdb device 为目标,并且可能指向 cloud-init 数据源,这将损坏 cloud-init 配置 (例如主机名和 SSH 密钥)。

以下示例显示自动配置实例存储磁盘的用户数据。 此示例可与指定单个磁盘的实例概要文件配合使用。

#cloud-config
# Cloud-init supports simple partition and file system config.
# This user data yaml will create a full partition on the first
# virtio_blk device after the boot device, initialize ext4 on it and
# mount it on a folder matching the label.
#
disk_setup:
  /dev/vdb:
    table_type: 'mbr'
    layout:
    - 100
    overwrite: false

fs_setup:
  - label: /mnt/inststg1
    filesystem: 'ext4'
    device: /dev/vdb1
    overwrite: false

runcmd:
  - [ mkdir, /mnt/inststg1 ]

mounts:
  - ["/dev/vdb1", "/mnt/inststg1"]

mount_default_fields: [ None, None, "auto", "defaults,nofail", "0", "2" ]

此脚本使用虚拟实例上可用的 virtio_blk 接口类型配置第一个实例存储设备 /dev/vdb,。 可以将此脚本粘贴到 用户数据 字段中,也可以使用 UI 上的“导入用户数据”链接来导入此脚本。

此脚本已使用 Ubuntu 20.04 LTS Focal Fossa 的库存映像进行测试。 虽然该脚本可能适用于其他 Linux 常用映像和定制映像,但可能需要对该脚本进行调整。

cloud-config 脚本不适用于 Windows 虚拟服务器。 如果实例不包含实例存储器,请勿使用此脚本。 它可能会配置意外的设备。

查看以下有关云配置脚本中项目的信息:

  • disk_setup: 使用主引导记录创建跨整个磁盘的单个缺省分区。 如果设备已分区,那么 "overwrite: false" 会导致跳过此操作。
  • fs_setup: 在 vdb 块设备的第一个分区上创建 ext4 文件系统,并为其提供标签 “inststg1”。 您可以调整文件系统类型和标签以满足您的需求。 如果已使用文件系统对分区进行格式化,那么 "overwrite: false" 设置将阻止对该分区进行格式化。
  • runcmd: 在分层父文件系统中创建要用作安装点 "/" 的目录。
  • mounts: 在 /inststg1上执行文件系统设备的安装。 您可以在此处和 runcmd 下重命名目录路径。
  • mount_default_fields: 在 /etc/fstab 文件中创建永久 mount 伪指令。 如果发出 reboot 命令,那么虚拟服务器将在实例存储文件系统仍已安装的情况下进行备份。

CLI和API还支持用户数据字段

此 cloud-config 脚本示例自动配置实例存储器 /dev/vdb 块设备。 如果仅重启虚拟服务器,此配置将继续工作,因为配置和数据会保留。 但是,如果您启动之前已停止的虚拟服务器,则该虚拟服务器在启动时会有新的实例存储磁盘。 此情境需要手动重新运行 cloud-init 步骤。 默认情况下,云配置脚本仅在首次启动时运行。 您还可以编辑 cloud.config 文件的 cloud-init 部分,以便在每次引导时自动运行 cloud-init 步骤。 有关步骤,请参阅 编辑 cloud.config 文件的 cloud_cloud_init_modules 部分以在每次引导时运行 部分。

使用云配置脚本配置双磁盘实例存储

以下示例显示自动配置实例存储磁盘的用户数据。 此示例可与指定两个磁盘的实例概要文件配合使用。

#cloud-config
# Cloud-init supports simple partition and file system config.
# This user data yaml will create a full partition on the first two
# virtio_blk devices after the boot device, initialize ext4 on them and
# mount them on new folders off of ‘/mnt/’.
#
disk_setup:
  /dev/vdb:
    table_type: 'mbr'
    layout:
    - 100
    overwrite: false
  /dev/vdc:
    table_type: 'mbr'
    layout:
    - 100
    overwrite: false

fs_setup:
  - label: /mnt/inststg1
    filesystem: 'ext4'
    device: /dev/vdb1
    overwrite: false
  - label: /mnt/inststg2
    filesystem: 'ext4'
    device: /dev/vdc1
    overwrite: false

runcmd:
  - [ mkdir, /mnt/inststg1 ]
  - [ mkdir, /mnt/inststg2 ]

mounts:
  - ["/dev/vdb1", "/mnt/inststg1"]
  - ["/dev/vdc1", "/mnt/inststg2"]

mount_default_fields: [ None, None, "auto", "defaults,nofail", "0", "2" ]

此 cloud-config 脚本示例自动配置实例存储器 /dev/vdbdev/vdc 块设备,并采用实例存储器的 virtio_blk 接口类型。 如果仅重启虚拟服务器,此配置将继续工作,因为配置和数据会保留。

如果您启动一个已停止的虚拟服务器,则该虚拟服务器在启动时会有新的实例存储磁盘。 此情境要求再次手动运行 cloud-init 步骤。 默认情况下,云配置脚本仅在首次启动时运行。 您还可以编辑 cloud.config 文件的 cloud-init 部分,以便在每次引导时自动运行 cloud-init 步骤。

编辑 cloud.config 文件的 cloud_cloud_init_modules 部分以在每次引导时运行

上一个示例中的 cloud-config 脚本会自动配置实例存储器 /dev/vdb 块设备。 如果仅重启虚拟服务器,此配置将继续工作,因为配置和数据会保留。 但是,如果您启动一个已停止的虚拟服务器,那么该虚拟服务器在启动时会有新的实例存储磁盘。 此情境要求再次手动运行 cloud-init 步骤。 默认情况下,云配置脚本仅在首次启动时运行。

  • 您需要一个预置实例,其中包含一个用户数据字段,用于指定上例中的cloud-init yaml数据。
  • 当您登录到已启动的实例时,必须配置并挂载文件系统。
  • 在cloud-config yaml的disk_setup或mount部分中,没有其他指定为用户数据的指令。

要在每次启动时运行云配置脚本,请按以下步骤操作:

  1. 编辑 etc/cloud/cloud.cfg 文件。

  2. 查看 cloud_init_modules 部分——其中包含disk_setup和mount模块。

  3. 将 disk_setup 和安装模块行更改为 always。 该部分看起来是这样的

    # The modules that run in the 'init' stage
    cloud_init_modules:
    - migrator
    - seed_random
    - bootcmd
    - write-files
    - growpart
    - resizefs
    - [disk_setup, always]
    - [mounts, always]
    - set_hostname
    - update_hostname
    - update_etc_hosts
    - ca-certs
    - rsyslog
    - users-groups
    - ssh
    
  4. 保存文件,然后停止并启动实例。 您的安装将自动创建到新分区和格式化的文件系统。

Windows 的用户数据示例

下面的示例显示了可传递给 Windows 实例的用户数据。 此用户数据样本用于设置时区。

"user_data": "Content-Type: multipart/mixed; boundary=MIMEBOUNDARY\nMIME-Version: 1.0\n\n--MIMEBOUNDARY\nContent-Type: text/cloud-config; charset=\"us-ascii\"\nMIME-Version: 1.0\nContent-Transfer-Encoding: 7bit\nContent-Disposition: attachment; filename=\"cloud-config\"\n#cloud-config\n\nset_timezone: America/Detroit\n\n--MIMEBOUNDARY--\n"

有关更多 Windows 用户数据示例和信息,请参阅 Cloudbase-init 1.0 文档

Fedora Core 操作系统的用户数据示例

以下示例显示了可以传递到 Fedora Core 操作系统实例的用户数据。

缺省情况下,在 Fedora Core 操作系统中已禁用用户登录 "root"。 用户登录 "core" 可用于登录到 Fedora Core 操作系统实例。

Fedora Core 操作系统用户数据必须采用点火格式。

使用以下示例来引导 Fedora Core 操作系统实例

ibmcloud is instance-create $NAME $VPC $ZONE $PROFILE $SUBNET --image-id $IMAGE --key-ids $SSHKEY --user-data @example.ign

使用以下示例来创建本地用户。

  1. 以 YAML 格式编写 Butane 配置。

    Butane 配置

    variant: fcos
    version: 1.4.0
    passwd:
      users:
        - name: demouser
    
  2. 使用 Butane 将 Butane 配置转换为 Ignition 配置。

    点火配置

    
    "ignition": {
        "version": "1.4.0"
      },
      "passwd": {
        "users": [
          {
            "name": "demouser"
          }
        ]
      }
    }
    

使用以下示例用户数据为本地用户添加 SSH 密钥。

  1. 以 YAML 格式编写 Butane 配置。

    Butane 配置

    variant: fcos
    version: 1.4.0
    passwd:
      users:
        - name: demouser
          ssh_authorized_keys:
            - <ssh public key>
    
  2. 使用 Butane 将 Butane 配置转换为 Ignition 配置。

    点火配置

    
      "ignition": {
        "version": "1.4.0"
      },
      "passwd": {
        "users": [
          {
            "name": "demouser",
            "sshAuthorizedKeys": [
              "<ssh public key>"
            ]
          }
        ]
      }
    }
    

有关更多 Fedora Core 操作系统用户数据示例和信息,请参阅 Fedora 项目文档

后续步骤

选择概要文件后,该是规划和创建实例的时候了。