附註:

使用 Oracle Linux Automation Manager 管理 KVM 虛擬機器

簡介

community.libvirt 集合提供 Ansible libvirt 社群支援的 libvirt 模組和外掛程式。這些模組與外掛程式有助於使用 libvirt API 管理虛擬機器 (VM) 和容器。

目標

在本教學課程中,您將瞭解如何:

必要條件

注意:如需有關安裝 Oracle Linux Automation Manager 或 KVM 的詳細資訊,請參閱此實驗室結尾的連結。

部署 Oracle Linux Automation Manager

注意:如果在您自己的租用戶中執行,請先閱讀 linux-virt-labs GitHub 專案 README.md 並完成先決條件,再部署實驗室環境。

  1. 在 Luna 桌面上開啟終端機。

  2. 複製 linux-virt-labs GitHub 專案。

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. 變更至工作目錄。

    cd linux-virt-labs/olam
    
  4. 安裝所需的集合。

    ansible-galaxy collection install -r requirements.yml
    
  5. 更新 Oracle Linux 執行處理組態。

    cat << EOF | tee instances.yml > /dev/null
    compute_instances:
      1:
        instance_name: "olam-node"
        type: "control"
      2:
        instance_name: "git-server"
        type: "server"
      3:
        instance_name: "kvm-server"
        type: "server"
    passwordless_ssh: true
    use_git: true
    use_kvm: true
    EOF
    
  6. 部署實驗室環境。

    ansible-playbook create_instance.yml -e ansible_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
    

    免費實驗室環境需要額外的變數 ansible_python_interpreter,因為它會安裝適用於 Oracle Cloud Infrastructure SDK for Python 的 RPM 套裝程式。此套裝軟體的安裝位置在 python3.6 模組下。

    預設部署資源配置使用 AMD CPU 和 Oracle Linux 8。若要使用 Intel CPU 或 Oracle Linux 9,請在部署命令中新增 -e instance_shape="VM.Standard3.Flex"-e os_version="9"

    重要事項:等待手冊順利執行並到達暫停工作。Oracle Linux Automation Manager 安裝已在手冊的這個階段完成,且執行處理已就緒。記下先前的播放,此播放會列印所部署節點的公用和專用 IP 位址。

