使用者資料

建立 IBM Cloud® Virtual Servers for Virtual Private Cloud 實例時,可以指定用於自動執行常見配置作業或執行 Script 的選用使用者資料。 如需使用者資料及使用者名稱的相關資訊,請參閱 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 KB。

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 Script 範例顯示 Linux 使用者可以如何為現行使用者新增 SSH 金鑰。

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

您可以將這些範例的其中一個直接貼到使用者資料欄位中。 然後,使用者資料在佈建期間可供虛擬伺服器實例使用。

如果您指定包含檔案,但檔案名稱前有空格,資料就無法正確詮釋。 確認 #!/bin/sh#!/bin/bash 是緊接檔案結束指定 (<<EOF) 之後一行的第一個字元。這些字元不能縮進。

如需更多 Linux 使用者資料範例和資訊,請參閱 雲端設定範例)

使用 cloud-config Script 來配置單一磁碟實例儲存體

實例儲存空間是 VPC 的一項特性,您可以在其中要求連接快速本端儲存空間的虛擬伺服器實例。 如需實例儲存空間的相關資訊,請參閱 關於實例儲存空間

依預設,當您佈建具有實例儲存空間的虛擬伺服器實例,然後第一次登入該伺服器時,未配置實例儲存空間磁碟。 它們會顯示為區塊裝置 (例如 /dev/vdb),您需要先完成下列動作,才能將它們與檔案系統搭配使用:

  • 分割裝置。
  • 使用檔案系統來格式化分割區。
  • 裝載檔案系統。

當您使用 使用者資料 欄位來佈建虛擬實例時,也可以自動執行這些活動。 cloud-config Script 定義下列動作:

  • 指示雲初始化程序在虛擬實體首次開機時執行。
  • 自動分割裝置。
  • 使用 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" ]

此 Script 會配置 /dev/vdb,,虛擬實例上第一個具有 virtio_blk 介面類型的實例儲存裝置。 此 Script 可以貼到 使用者資料 欄位中,或使用使用者介面上的「匯入使用者資料」鏈結來匯入。

此 Script 已使用 Ubuntu 20.04 LTS Focal Fossa 的庫存影像進行測試。 雖然 Script 可能適用於其他 Linux 庫存及自訂映像檔,但可能需要調整 Script。

cloud-config Script 不適用於 Windows 虛擬伺服器。 如果您的實例不包含實例儲存空間,請不要使用此 Script。 它可能會配置非預期的裝置。

請參閱以下有關 cloud-config 指令碼中的項目資訊:

  • disk_setup: 使用主要開機記錄來建立跨越整個磁碟的單一預設分割區。 如果裝置已分割,則 "overwrite: false" 會導致跳過此作業。
  • fs_setup: 在 vdb 區塊裝置的第一個分割區上建立 ext4 檔案系統,並提供標籤 “inststg1”。 您可以調整檔案系統類型和標籤,以符合您的需求。 如果分割區已使用檔案系統格式化,則 "overwrite: false" 設定會阻止格式化分割區。
  • runcmd: 建立目錄,以用作階層式上層檔案系統中的裝載點 off ' /'。
  • mounts: 將檔案系統裝置裝載至 /inststg1。 您可以在這裡及 runcmd 下重新命名目錄路徑。
  • mount_default_fields: 在 /etc/fstab 檔案中建立永久裝載指引。 如果您發出重新開機指令,則虛擬伺服器會在仍裝載實例儲存體檔案系統的情況下回復。

CLI 和 API 也支援使用者資料欄位。

此 cloud-config Script 範例會自動配置實例儲存體 /dev/vdb 區塊裝置。 如果您只重新啟動虛擬伺服器,此組態會繼續運作,因為組態和資料會持續存在。 但是,如果啟動先前已停止的虛擬伺服器,則虛擬伺服器啟動時就會有一組全新的實體儲存磁碟。 此狀況將需要手動重新執行 cloud-init 步驟。 預設情況下,cloud-config script 只會在第一次開機時執行。 您也可以編輯 cloud.config 檔案的 cloud-init 區段,以便在每次開機時自動執行 cloud-init 步驟。 如需步驟,請參閱 cloud.config 檔案的 編輯 cloud_cloud_init_modules 區段以在每一個開機上執行 區段。

使用 cloud-config 指令碼配置雙磁碟實例儲存空間

下列範例顯示自動配置實例儲存空間磁碟的使用者資料。 此範例可以與指定兩個磁碟的實例設定檔搭配使用。

#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" ]

此雲端配置 Script 範例會自動配置實例儲存體 /dev/vdbdev/vdc 區塊裝置,並採用實例儲存體的 virtio_blk 介面類型。 如果僅重新啟動虛擬伺服器,此組態會繼續運作,因為組態和資料會持續存在。

如果啟動已停止的虛擬伺服器,則虛擬伺服器啟動時就會有一組全新的實體儲存磁碟。 此狀況需要手動重新執行 cloud-init 步驟。 預設情況下,cloud-config script 只會在第一次開機時執行。 您也可以編輯 cloud.config 檔案的 cloud-init 區段,以便在每次開機時自動執行 cloud-init 步驟。

編輯 cloud.config 檔案的 cloud_cloud_init_modules 區段,以在每一次開機時執行

前一個範例中的 cloud-config Script 會自動配置實例儲存體 /dev/vdb 區塊裝置。 如果您只重新啟動虛擬伺服器,此組態會繼續運作,因為組態和資料會持續存在。 但是,如果啟動已停止的虛擬伺服器,則虛擬伺服器啟動時就會有一組全新的實例儲存磁碟。 此狀況需要手動重新執行 cloud-init 步驟。 預設情況下,cloud-config script 只會在第一次開機時執行。

  • 您需要一個已佈建的實例,其中的使用者資料欄位指定上一個範例中的 cloud-init yaml 資料。
  • 登入已啟動的實例時,檔案系統必須已設定和掛載。
  • 您在 cloud-config yaml 的 disk_setup 或 mount 部分中沒有其他指定為使用者資料的指令。

若要在每次連續啟動時執行 cloud-config 指令碼,請使用下列程序:

  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 OS 的使用者資料範例

下列範例顯示可傳遞至 Fedora Core OS 實例的使用者資料。

依預設,在 Fedora Core OS 中已停用使用者登入 'root'。 使用者登入 'core' 可用來登入 Fedora Core OS 實例。

Fedora Core OS 使用者資料必須是 ignition 格式。

使用下列範例來啟動 Fedora Core OS 實例

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

使用下列範例來建立本端使用者。

  1. 以 YAML 格式撰寫 Butane 配置。

    丁烷配置

    variant: fcos
    version: 1.4.0
    passwd:
      users:
        - name: demouser
    
  2. 使用丁烷將 Butane 配置轉換為 Ignition 配置。

    Ignition 配置

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

使用下列使用者資料範例為本機使用者新增 SSH 金鑰。

  1. 以 YAML 格式撰寫 Butane 配置。

    丁烷配置

    variant: fcos
    version: 1.4.0
    passwd:
      users:
        - name: demouser
          ssh_authorized_keys:
            - <ssh public key>
    
  2. 使用丁烷將 Butane 配置轉換為 Ignition 配置。

    Ignition 配置

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

如需其他 Fedora 核心作業系統使用者資料範例及資訊,請參閱 Fedora 專案文件

下一步

選擇設定檔之後,即可規劃並建立實例。