주:
- 이 자습서는 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 Desktop에서 터미널을 엽니다.
-
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
-
lab 환경을 배치합니다.
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 주소를 인쇄하는 이전 플레이를 기록해 둡니다.
플레이북 만들기
-
새 터미널 window를 엽니다.
-
변수를 원격 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 템플리트를 생성합니다.
이러한 템플리트는 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
-
Playbook 만들기
이 플레이북은 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
-
ID를 설정합니다.
전자 메일과 이름은 이 자습서의 예입니다. 프로젝트에서 작업할 때 전자 메일과 이름을 사용합니다. 이 정보는 각 커밋에 변경되지 않습니다.
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>
-
웹 브라우저를 열고 URL을 입력합니다.
https://localhost:8444
주: 사용된 브라우저를 기반으로 보안 경고를 승인합니다. Chrome 브라우저의 경우 고급 버튼을 누른 다음 로컬 호스트로 진행(안전하지 않음) 링크를 누릅니다.
-
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
명령을 사용하여 역할 및 모음을 다운로드할 수 있도록 합니다.- 갤럭시 서버 URL:
https://galaxy.ansible.com
- 이름:
-
항목을 검토하고 Save 버튼을 누릅니다.
-
탐색 메뉴의 액세스 섹션 아래에 있는 조직을 누릅니다.
조직 내에서 Ansible Galaxy 자격 증명을 지정하면 git 프로젝트 내에서 Oracle Linux Infrastructure Ansible Collection을 다운로드할 수 있습니다.
-
기본값 조직을 누르고 편집 버튼을 누릅니다.
-
갤럭시 자격 증명 필드에서 검색 옵션을 선택합니다.
-
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 개인 키에 대해 Browse 버튼을 누릅니다.
Open File window가 표시된 대화상자가 나타납니다.
-
Open File(파일 열기) 창의 중앙 패널을 마우스 오른쪽 버튼으로 누르고 팝업 대화 상자에서 Show Hidden Files(숨겨진 파일 표시)를 선택합니다.
-
중앙 패널의 아무 곳이나 클릭하여 대화상자를 닫습니다.
-
Open File 창의 왼쪽에 있는 탐색 메뉴에서 Home 위치를 누릅니다.
-
목록에서 .ssh 폴더를 두 번 누른 다음 id_rsa 파일을 두 번 누릅니다.
그러면 id_rsa 파일의 컨텐츠가 SSH Private Key 필드에 복사됩니다.
-
항목을 검토한 후 아래쪽으로 스크롤하고 Save 버튼을 누릅니다.
인벤토리 생성
-
탐색 메뉴에서 Inventories를 누릅니다.
-
추가 단추를 누르고 값 드롭다운 목록에서 인벤토리 추가를 선택합니다.
-
특정 필드에서 다음 값을 입력하거나 선택합니다.
- 이름:
KVM Servers
- 인스턴스 그룹: controlplane
- 이름:
-
검토 후 저장 버튼을 누릅니다.
재고에 그룹 추가
인벤토리 내의 그룹은 지정된 작업에 대한 호스트 집합을 제어할 수 있는 호스트 또는 기타 그룹의 분류입니다.
-
KVM Servers Details 페이지에서 Groups 탭을 누릅니다.
-
추가 단추를 누릅니다.
-
특정 필드에서 다음 값을 입력하거나 선택합니다.
- 이름:
kvm
- 이름:
-
검토 후 저장 버튼을 누릅니다.
인벤토리 그룹에 호스트 추가
-
kvm Group details 페이지에서 Hosts(호스트) 탭을 누릅니다.
-
추가 단추를 누르고 값 드롭다운 목록에서 새 호스트 추가를 선택합니다.
-
특정 필드에서 다음 값을 입력하거나 선택합니다.
- Name(이름): kvm-server 호스트의 공용 IP 주소를 사용합니다.
-
검토 후 저장 버튼을 누릅니다.
인벤토리 그룹 핑
ping 모듈을 사용하여 Oracle Linux Automation이 인벤토리 그룹 내 호스트에 연결할 수 있는지 확인합니다.
-
이동 경로를 사용하고 KVM Servers(KVM 서버)를 누릅니다.
-
그룹 탭을 누릅니다.
-
kvm 그룹 옆에 있는 상자를 선택하고 Run Command 버튼을 누릅니다.
Run Command 팝업 대화 상자가 나타납니다.
-
ping 모듈을 선택하고 Next 버튼을 누릅니다.
-
Select the OLAM EE (2.2) Execution Environment and click the Next button.
-
My KVM Server 시스템 자격 증명을 선택하고 Next 버튼을 누릅니다.
-
검토 후 실행 버튼을 누릅니다.
작업이 실행되고 ping 모듈의 출력이 표시됩니다.
소스 제어 인증서 추가
-
탐색 메뉴에서 인증서를 누릅니다.
-
추가 단추를 누릅니다.
-
특정 필드에서 다음 값을 입력하거나 선택합니다.
- 이름:
Git Server
- 조직:
Default
- 인증서 유형: 소스 제어
유형 세부정보를 요청하면 페이지가 새로 고쳐집니다.
- 이름:
-
사용자 이름을 입력합니다.
- 사용자 이름:
git
- 사용자 이름:
-
SCM 개인 키를 입력합니다.
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:
-
소스 제어 인증서에 대해 Git Server를 선택합니다.
-
검토 후 저장 버튼을 누릅니다.
-
프로젝트 동기화 상태를 검토합니다.
프로젝트 생성 후 동기화가 시작될 때 프로젝트가 세부정보 요약에 상태를 표시합니다. 구성이 올바르고 Git 서버에 연결할 수 있는 경우 상태가 실행 중에서 성공으로 전환됩니다.
작업 템플리트 생성
-
탐색 메뉴에서 Templates를 누릅니다.
-
추가 단추를 누르고 값 드롭다운 목록에서 작업 템플리트 추가를 선택합니다.
-
필요한 값을 입력하십시오.
- 이름:
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를 누릅니다.
-
내 템플리트에 대해 템플리트 편집 아이콘을 누릅니다.
-
vm_name
변수를ol9-new
값으로 변수 섹션에 추가합니다. -
아래로 스크롤하고 저장 버튼을 누릅니다.
-
템플리트를 실행합니다.
-
가상 머신 확인 단계를 반복하고 새로 만든 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 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Manage KVM Virtual Machines using Oracle Linux Automation Manager
G32918-01
Copyright ©2023, Oracle and/or its affiliates.