2022年10月28日 星期五

vRealize Automation 8.6 - PART6:如何在 Cloud Assembly 藍圖中使用 Cloud-init 或 Cloudbase-init

vRealize Automation 涵蓋了整個虛擬機的生命週期管理,從使用者的申請、主管的核准、Day 1的部署、Day 2的維運管理,到最後資源的回收再利用,都統合在單一平台上並自動化。前幾篇文章中,透過簡單的 Cloud Assembly 藍圖設計,就可以部署出虛擬機,但這個狀態的虛擬機往往還不能直接提供給使用者使用。管理者還會需要再進行系統的初始化設定和調整 (例如:安裝軟體、設定使用者權限、執行 Script...等)。在 vRealize Cloud Assembly 藍圖設計支援 Cloud-init/Cloudbase-init 指令碼,能夠讓虛擬機部署完成後,也完成了系統初始化配置。本文,將說明如何在 Cloud Assembly 藍圖設計中使用 Cloud-init/Cloudbase-init

Cloud-init & Cloudbase-init

Cloud-init 是一個 Linux 環境初始化套件,能夠幫助管理者初始化系統環境,像是設置 hostname、設置使用者初始密碼以及安裝軟體套件...等;Cloudbase-init 其實是用來做環境初始化的套件,差別只是 Cloudbase-init 是給 Windows 系統使用。更詳細的說明請參考『 Cloud-init Documentation 』和『 Cloudbase-init Documentation 』

套件安裝及相關設定

  • Ubuntu

目前 Ubuntu 我只有使用 Cloud Image 版本有測試成功 (Ubuntu Cloud Images 下載連結),本例使用的版本為 20.04。

下載 .ova 檔案並上傳至 VMware 環境,部署設定會需要先設定一組密碼


部署完成後,Open VM Console 用預設帳號 ubuntu 登入,登入時會要求更改密碼
接著,需要執行以下指令:
    ## Remove netplan file(s)
    sudo rm /etc/netplan/50-cloud-init.yaml

    ## Clear the machine-id
    sudo truncate -s0 /etc/machine-id
    sudo rm /var/lib/dbus/machine-id
    sudo ln -s /etc/machine-id /var/lib/dbus/machine-id

    ## Run cloud-init clean
    sudo Cloud-init clean

  • Windows

安裝 Cloudbase-init 的步驟可以參考『Windows guest initialization with Cloudbase-Init in vCenter』。比較不一樣的地方在,最後一步我沒有勾選 “Run Sysprep”
修改 C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\ 路徑底下的 cloudbase-init.conf,新增以下參數:

first_logon_behaviour=no


metadata_services=cloudbaseinit.metadata.services.ovfservice.OvfService


plugins=cloudbaseinit.plugins.windows.createuser.CreateUserPlugin,cloudbaseinit.plugins.windows.setuserpassword.SetUserPasswordPlugin,cloudbaseinit.plugins.common.sshpublickeys.SetUserSSHPublicKeysPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin 

修改 C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\ 路徑底下的cloudbase-init-unattend.conf,將 metadata_services 改用 OvfService
metadata_services=cloudbaseinit.metadata.services.ovfservice.OvfService
將 Cloudbase-init 服務改成 "停用",搭配 VM Customization Spec 的 Run Once 來啟用服務

  • VM Customization Specifications

建立 VM 客製化回應檔,注意以下幾個部分:

  1. 勾選 “Log in automatically as administrator”
  2. 新增 Run Once 指令,指令如下:

powershell -command "Start-Process cmd -ArgumentList '/c sc config cloudbase-init start= auto && net start cloudbase-init' -Verb runas"

Cloud Assembly 藍圖設計

完成 Template 製作與調整後,接著,在藍圖設計中加入 CloudConfig 語法。本例的藍圖設計可以讓申請者自行輸入帳號與密碼,並加入到 sudo 或 administrators 群組。 

Ubuntu 和 Windows 的語法不同,以下提供兩種 YAML 範例

  • Ubuntu 藍圖 

formatVersion: 1

inputs:

  OS_Image:

    type: string

    title: OS_Image

    enum:

      - Ubuntu2004

  Size:

    type: string

    title: Size

    enum:

      - Small

      - Medium

      - Large

  username:

    type: string

    title: username

  password:

    type: string

    title: password

    encrypted: true

resources:

  Cloud_vSphere_Machine_1:

    type: Cloud.vSphere.Machine

    properties:

      image: '${input.OS_Image}'

      # cpuCount: null

      # totalMemoryMB: null

      name: '${env.deploymentName}'

      flavor: '${input.Size}'

      storage:

        constraints:

          - tag: 'ds:esxi01'

      networks:

        - network: '${resource.Cloud_vSphere_Network_1.id}'

          assignment: static

      constraints:

        - tag: 'cluster:NBD'

      cloudConfig: |

        #cloud-config

        users:

         - name: '${input.username}'

           sudo: 'ALL=(ALL) NOPASSWD:ALL'

           groups: sudo

           shell: /bin/bash

        runcmd:

          - USER='${input.username}'

          - PASS='${input.password}'

          - echo $USER:$PASS | /usr/sbin/chpasswd

  Cloud_vSphere_Network_1:

    type: Cloud.vSphere.Network

    properties:

      networkType: existing

      constraints:

        - tag: 'net:vRA-PG'

  •  Windows 藍圖

formatVersion: 1

inputs:

  username:

    type: string

    title: username

  userpasswd:

    type: string

    encrypted: true

    title: password

resources:

  Cloud_vSphere_Machine_1:

    type: Cloud.vSphere.Machine

    properties:

      image: WS2019

      name: '${env.deploymentName}'

      customizationSpec: WinSrv sysprep

      flavor: Small

      storage:

        constraints:

          - tag: 'ds:esxi01'

      networks:

        - network: '${resource.Cloud_vSphere_Network_1.id}'

          assignment: static

      constraints:

        - tag: 'cluster:NBD'

      remoteAccess:

        authentication: usernamePassword

        username: 'administrator'

        password: 'VMware1!'

      cloudConfig: |

        #cloud-config

        users:

          -

            name: '${input.username}'

            passwd: '${input.userpasswd}'

            primary_group: user

            groups: administrators

        write_files:

          - encoding: b64

            content: demo test

            path: 'C:\config.txt'

  Cloud_vSphere_Network_1:

    type: Cloud.vSphere.Network

    properties:

      networkType: existing

      constraints:

        - tag: 'net:vRA-PG'

參考連結

all-the-ways-to-windows-server

vSphere Customization with Cloud-init While Using vRealize Automation 8 or Cloud

Making a custom Ubuntu 20.04 LTS (Focal Fossa) VM template that works with cloud-init

沒有留言:

張貼留言