建立手冊

  1. 開啟一個新的終端機視窗。

  2. 設定遠端 Git 伺服器執行處理的變數。

    export REMOTE=<ip_address_of_instance>
    
  3. 建立專案目錄。

    mkdir ~/olamkvm
    
  4. 建立必修課程檔案。

    Oracle Linux Automation Engine 使用需求檔案,在執行階段將任何必要的集合或角色提取至專案中。

    cat << EOF > ~/olamkvm/requirements.yml 
    ---
    collections:
      - name: community.libvirt
      - name: community.general
      - name: community.crypto
    EOF
    
  5. 建立變數檔案。

    檔案會儲存變數及其預設值。此手冊會在程式實際執行時匯入此檔案。

    1. 建立儲存檔案的目錄。

      mkdir ~/olamkvm/vars
      
    2. 建立檔案。

      cat << EOF > ~/olamkvm/vars/defaults.yml
      ---
      username: oracle
      base_image_name: OL9U5_x86_64-kvm-b253.qcow2
      base_image_url: https://yum.oracle.com/templates/OracleLinux/OL9/u5/x86_64/
      base_image_sha: 3b00bbbefc8e78dd28d9f538834fb9e2a03d5ccdc2cadf2ffd0036c0a8f02021
      libvirt_pool_dir: "/var/lib/libvirt/images"
      vm_name: ol9-dev
      vm_vcpus: 2
      vm_ram_mb: 2048
      vm_net: default
      vm_root_pass: 
      cleanup_tmp: no 
      EOF
      
  6. 建立 cloud-init 樣板。

    這些樣板會建立 meta-datauser-data 檔案,透過雲端初始化佈建 VM 組態。

    1. 建立目錄以儲存範本。

      mkdir ~/olamkvm/templates
      
    2. 建立中繼資料範本。

      cat << EOF > ~/olamkvm/templates/meta-data.j2
      instance-id: iid-local01
      local-hostname: 
      EOF
      
    3. 建立使用者資料樣板。

      cat << EOF > ~/olamkvm/templates/user-data.j2
      #cloud-config
      
      system_info:
        default_user:
          name: opc
      
      ssh_authorized_keys:
        - 
      EOF
      
  7. 建立 libvirt VM 定義樣板。

    cat << EOF > ~/olamkvm/templates/vm-template.xml.j2
    <domain type="kvm">
      <name></name>
      <memory unit='MiB'></memory>
      <vcpu placement='static'></vcpu>
      <os>
        <type arch="x86_64" machine="q35">hvm</type>
        <boot dev="hd"/>
      </os>
      <features>
        <acpi/>
        <apic/>
      </features>
      <cpu mode="host-model"/>
      <clock offset="utc">
        <timer name="rtc" tickpolicy="catchup"/>
        <timer name="pit" tickpolicy="delay"/>
        <timer name="hpet" present="no"/>
      </clock>
      <pm>
        <suspend-to-mem enabled="no"/>
        <suspend-to-disk enabled="no"/>
      </pm>
      <devices>
        <emulator>/usr/libexec/qemu-kvm</emulator>
        <disk type="file" device="disk">
          <driver name="qemu" type="qcow2"/>
          <source file="/.qcow"/>
          <target dev="vda" bus="virtio"/>
        </disk>
        <disk type="file" device="cdrom">
          <driver name="qemu" type="raw"/>
          <source file="/.iso"/>
          <target dev="sda" bus="sata"/>
          <readonly/>
        </disk>
        <controller type="usb" model="qemu-xhci" ports="15"/>
        <interface type="network">
          <source network=""/>
          <model type="virtio"/>
        </interface>
        <console type="pty"/>
        <channel type="unix">
          <source mode="bind"/>
          <target type="virtio" name="org.qemu.guest_agent.0"/>
        </channel>
        <memballoon model="virtio"/>
        <rng model="virtio">
          <backend model="random">/dev/urandom</backend>
        </rng>
      </devices>
    </domain>
    EOF
    
  8. 建立手冊 。

    此手冊會查詢現有 VM 的 KVM 伺服器,然後部署新的 Oracle Linux Cloud 映像檔。

    cat << EOF > ~/olamkvm/create_vm.yml
    ---
    - name: Create vm with community.libvirt collection
      hosts: kvm
      become: true
    
      vars_files:
        - vars/defaults.yml
    
      tasks:
    
      - name: Add python lxml module required by libvirt ansible module
        ansible.builtin.dnf:
          name: python3-lxml
          state: present
    
      - name: Get list of existing VMs
        community.libvirt.virt:
          command: list_vms
        register: existing_vms
        changed_when: false
    
      - name: Print list of existing VMs
        ansible.builtin.debug:
          var: existing_vms
    
      - name: Create VM when not exist
        when: ( vm_name not in existing_vms.list_vms )
        block:
    
        - name: Download base image
          ansible.builtin.get_url:
            url: ""
            dest: "/tmp/"
            checksum: "sha256:"
            mode: "0664"
    
        - name: Copy base image to libvirt directory
          ansible.builtin.copy:
            dest: "/.qcow"
            src: "/tmp/"
            force: false
            remote_src: true 
            owner: qemu
            group: qemu
            mode: "0660"
          register: copy_results
    
        - name: Generate a vm ssh keypair
          community.crypto.openssh_keypair:
            path: ~/.ssh/id_rsa
            size: 2048
            comment: vm ssh keypair
          register: vm_ssh_keypair
          become: true
          become_user: ""
    
        - name: Create vm meta-data
          ansible.builtin.template:
            src: templates/meta-data.j2
            dest: "~/meta-data"
            mode: "0664"
          become_user: ""
    
        - name: Read the vm ssh private key
          ansible.builtin.slurp:
            src: "~/.ssh/id_rsa.pub"
          register: vm_ssh_private_key
          become: true
          become_user: ""
    
        - name: Create var for private key
          ansible.builtin.set_fact:
            vm_private_key: ""
    
        - name: Create vm user-data
          ansible.builtin.template:
            src: templates/user-data.j2
            dest: ~/user-data
            mode: "0664"
          become: true
          become_user: ""
    
        - name: Generate iso containing cloud-init configuration
          ansible.builtin.shell: |
            genisoimage -output /tmp/.iso -volid cidata -joliet -rock ~/user-data ~/meta-data
          become: true
          become_user: ""
          register: generate_iso
          changed_when: generate_iso.rc == 0
    
        - name: Copy vm iso image to libvirt directory
          ansible.builtin.copy:
            dest: "/.iso"
            src: "/tmp/.iso"
            force: false
            remote_src: true 
            owner: qemu
            group: qemu
            mode: "0660"
    
        - name: Remove vm iso image from tmp
          ansible.builtin.file:
            path: "/tmp/.iso"
            state: absent
    
        - name: Define the vm
          community.libvirt.virt:
            command: define
            xml: ""
    
      - name: Start the vm
        community.libvirt.virt:
          name: ""
          state: running
        register: vm_start_results
        until: "vm_start_results is success"
        retries: 15
        delay: 2
    
      - name: Remove the temporary file
        ansible.builtin.file:
          path: "/tmp/"
          state: absent
        when: cleanup_tmp | bool
    EOF
    

