Ansible Playbook 실습 - 시스템 및 서버 관리 - 서버 프로비저닝 자동화 VM - 구현 2 > Ansible 자료실

본문 바로가기
사이트 내 전체검색

Ansible 자료실

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

페이지 정보

profile_image
작성자 꿈꾸는여행자
댓글 0건 조회 2,846회 작성일 25-02-12 14:22

본문

안녕하세요.

 

꿈꾸는여행자입니다.

 

 

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을 생성하고 관리**할 수 있는 환경이 구축되었습니다.


댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : (주)리눅스데이타시스템
대표이사 : 정정모
본사 : 강남구 봉은사로 114길 40 홍선빌딩 2층
- tel : 02-6207-1160
대전지사 : 유성구 노은로174 도원프라자 5층
- tel : 042-331-1161

접속자집계

오늘
653
어제
2,542
최대
8,445
전체
2,035,405
Copyright © www.linuxdata.org All rights reserved.