附註:
- 此教學課程可在 Oracle 提供的免費實驗室環境中取得。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
使用 Oracle Linux Automation Manager 管理 KVM 虛擬機器
簡介
community.libvirt 集合提供 Ansible libvirt 社群支援的 libvirt 模組和外掛程式。這些模組與外掛程式有助於使用 libvirt API 管理虛擬機器 (VM) 和容器。
目標
在本教學課程中,您將瞭解如何:
- 建立使用 community.libvirt 集合的手冊
- 設定 Ansible Galaxy 的證明資料
- 建立工作樣板
- 執行工作
必要條件
- 已安裝 Oracle Linux Automation Manager 的系統
- 存取 Git 儲存區域
- 已安裝 KVM 的 Oracle Linux 系統
注意:如需有關安裝 Oracle Linux Automation Manager 或 KVM 的詳細資訊,請參閱此實驗室結尾的連結。
部署 Oracle Linux Automation Manager
注意:如果在您自己的租用戶中執行,請先閱讀 linux-virt-labs
GitHub 專案 README.md 並完成先決條件,再部署實驗室環境。
-
在 Luna 桌面上開啟終端機。
-
複製
linux-virt-labs
GitHub 專案。git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
變更至工作目錄。
cd linux-virt-labs/olam
-
安裝所需的集合。
ansible-galaxy collection install -r requirements.yml
-
更新 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
-
部署實驗室環境。
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 位址。
建立手冊
-
開啟一個新的終端機視窗。
-
設定遠端 Git 伺服器執行處理的變數。
export REMOTE=<ip_address_of_instance>
-
建立專案目錄。
mkdir ~/olamkvm
-
建立必修課程檔案。
Oracle Linux Automation Engine 使用需求檔案,在執行階段將任何必要的集合或角色提取至專案中。
cat << EOF > ~/olamkvm/requirements.yml --- collections: - name: community.libvirt - name: community.general - name: community.crypto EOF
-
建立變數檔案。
檔案會儲存變數及其預設值。此手冊會在程式實際執行時匯入此檔案。
-
建立儲存檔案的目錄。
mkdir ~/olamkvm/vars
-
建立檔案。
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
-
-
建立 cloud-init 樣板。
這些樣板會建立 meta-data 和 user-data 檔案,透過雲端初始化佈建 VM 組態。
-
建立目錄以儲存範本。
mkdir ~/olamkvm/templates
-
建立中繼資料範本。
cat << EOF > ~/olamkvm/templates/meta-data.j2 instance-id: iid-local01 local-hostname: EOF
-
建立使用者資料樣板。
cat << EOF > ~/olamkvm/templates/user-data.j2 #cloud-config system_info: default_user: name: opc ssh_authorized_keys: - EOF
-
-
建立 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
-
建立手冊 。
此手冊會查詢現有 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
新增專案至來源控制項
-
將專案的工作目錄起始至 Git 儲存區域。
起始儲存區域之前,您必須先執行一些 Git 的第一次設定步驟。
-
設定起始專案時使用的預設分支名稱。
git config --global init.defaultBranch main
-
設定您的身份 。
電子郵件和名稱是本自學課程中的範例。在處理您的專案時使用您的電子郵件與名稱,因為此資訊會在每個確認中不可變更。
git config --global user.email johndoe@example.com git config --global user.name "John Doe"
-
變更至專案的工作目錄。
cd ~/olamkvm
-
將目錄起始為本機 Git 儲存區域。
git init
此命令會傳回它起始空白的 Git 儲存區域。
-
-
檢查工作目錄和專案暫存區的狀態。
git status
本機儲存庫的狀態指示兩個未追蹤的檔案 create_vm.yml 和 requirements.yml ,以及目錄 vars 與 templates 。
-
新增並追蹤暫存區中的新檔案。
git add --all
--all
選項會將所有未追蹤和已變更的檔案新增至暫存區。 -
確認目前在暫存區中的變更。
git commit -m 'initial commit'
-m
選項可以將註解新增至已確認的變更。 -
建立並起始遠端 Git 儲存區域。
遠端儲存區域是所有專案提供者使用的共用儲存區域,並儲存在程式碼代管服務 (例如 GitHub 或自行代管伺服器) 上。
ssh git@$REMOTE "git init -b main --bare /git-server/repos/olamkvm.git"
-b
選項可確保使用稱為 main 的分支來初始化遠端儲存庫。 -
輸入
yes
以接受 ECDSA 金鑰指紋。 -
新增遠端儲存區域連線記錄。
新增遠端連線到本機儲存區域,可讓您將它當作 Git 命令中的具名捷徑使用。
git remote add origin git@$REMOTE:/git-server/repos/olamkvm.git
冒號之後的路徑是遠端 Git 伺服器上儲存區域的目錄位置。
-
驗證新增的連線記錄。
git remote -v
輸出顯示指向
git fetch
和git push
命令之遠端 Git 儲存區域位置的連線記錄 origin 。 -
將本機儲存區域變更植入遠端儲存區域。
git push origin main
現在可以在 Oracle Linux Automation Manager 專案中使用 olamkvm 來源。
建立 Ansible Galaxy 證明資料
這些證明資料可讓 Oracle Linux Automation Manager 從公用 Ansible Galaxy Hub 提取 OCI Ansible 集合。
-
開啟新的終端機視窗,然後設定 olam-node 執行處理的 SSH 通道。
ssh -L 8444:localhost:443 oracle@<ip_address_of_instance>
-
開啟 Web 瀏覽器並輸入 URL。
https://localhost:8444
注意:根據使用的瀏覽器來核准安全警告。若為 Chrome 瀏覽器,請按一下進階按鈕,然後按一下繼續進行 localhost (不安全) 連結。
-
登入 Oracle Linux Automation Manager WebUI。使用自動部署期間建立的使用者名稱
admin
和密碼admin
。 -
WebUI 會在成功登入後顯示。
-
按一下導覽功能表中資源段落底下的證明資料。
-
按一下新增按鈕。
-
在特定欄位中輸入或選取下列值。
對於具有搜尋或值清單的欄位,我們可以開始輸入要求的值,然後加以選取。
- 名稱:
My Ansible Galaxy
- 組織:
Default
- 證明資料類型:Ansible Galaxy/Automation Hub API 記號
Oracle Linux Automation Manager 使用 Ansible Galaxy 證明資料,以使用
ansible-galaxy
命令下載角色與集合。- Galaxy 伺服器 URL :
https://galaxy.ansible.com
- 名稱:
-
複查項目,然後按一下儲存按鈕。
-
按一下導覽功能表中存取區段底下的組織。
若在組織內指定 Ansible Galaxy 證明資料,便可從 git 專案內下載 Oracle Linux Infrastructure Ansible 集合。
-
按一下預設組織,然後按一下編輯按鈕。
-
在銀河系證明資料欄位中選取搜尋選項。
-
在選取 Galaxy 證明資料即現式對話方塊中選取我的 Ansible Galaxy ,然後按一下選取按鈕。
-
複查並按一下儲存按鈕。
建立機器證明資料
這些證明資料可讓 Oracle Linux Automation Manager 透過 SSH 連線至 KVM 虛擬化系統。
-
按一下導覽功能表中資源底下的證明資料。
-
按一下新增按鈕。
-
在特定欄位中輸入或選取下列值。
對於具有搜尋或值清單的欄位,我們可以開始輸入要求的值,然後加以選取。
- 名稱:
My KVM Server
- 組織:
Default
- 證明資料類型:機器
Oracle Linux Automation Manager 使用機器證明資料來設定建立主機的 SSH 連線時所需的資訊。
頁面會重新整理,要求類型詳細資訊。
- 名稱:
-
輸入使用者名稱。
- 使用者名稱:
oracle
- 使用者名稱:
-
按一下 SSH 私密金鑰的瀏覽按鈕。
此時會出現一個對話方塊,並顯示 [Open File] (開啟檔案) 視窗。
-
在「開啟檔案」視窗的中央面板上按一下滑鼠右鍵,然後選取即現式對話方塊中的顯示隱藏的檔案。
-
按一下中央面板中的任意位置以關閉對話方塊。
-
按一下「開啟檔案」視窗左側導覽功能表中的首頁位置。
-
按兩下清單中的 .ssh 資料夾,然後按兩下 id_rsa 檔案。
此動作會將 id_rsa 檔案的內容複製到 SSH 私密金鑰欄位。
-
複查項目,然後捲動至底部,然後按一下儲存按鈕。
建立產品目錄
-
按一下導覽功能表中的存貨。
-
按一下新增按鈕,然後從下拉式值清單中選取新增產品目錄。
-
在特定欄位中輸入或選取下列值。
- 名稱:
KVM Servers
- 執行處理群組: controlplane
- 名稱:
-
複查並按一下儲存按鈕。
將群組新增至存貨
產品目錄內的群組是主機或其他群組的分類,可控制指定工作的一組主機。
-
按一下 KVM 伺服器詳細資訊頁面上的群組頁籤。
-
按一下新增按鈕。
-
在特定欄位中輸入或選取下列值。
- 名稱:
kvm
- 名稱:
-
複查並按一下儲存按鈕。
新增主機至產品目錄群組
-
按一下 KVM 群組詳細資訊頁面上的主機頁籤。
-
按一下新增按鈕,然後從下拉式值清單中選取新增主機。
-
在特定欄位中輸入或選取下列值。
- 名稱:使用 kvm-server 主機的公用 IP 位址。
-
複查並按一下儲存按鈕。
偵測存貨群組
使用 ping 模組來驗證 Oracle Linux Automation 可以連線至產品目錄群組內的主機。
-
使用來源路徑,然後按一下 KVM 伺服器。
-
按一下群組頁籤。
-
勾選 kvm 群組旁的方塊,然後按一下 [ 執行指令 ] 按鈕。
隨即顯示 [ 執行指令 ] 快顯對話方塊。
-
選取 ping 模組,然後按下一步按鈕。
-
選取 OLAM EE (2.2) 執行環境,然後按一下下一步按鈕。
-
選取我的 KVM 伺服器機器證明資料,然後按一下下一步按鈕。
-
複查並按一下啟動按鈕。
工作會啟動並顯示 ping 模組的輸出。
新增來源控制證明資料
-
按一下導覽功能表中的證明資料。
-
按一下新增按鈕。
-
在特定欄位中輸入或選取下列值。
- 名稱:
Git Server
- 組織:
Default
- 證明資料類型:來源控制
頁面會重新整理,要求類型詳細資訊。
- 名稱:
-
輸入使用者名稱。
- 使用者名稱:
git
- 使用者名稱:
-
輸入 SCM 私密金鑰
按一下瀏覽按鈕,然後按兩下 id_rsa 檔案。此動作會將金鑰內容複製到 SCM 私密金鑰欄位。
-
複查並按一下儲存按鈕。
建立專案
-
按一下導覽功能表中的專案。
-
按一下新增按鈕。
-
在特定欄位中輸入或選取下列值。
- 名稱:
My Project
- 執行環境: OLAM EE (2.2)
- 來源控制證明資料類型: Git
頁面會重新整理,要求類型詳細資訊。
- 名稱:
-
輸入 Git 伺服器的遠端 URL。
- 來源控制 URL :
git@<ip_address_of_instance>:/git-server/repos/olamkvm.git
- 來源控制 URL :
-
選取來源控制證明資料的 Git 伺服器。
-
複查並按一下儲存按鈕。
-
複查專案同步狀態。
專案建立之後,專案會在同步開始時,於詳細資訊摘要中顯示其狀態。如果組態正確且 Git 伺服器可連線,則狀態會從執行中轉變為成功。
建立工作樣板
-
按一下導覽功能表中的範本。
-
按一下新增按鈕,然後從下拉式值清單中選取新增工作樣板。
-
輸入必要值。
- 名稱:
My Template
- 工作類型:執行
- 產品目錄: KVM 伺服器
- 專案:我的專案
- 執行環境: OLAM EE (2.2)
- 手冊:create_vm.yml
- 證明資料:我的 KVM 伺服器
- 名稱:
-
複查並向下捲動,然後按一下儲存按鈕。
-
啟動樣板。
按一下啟動按鈕,從樣板摘要頁面啟動工作。
如果成功,工作就會啟動並顯示樣板的輸出。標準輸出顯示播放簿的執行與輸出結果。
驗證虛擬機器建立
-
開啟終端機,並透過 ssh 連線至 kvm-server 節點。
ssh oracle@<ip_address_of_instance>
-
取得執行中的 VM 清單。
sudo virsh list
範例輸出:
[oracle@kvm-server ~]$ sudo virsh list Id Name State ------------------------- 1 ol9-dev running
-
取得
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
-
連線至 VM。
ssh opc@$(sudo virsh -q domifaddr ol9-dev | awk '{print substr($4, 1, length($4)-3)}')
-q
會從virsh
指令輸出中移除標頭。awk
會從virsh domifaddr
命令提取第四個資料欄,而substr()
則會分割最後三個字元。 -
與 VM 中斷連線。
exit
(選擇性) 建立其他虛擬機器
此手冊可透過變更 vm_name 變數來建立其他 VM。
-
切換至包含 Oracle Linux Automation Manager WebUI 的瀏覽器視窗,並視需要登入。
-
按一下導覽功能表中的範本。
-
按一下我的範本的編輯範本圖示。
-
將值為
ol9-new
的變數vm_name
新增至變數區段。 -
向下捲動並按一下儲存按鈕。
-
啟動樣板。
-
重複虛擬機器驗證步驟,並連線至新建立的 VM。
接下來的步驟
成功的 Oracle Linux Automation Manager 工作輸出,以及 SSH 到虛擬機器的能力,可確認一切順利運作。進一步試用 community.libvirt 集合並在 Oracle Linux KVM 內建立虛擬機器,以擴充您的基礎架構。然後,嘗試使用額外的手冊來佈建這些虛擬機器。到 Oracle Linux Training Station 參閱我們的額外訓練。
相關連結
- Oracle Linux Automation Manager 文件
- Oracle Linux Automation Manager 安裝指南
- Oracle Linux Automation Manager 訓練
- 使用 Oracle Linux 上的 KVM 建立 VM
- Oracle Linux 訓練站
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Manage KVM Virtual Machines using Oracle Linux Automation Manager
G32921-01
Copyright ©2023, Oracle and/or its affiliates.