新增專案至來源控制項

  1. 將專案的工作目錄起始至 Git 儲存區域。

    起始儲存區域之前,您必須先執行一些 Git 的第一次設定步驟。

    1. 設定起始專案時使用的預設分支名稱。

      git config --global init.defaultBranch main
      
    2. 設定您的身份 。

      電子郵件和名稱是本自學課程中的範例。在處理您的專案時使用您的電子郵件與名稱,因為此資訊會在每個確認中不可變更。

      git config --global user.email johndoe@example.com
      git config --global user.name "John Doe"
      
    3. 變更至專案的工作目錄。

      cd ~/olamkvm
      
    4. 將目錄起始為本機 Git 儲存區域。

      git init
      

      此命令會傳回它起始空白的 Git 儲存區域。

  2. 檢查工作目錄和專案暫存區的狀態。

    git status
    

    本機儲存庫的狀態指示兩個未追蹤的檔案 create_vm.ymlrequirements.yml ,以及目錄 varstemplates

  3. 新增並追蹤暫存區中的新檔案。

    git add --all
    

    --all 選項會將所有未追蹤和已變更的檔案新增至暫存區。

  4. 確認目前在暫存區中的變更。

    git commit -m 'initial commit'
    

    -m 選項可以將註解新增至已確認的變更。

  5. 建立並起始遠端 Git 儲存區域。

    遠端儲存區域是所有專案提供者使用的共用儲存區域,並儲存在程式碼代管服務 (例如 GitHub 或自行代管伺服器) 上。

    ssh git@$REMOTE "git init -b main --bare /git-server/repos/olamkvm.git"
    

    -b 選項可確保使用稱為 main 的分支來初始化遠端儲存庫。

  6. 輸入 yes 以接受 ECDSA 金鑰指紋。

  7. 新增遠端儲存區域連線記錄。

    新增遠端連線到本機儲存區域,可讓您將它當作 Git 命令中的具名捷徑使用。

    git remote add origin git@$REMOTE:/git-server/repos/olamkvm.git
    

    冒號之後的路徑是遠端 Git 伺服器上儲存區域的目錄位置。

  8. 驗證新增的連線記錄。

    git remote -v
    

    輸出顯示指向 git fetchgit push 命令之遠端 Git 儲存區域位置的連線記錄 origin

  9. 將本機儲存區域變更植入遠端儲存區域。

    git push origin main
    

    現在可以在 Oracle Linux Automation Manager 專案中使用 olamkvm 來源。

建立 Ansible Galaxy 證明資料

這些證明資料可讓 Oracle Linux Automation Manager 從公用 Ansible Galaxy Hub 提取 OCI Ansible 集合。

  1. 開啟新的終端機視窗,然後設定 olam-node 執行處理的 SSH 通道。

    ssh -L 8444:localhost:443 oracle@<ip_address_of_instance>
    
  2. 開啟 Web 瀏覽器並輸入 URL。

    https://localhost:8444
    

    注意:根據使用的瀏覽器來核准安全警告。若為 Chrome 瀏覽器,請按一下進階按鈕,然後按一下繼續進行 localhost (不安全) 連結。

  3. 登入 Oracle Linux Automation Manager WebUI。使用自動部署期間建立的使用者名稱 admin 和密碼 admin

    olam2- 登入

  4. WebUI 會在成功登入後顯示。

    olam2- 烏布

  5. 按一下導覽功能表中資源段落底下的證明資料

  6. 按一下新增按鈕。

  7. 在特定欄位中輸入或選取下列值。

    對於具有搜尋或值清單的欄位,我們可以開始輸入要求的值,然後加以選取。

    • 名稱My Ansible Galaxy
    • 組織Default
    • 證明資料類型Ansible Galaxy/Automation Hub API 記號

    Oracle Linux Automation Manager 使用 Ansible Galaxy 證明資料,以使用 ansible-galaxy 命令下載角色與集合。

    • Galaxy 伺服器 URLhttps://galaxy.ansible.com

    olam2-ansible-galaxy-creds

  8. 複查項目,然後按一下儲存按鈕。

  9. 按一下導覽功能表中存取區段底下的組織

    若在組織內指定 Ansible Galaxy 證明資料,便可從 git 專案內下載 Oracle Linux Infrastructure Ansible 集合。

  10. 按一下預設組織,然後按一下編輯按鈕。

  11. 銀河系證明資料欄位中選取搜尋選項。

  12. 選取 Galaxy 證明資料即現式對話方塊中選取我的 Ansible Galaxy ,然後按一下選取按鈕。

  13. 複查並按一下儲存按鈕。

    olam2-ansible-galaxy-org

