실습 Ansible Playbook 실습 - 시스템 및 서버 관리 - 서버 프로비저닝 자동화 VM - 구현 2
페이지 정보

본문
안녕하세요.
꿈꾸는여행자입니다.
Ansible을 통한 Infra의 다양한 자동화 측면이 있습니다.
여러 가지 항목들을 기준으로 설계 및 구현 해보는 과정을 진행하고자 합니다.
이번 항목에서는 다음 내용을 기준으로
구현해 보겠습니다.
1. 시스템 및 서버 관리
1.1. 서버 프로비저닝 자동화 (Bare Metal, Cloud, VM)
- KVM - VM 배포 - Gold Image
감사합니다.
> 아래
### **Ansible AWX 환경에서 KVM을 활용한 Gold Image 기반 Rocky Linux 8.10 VM 배포**
---
## **1. 준비 작업**
- **프로젝트**: `lds-project`
- **인벤토리**: `lds-inventory`
- **호스트**: `kvm_host` (`ansible_host: 192.168.10.10`)
---
## **2. Playbook 작성**
- **파일 경로**: `/var/lib/rancher/k3s/storage/.../lds-project`
- **파일명**: `deploy-rocky-linux-810-vm-from-gold-image.yaml`
- **Playbook 내용**:
```yaml
---
- name: Deploy Rocky Linux 8.10 VM from Gold Image
hosts: kvm_host
become: true
gather_facts: true
vars:
vm_name: "rocky-vm"
vm_ram: 4096 # 4GB RAM
vm_vcpus: 2 # 2 CPU
vm_disk_path: "/data/libvirt/images/pool/{{ vm_name }}-rocky8.10.qcow2"
gold_image_path: "/data/libvirt/images/pool/rocky-linux-8.10.qcow2"
vm_network: "default"
vm_os_variant: "rocky8"
tasks:
- name: Ensure required packages are installed
ansible.builtin.package:
name:
- qemu-kvm
- libvirt-daemon
- virt-install
- bridge-utils
state: present
- name: Start and enable libvirtd service
ansible.builtin.systemd:
name: libvirtd
state: started
enabled: true
- name: Copy Gold Image for new VM
ansible.builtin.copy:
src: "{{ gold_image_path }}"
dest: "{{ vm_disk_path }}"
remote_src: true
owner: qemu
group: qemu
mode: "0644"
register: copy_result
- name: Print Copy Result
ansible.builtin.debug:
msg: "Gold Image copied successfully to {{ vm_disk_path }}"
- name: Deploy Rocky Linux 8.10 VM using virt-install
ansible.builtin.command:
cmd: >
virt-install --import
--name {{ vm_name }}
--description "{{ vm_name }} rocky 8.10"
--os-variant {{ vm_os_variant }}
--ram {{ vm_ram }} --vcpus {{ vm_vcpus }}
--disk path={{ vm_disk_path }}
--network network={{ vm_network }}
--graphics vnc
--noautoconsole
async: 300
poll: 0
- name: Wait for VM to be running
ansible.builtin.wait_for:
timeout: 60
- name: Ensure VM is running
ansible.builtin.command:
cmd: virsh list --all
register: vm_status
changed_when: false
- name: Print VM status
ansible.builtin.debug:
msg: "{{ vm_status.stdout_lines }}"
```
---
## **3. 템플릿 생성**
### **Ansible AWX 내 템플릿 정보**
- **템플릿 이름**: `lds-template-kvm-deploy-rocky-linux-810-vm-from-gold-image`
- **설명**: `KVM - Deploy Rocky Linux 8.10 VM from Gold Image`
- **작업 유형**: `run`
- **조직**: `linuxdatasystem`
- **인벤토리**: `lds-inventory`
- **프로젝트**: `lds-project`
- **실행 환경**: `AWX EE (latest)`
- **Playbook**: `deploy-rocky-linux-810-vm-from-gold-image.yaml`
- **포크**: `0`
- **상세 정보**: `0 (정상)`
- **시간 초과**: `0`
- **변경 사항 표시**: `Off`
- **작업 분할**: `1`
- **생성일**: `2025. 2. 12. 오후 1:34:51 (admin 기준)`
- **최종 업데이트**: `2025. 2. 12. 오후 1:36:50 (admin 기준)`
- **인증 정보**: `SSH: root-cred`
- **변수 (프롬프트 설정)**
```yaml
vm_name: "rocky-vm"
```
---
## **4. Playbook 실행 결과**
### ** 실행 로그**
```
SSH password:
PLAY [Deploy Rocky Linux 8.10 VM from Gold Image] ******************************
TASK [Gathering Facts] *********************************************************
ok: [kvm_host]
TASK [Ensure required packages are installed] **********************************
ok: [kvm_host]
TASK [Start and enable libvirtd service] ***************************************
changed: [kvm_host]
TASK [Copy Gold Image for new VM] **********************************************
changed: [kvm_host]
TASK [Print Copy Result] *******************************************************
ok: [kvm_host] => {
"msg": "Gold Image copied successfully to /data/libvirt/images/pool/rocky810-vm01-rocky8.10.qcow2"
}
TASK [Deploy Rocky Linux 8.10 VM using virt-install] ***************************
```
---
## ** 정리**
### ** 목표**
Ansible AWX를 사용하여 **Gold Image 기반으로 KVM에서 Rocky Linux 8.10 가상 머신을 자동으로 배포**하는 작업을 수행.
### ** 주요 작업**
1. **Ansible AWX 환경 구성**
- `lds-project`, `lds-inventory`, `kvm_host` 설정 완료.
- `deploy-rocky-linux-810-vm-from-gold-image.yaml` Playbook 작성.
2. **Gold Image 기반 VM 배포**
- 기존 **ISO 설치 방식이 아닌, Gold Image 복사 후 virt-install로 VM을 생성**하는 방식 적용.
- `4096MB RAM`, `2 vCPU`, `기본 네트워크(default)` 설정.
3. **Ansible AWX 템플릿 생성**
- 실행 환경 `AWX EE (latest)` 설정.
- SSH 인증 정보 (`root-cred`) 사용.
4. **Playbook 실행 결과**
- `libvirtd` 서비스 활성화.
- **Gold Image 복사 성공** (`rocky810-vm01-rocky8.10.qcow2` 생성됨).
- `virt-install --import`를 사용하여 VM 생성 및 실행 진행.
---
## ** 추가 개선 가능 항목**
1. **VM 상태 확인 후 없는 경우에만 배포**
- `virsh list --all`을 먼저 조회하여 VM이 없을 때만 생성하도록 수정 가능.
2. **Cloud-Init 적용하여 VM 초기 설정 자동화**
- VM 내부 네트워크 및 SSH 접근 자동 설정 가능.
3. **스토리지 풀 및 네트워크 다중 선택 지원**
- `vm_network`, `vm_disk_path` 등을 동적으로 설정하도록 Playbook 개선 가능.
4. **Ansible AWX Job 결과를 정리하여 이메일/Slack 알림 추가**
- 작업 완료 후, 결과를 자동으로 관리자에게 공유 가능.
---
### ** 결론**
이번 Ansible AWX 자동화 작업을 통해 **Gold Image를 활용하여 KVM에서 Rocky Linux 8.10 VM을 신속하게 배포**할 수 있었습니다.
이제 필요 시 **자동으로 VM을 생성하고 관리**할 수 있는 환경이 구축되었습니다.
- 이전글Ansible Playbook 실습 - 취약점 분석 점검 항목 - root 계정 원격 접속 제한 - 설계 1 25.02.13
- 다음글Ansible Playbook 실습 - 시스템 및 서버 관리 - 서버 프로비저닝 자동화 VM - 구현 1 25.02.11
댓글목록
등록된 댓글이 없습니다.