ノート:
- このチュートリアルは、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"
無料のラボ環境では、Oracle Cloud Infrastructure SDK for Python用のRPMパッケージをインストールするため、追加の変数
ansible_python_interpreter
が必要です。このパッケージのインストール場所は、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アドレスとプライベート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テンプレートを作成します。
これらのテンプレートは、cloud-init経由で VM構成をプロビジョニングするために、meta-dataおよび user-dataファイルを作成します。
-
テンプレートを格納するディレクトリを作成します。
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
-
アイデンティティを設定します。
このチュートリアルでは、電子メールと名前の例を示します。プロジェクトで作業するときは、Eメールと名前を使用します。この情報は各コミットに没頭してまとめられます。
git config --global user.email johndoe@example.com git config --global user.name "John Doe"
-
プロジェクトの作業ディレクトリに移動します。
cd ~/olamkvm
-
ディレクトリをローカルのGitリポジトリとして初期化します。
git init
このコマンドは、空のGitリポジトリを初期化したことを返します。
-
-
作業ディレクトリおよびプロジェクト・ステージング領域の状態を確認します。
git status
ローカルリポジトリの状態は、追跡されていない2つのファイル 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コレクションをダウンロードできます。
-
「デフォルト」組織をクリックし、「編集」ボタンをクリックします。
-
「銀河資格証明」フィールドで検索オプションを選択します。
-
「ギャラクシー資格証明の選択」ポップアップ・ダイアログで「My Ansible Galaxy」を選択し、「選択」ボタンをクリックします。
-
確認して、「保存」ボタンをクリックします。
マシン資格証明の作成
これらの資格証明により、Oracle Linux Automation ManagerはSSHを介してKVM仮想化システムに接続できます。
-
ナビゲーション・メニューの「リソース」の下にある「資格証明」をクリックします。
-
「追加」ボタンをクリックします。
-
特定のフィールドに次の値を入力または選択します。
検索または値リストのあるフィールドでは、要求された値の入力を開始してから選択できます。
- 名前:
My KVM Server
- 組織:
Default
- 資格証明タイプ: マシン
Oracle Linux Automation Managerは、マシン資格証明を使用して、ホストへのSSH接続を確立する際に必要な情報を設定します。
ページがリフレッシュされ、「タイプ詳細」がリクエストされます。
- 名前:
-
「ユーザー名」を入力します
- ユーザー名:
oracle
- ユーザー名:
-
SSH秘密キーの「参照」ボタンをクリックします。
「ファイルを開く」ウィンドウが表示されたダイアログボックスが表示されます。
-
「ファイルを開く」ウィンドウの中央パネルを右クリックし、ポップアップ・ダイアログ・ボックスで「非表示ファイルの表示」を選択します。
-
中央パネルの任意の場所をクリックして、ダイアログボックスを閉じます。
-
「ファイルを開く」ウィンドウの左側にあるナビゲーション・メニューの「ホーム」の場所をクリックします。
-
リスト内の .sshフォルダをダブルクリックし、id_rsaファイルをダブルクリックします。
このアクションにより、id_rsaファイルの内容が SSH Private Keyフィールドにコピーされます。
-
エントリを確認し、最下部までスクロールして「保存」ボタンをクリックします。
インベントリの作成
-
ナビゲーション・メニューの「在庫」をクリックします。
-
「追加」ボタンをクリックし、値のドロップダウン・リストから「在庫の追加」を選択します。
-
特定のフィールドに次の値を入力または選択します。
- 名前:
KVM Servers
- インスタンス・グループ: controlplane
- 名前:
-
確認して、「保存」ボタンをクリックします。
インベントリへのグループの追加
インベントリ内のグループは、特定のタスクのホスト・セットを制御できるホストまたは他のグループの分類です。
-
KVMサーバーの「詳細」ページで「グループ」タブをクリックします。
-
「追加」ボタンをクリックします。
-
特定のフィールドに次の値を入力または選択します。
- 名前:
kvm
- 名前:
-
確認して、「保存」ボタンをクリックします。
インベントリ・グループへのホストの追加
-
kvmの「グループ詳細」ページで「ホスト」タブをクリックします。
-
「追加」ボタンをクリックし、値のドロップダウン・リストから「新規ホストの追加」を選択します。
-
特定のフィールドに次の値を入力または選択します。
- 名前: kvm-serverホストのパブリックIPアドレスを使用します。
-
確認して、「保存」ボタンをクリックします。
在庫グループのPing
pingモジュールを使用して、Oracle Linux Automationがインベントリ・グループ内のホストに接続できることを確認します。
-
ブレッドクラムを使用して、「KVMサーバー」をクリックします。
-
「グループ」タブをクリックします。
-
kvmグループの横にあるボックスを選択し、「コマンドの実行」ボタンをクリックします。
「コマンドの実行」ポップアップ・ダイアログが表示されます。
-
pingモジュールを選択し、「Next」ボタンをクリックします。
-
「OLAM EE (2.2)」実行環境を選択し、「次へ」ボタンをクリックします。
-
「マイKVMサーバー」マシン資格証明を選択し、「次へ」ボタンをクリックします。
-
「起動」ボタンを確認してクリックします。
ジョブが起動し、pingモジュールからの出力が表示されます。
ソース・コントロール資格証明の追加
-
ナビゲーション・メニューの「資格証明」をクリックします。
-
「追加」ボタンをクリックします。
-
特定のフィールドに次の値を入力または選択します。
- 名前:
Git Server
- 組織:
Default
- 資格証明タイプ: ソース管理
ページがリフレッシュされ、「タイプ詳細」がリクエストされます。
- 名前:
-
「ユーザー名」を入力します
- ユーザー名:
git
- ユーザー名:
-
SCM秘密キーを入力します
「参照」ボタンをクリックし、id_rsaファイルをダブルクリックします。このアクションにより、キーの内容が「SCM秘密キー」フィールドにコピーされます。
-
確認して、「保存」ボタンをクリックします。
プロジェクトの作成
-
ナビゲーション・メニューの「プロジェクト」をクリックします。
-
「追加」ボタンをクリックします。
-
特定のフィールドに次の値を入力または選択します。
- 名前:
My Project
- 実行環境: OLAM EE (2.2)
- ソース・コントロール資格証明タイプ: Git
ページがリフレッシュされ、「タイプ詳細」がリクエストされます。
- 名前:
-
git-serverのリモート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
- 資格証明: My KVM Server
- 名前:
-
確認し、下にスクロールして、「保存」ボタンをクリックします。
-
テンプレートを起動します。
「起動」ボタンをクリックして、テンプレート・サマリー・ページからジョブを起動します。
成功すると、ジョブが起動し、テンプレートからの出力が表示されます。標準出力はプレイブックの実行を示し、プレイブックの結果を出力します。
仮想マシンの作成の検証
-
端末を開き、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
コマンドから4番目の列を取り出し、substr()
は最後の3文字を削除します。 -
VMから切断します。
exit
(オプション)別の仮想マシンの作成
プレイブックでは、vm_name変数を変更して別のVMを作成できます。
-
Oracle Linux Automation Manager WebUIを含むブラウザ・ウィンドウに切り替えて、必要に応じてログインします。
-
ナビゲーション・メニューの「テンプレート」をクリックします。
-
「My Template」の「Edit Template」アイコンをクリックします。
-
ol9-new
の値を持つ変数vm_name
を「変数」セクションに追加します。 -
下にスクロールして、「保存」ボタンをクリックします。
-
テンプレートを起動します。
-
仮想マシンの検証ステップを繰り返し、新しく作成した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 Help Centerを参照してください。
Manage KVM Virtual Machines using Oracle Linux Automation Manager
G32917-01
Copyright ©2023, Oracle and/or its affiliates.