建立機器證明資料

這些證明資料可讓 Oracle Linux Automation Manager 透過 SSH 連線至 KVM 虛擬化系統。

  1. 按一下導覽功能表中資源底下的證明資料

  2. 按一下新增按鈕。

  3. 在特定欄位中輸入或選取下列值。

    對於具有搜尋或值清單的欄位,我們可以開始輸入要求的值,然後加以選取。

    • 名稱My KVM Server
    • 組織Default
    • 證明資料類型機器

    Oracle Linux Automation Manager 使用機器證明資料來設定建立主機的 SSH 連線時所需的資訊。

    頁面會重新整理,要求類型詳細資訊

  4. 輸入使用者名稱

    • 使用者名稱oracle

    olam2- 機器積分

  5. 按一下 SSH 私密金鑰的瀏覽按鈕。

    此時會出現一個對話方塊,並顯示 [Open File] (開啟檔案) 視窗。

  6. 在「開啟檔案」視窗的中央面板上按一下滑鼠右鍵,然後選取即現式對話方塊中的顯示隱藏的檔案

    olam2-open-file

  7. 按一下中央面板中的任意位置以關閉對話方塊。

  8. 按一下「開啟檔案」視窗左側導覽功能表中的首頁位置。

  9. 按兩下清單中的 .ssh 資料夾,然後按兩下 id_rsa 檔案。

    此動作會將 id_rsa 檔案的內容複製到 SSH 私密金鑰欄位。

  10. 複查項目,然後捲動至底部,然後按一下儲存按鈕。

建立產品目錄

  1. 按一下導覽功能表中的存貨

  2. 按一下新增按鈕,然後從下拉式值清單中選取新增產品目錄

  3. 在特定欄位中輸入或選取下列值。

    • 名稱KVM Servers
    • 執行處理群組: controlplane
  4. 複查並按一下儲存按鈕。

    olam2- 發票

將群組新增至存貨

產品目錄內的群組是主機或其他群組的分類,可控制指定工作的一組主機。

  1. 按一下 KVM 伺服器詳細資訊頁面上的群組頁籤。

    olam2-inv-kvm- 詳細資訊

  2. 按一下新增按鈕。

  3. 在特定欄位中輸入或選取下列值。

    • 名稱kvm
  4. 複查並按一下儲存按鈕。

    olam2-kvm-group- 詳細資訊

新增主機至產品目錄群組

  1. 按一下 KVM 群組詳細資訊頁面上的主機頁籤。

    olam2-kvm-group- 詳細資訊

  2. 按一下新增按鈕,然後從下拉式值清單中選取新增主機

  3. 在特定欄位中輸入或選取下列值。

    • 名稱:使用 kvm-server 主機的公用 IP 位址。
  4. 複查並按一下儲存按鈕。

    olam2-grp- 新主機

偵測存貨群組

使用 ping 模組來驗證 Oracle Linux Automation 可以連線至產品目錄群組內的主機。

  1. 使用來源路徑,然後按一下 KVM 伺服器

  2. 按一下群組頁籤。

  3. 勾選 kvm 群組旁的方塊,然後按一下 [ 執行指令 ] 按鈕。

    隨即顯示 [ 執行指令 ] 快顯對話方塊。

  4. 選取 ping 模組,然後按下一步按鈕。

  5. 選取 OLAM EE (2.2) 執行環境,然後按一下下一步按鈕。

  6. 選取我的 KVM 伺服器機器證明資料,然後按一下下一步按鈕。

  7. 複查並按一下啟動按鈕。

    工作會啟動並顯示 ping 模組的輸出。

    olam2-kvm-grp-ping

