注意:
- 此教程位于 Oracle 提供的免费实验室环境中。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
使用 Oracle Linux Automation Manager 管理 KVM 虚拟机
简介
community.libvirt 集合提供了 Ansible libvirt 社区支持的 libvirt 模块和插件。这些模块和插件有助于使用 libvirt API 管理虚拟机 (virtual machine,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-server 实例。
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 文件,以通过 cloud-init 预配 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
-
创建剧本。
此手册会查询 KVM 服务器以查找现有 VM,然后部署新的 Oracle Linux Cloud Image。
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 Collection。
-
打开新终端窗口并配置指向 olam-node 实例的 SSH 隧道。
ssh -L 8444:localhost:443 oracle@<ip_address_of_instance>
-
打开 Web 浏览器并输入 URL。
https://localhost:8444
注:根据使用的浏览器批准安全警告。对于 Chrome 浏览器,单击 Advanced(高级)按钮,然后单击 Proceed to localhost (unsafe) 链接。
-
登录到 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 Server URL :
https://galaxy.ansible.com
- 名称:
-
查看条目并单击保存按钮。
-
单击导航菜单中访问部分下的组织。
通过在组织内分配 Ansible Galaxy 凭证,可以从 git 项目内下载 Oracle Linux Infrastructure Ansible Collection。
-
单击默认组织,然后单击编辑按钮。
-
在 Galaxy Credentials(Galaxy 身份证明)字段中选择搜索选项。
-
Select My Ansible Galaxy in the Select Galaxy Credentials pop-up dialogand click the Select button.
-
复查并单击保存按钮。
创建计算机身份证明
这些凭证允许 Oracle Linux Automation Manager 通过 SSH 连接到 KVM 虚拟化系统。
-
单击导航菜单中资源下的身份证明。
-
单击添加按钮。
-
在特定字段中输入或选择下列值。
对于具有搜索或值列表的字段,我们可以开始键入请求的值,然后选择它。
- 名称:
My KVM Server
- 组织:
Default
- 身份证明类型:计算机
Oracle Linux Automation Manager 使用计算机凭证设置与主机建立 SSH 连接时所需的信息。
页面将刷新,请求类型详细信息。
- 名称:
-
输入用户名。
- 用户名:
oracle
- 用户名:
-
单击 SSH 私有密钥的浏览按钮。
此时将显示一个对话框,其中显示了 "Open File"(打开文件)窗口。
-
在 "Open File"(打开文件)窗口的中央面板中右键单击,然后在弹出对话框中选择 Show Hidden Files(显示隐藏的文件)。
-
单击中央面板中的任意位置可关闭对话框。
-
单击“打开文件”窗口左侧导航菜单中的主页位置。
-
双击列表中的 .ssh 文件夹,然后双击 id_rsa 文件。
此操作会将 id_rsa 文件的内容复制到 SSH Private Key 字段。
-
查看各项,然后滚动到底部并单击保存按钮。
创建清单
-
单击导航菜单中的库存。
-
单击添加按钮,然后从值下拉列表中选择添加库存。
-
在特定字段中输入或选择下列值。
- 名称:
KVM Servers
- 实例组: controlplane
- 名称:
-
复查并单击保存按钮。
向库存添加组
清单中的组是主机或允许为给定任务控制一组主机的其他组的分类。
-
单击 "KVM Servers Details(KVM 服务器详细信息)页面上的 Groups(组)选项卡。
-
单击添加按钮。
-
在特定字段中输入或选择下列值。
- 名称:
kvm
- 名称:
-
复查并单击保存按钮。
将主机添加到清单组
-
单击 kvm 组详细信息页上的主机选项卡。
-
单击 Add(添加)按钮,然后从值下拉列表中选择 Add new host(添加新主机)。
-
在特定字段中输入或选择下列值。
- 名称:使用 kvm-server 主机的公共 IP 地址。
-
复查并单击保存按钮。
Ping 库存组
使用 ping 模块验证 Oracle Linux Automation 是否可以连接到清单组中的主机。
-
使用面包屑并单击 KVM 服务器。
-
单击组选项卡。
-
选中 kvm 组旁边的框并单击 Run Command 按钮。
此时将显示 Run Command(运行命令)弹出对话框。
-
选择 ping 模块并单击 Next 按钮。
-
选择 OLAM EE (2.2) 执行环境,然后单击 Next 按钮。
-
选择 My KVM Server 计算机身份证明,然后单击 Next 按钮。
-
复查并单击启动按钮。
作业启动并显示 ping 模块的输出。
添加源控件身份证明
-
单击导航菜单中的身份证明。
-
单击添加按钮。
-
在特定字段中输入或选择下列值。
- 名称:
Git Server
- 组织:
Default
- 身份证明类型:源控制
页面将刷新,请求类型详细信息。
- 名称:
-
输入用户名。
- 用户名:
git
- 用户名:
-
输入 SCM Private Key
单击 Browse(浏览)按钮,然后双击 id_rsa 文件。此操作会将密钥内容复制到 SCM Private Key 字段中。
-
复查并单击保存按钮。
创建项目
-
单击导航菜单中的项目。
-
单击添加按钮。
-
在特定字段中输入或选择下列值。
- 名称:
My Project
- 执行环境: OLAM EE (2.2)
- 源控制身份证明类型: Git
页面将刷新,请求类型详细信息。
- 名称:
-
输入 git-server 的远程 URL。
- 源控制 URL :
git@<ip_address_of_instance>:/git-server/repos/olamkvm.git
- 源控制 URL :
-
为 Source Control Credential 选择 Git Server 。
-
复查并单击保存按钮。
-
复核项目同步状态。
创建项目后,在同步开始时,项目将在详细信息摘要中显示其状态。如果配置正确且可访问 Git 服务器,则状态从正在运行转换为成功。
创建作业模板
-
单击导航菜单中的 Templates 。
-
单击 Add(添加)按钮,然后从值下拉列表中选择 Add job template(添加作业模板)。
-
输入所需值。
- 名称:
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 的浏览器窗口并根据需要登录。
-
单击导航菜单中的 Templates 。
-
单击我的模板的编辑模板图标。
-
将值为
ol9-new
的变量vm_name
添加到 Variables(变量)部分。 -
向下滚动并单击保存按钮。
-
启动该模板。
-
重复虚拟机验证步骤并连接到新创建的 VM。
后续步骤
成功的 Oracle Linux Automation Manager 作业输出和通过 SSH 连接到虚拟机的功能可确认一切正常工作。进一步尝试 community.libvirt 集合,并在 Oracle Linux KVM 中创建虚拟机以扩展您的基础设施。然后,尝试为这些虚拟机预配额外的剧本。在 Oracle Linux 培训站查看其他培训。
相关链接
- 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 帮助中心。
Manage KVM Virtual Machines using Oracle Linux Automation Manager
G32920-01
Copyright ©2023, Oracle and/or its affiliates.