新增來源控制證明資料

  1. 按一下導覽功能表中的證明資料

  2. 按一下新增按鈕。

  3. 在特定欄位中輸入或選取下列值。

    • 名稱Git Server
    • 組織Default
    • 證明資料類型來源控制

    olam2-git-cred1

    頁面會重新整理,要求類型詳細資訊

  4. 輸入使用者名稱

    • 使用者名稱git
  5. 輸入 SCM 私密金鑰

    按一下瀏覽按鈕,然後按兩下 id_rsa 檔案。此動作會將金鑰內容複製到 SCM 私密金鑰欄位。

    olam2-git-cred2

  6. 複查並按一下儲存按鈕。

    olam2-git-cred3

建立專案

  1. 按一下導覽功能表中的專案

  2. 按一下新增按鈕。

  3. 在特定欄位中輸入或選取下列值。

    • 名稱My Project
    • 執行環境OLAM EE (2.2)
    • 來源控制證明資料類型Git

    olam2-proj1

    頁面會重新整理,要求類型詳細資訊

  4. 輸入 Git 伺服器的遠端 URL。

    • 來源控制 URLgit@<ip_address_of_instance>:/git-server/repos/olamkvm.git
  5. 選取來源控制證明資料Git 伺服器

  6. 複查並按一下儲存按鈕。

    olam2-proj2

  7. 複查專案同步狀態。

    專案建立之後,專案會在同步開始時,於詳細資訊摘要中顯示其狀態。如果組態正確且 Git 伺服器可連線,則狀態會從執行中轉變為成功

    olam2- 專案同步

建立工作樣板

  1. 按一下導覽功能表中的範本

  2. 按一下新增按鈕,然後從下拉式值清單中選取新增工作樣板

  3. 輸入必要值。

    • 名稱My Template
    • 工作類型執行
    • 產品目錄KVM 伺服器
    • 專案我的專案
    • 執行環境OLAM EE (2.2)
    • 手冊create_vm.yml
    • 證明資料我的 KVM 伺服器

    olam2-temp1

  4. 複查並向下捲動,然後按一下儲存按鈕。

    olam2-temp2

  5. 啟動樣板。

    按一下啟動按鈕,從樣板摘要頁面啟動工作。

    olam2 啟動

    如果成功,工作就會啟動並顯示樣板的輸出。標準輸出顯示播放簿的執行與輸出結果。

    olam2-temp- 輸出

驗證虛擬機器建立

  1. 開啟終端機,並透過 ssh 連線至 kvm-server 節點。

    ssh oracle@<ip_address_of_instance>
    
  2. 取得執行中的 VM 清單。

    sudo virsh list
    

    範例輸出:

    [oracle@kvm-server ~]$ sudo virsh list
     Id   Name      State
    -------------------------
     1    ol9-dev   running
    
  3. 取得 ol9-dev VM 的 IP 位址。

    sudo virsh net-dhcp-leases default
    

    範例輸出:

    [oracle@kvm-server ~]$ sudo virsh net-dhcp-leases default
     Expiry Time           MAC address         Protocol   IP address           Hostname   Client ID or DUID
    ------------------------------------------------------------------------------------------------------------
     2023-04-06 18:59:33   52:54:00:6e:93:07   ipv4       192.168.122.167/24   ol9-dev    01:52:54:00:6e:93:07
    
  4. 連線至 VM。

    ssh opc@$(sudo virsh -q domifaddr ol9-dev | awk '{print substr($4, 1, length($4)-3)}')
    

    -q 會從 virsh 指令輸出中移除標頭。awk 會從 virsh domifaddr 命令提取第四個資料欄,而 substr() 則會分割最後三個字元。

  5. 與 VM 中斷連線。

    exit
    

(選擇性) 建立其他虛擬機器

此手冊可透過變更 vm_name 變數來建立其他 VM。

  1. 切換至包含 Oracle Linux Automation Manager WebUI 的瀏覽器視窗,並視需要登入。

  2. 按一下導覽功能表中的範本

  3. 按一下我的範本編輯範本圖示。

    olam2-temp-edit

  4. 將值為 ol9-new 的變數 vm_name 新增至變數區段。

    olam2-temp-vars

  5. 向下捲動並按一下儲存按鈕。

  6. 啟動樣板。

  7. 重複虛擬機器驗證步驟,並連線至新建立的 VM。

接下來的步驟

成功的 Oracle Linux Automation Manager 工作輸出,以及 SSH 到虛擬機器的能力,可確認一切順利運作。進一步試用 community.libvirt 集合並在 Oracle Linux KVM 內建立虛擬機器,以擴充您的基礎架構。然後,嘗試使用額外的手冊來佈建這些虛擬機器。到 Oracle Linux Training Station 參閱我們的額外訓練。

其他學習資源

探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center