-
[Ansible] VMware 프로비저닝 자동화오픈소스 2021. 3. 31. 23:01
개요
Ansible(docs.ansible.com) 공식 사이트에 가보면 수없이 많은 모듈이 제공되는 것을 확인할 수 있다. 그 외 GitHub에 올라온 모듈들까지 합하면 정말 셀 수도 없이 많다. 그렇다면 서버 관리자로 일할 때 어떤 모듈과 기능을 사용할 수 있을까? 서버에 명령어를 수행시키고 결과를 가져오는 것도 가능할 것이고, 프로그램의 버전이 업그레이드되어 일괄로 업데이트하는 것도 가능할 것이다. 다만, 필자가 업무 하는 환경은 VMware 기반의 인프라가 크게 구성되어있고 이를 관리할 수 있는 방안을 원했다. 이에 VMware 프로비저닝 자동화 기능을 구현하였고 실무에 도입하여 15대의 신규 서버를 구성하는데 30분 완료라는 결과를 얻었다.
작업 내용 수립하기
그렇다면 신규 서버 구성이라는 내용은 어떤 항목을 포함하게 될까. 개인마다 혹은 그룹마다의 차이는 있겠지만 VMware를 기준으로 필자는 아래와 같은 단계를 거친다.
#1. 신규 VMware 생성하기 (OS 미설치 상태)
#2. OS 신규 설치
#3. VMTools 설치
#4. Hostname/IP 변경
#5. 서버 최적화 (취약점조치 및 세부 설정)
Ansible을 사용하여 #1~#3번까지 수행하고, #4~#5는 필자의 블로그에 있는 Window 자동화 이미지와 연동하여 구성하였다. 반복적으로 언급하지만 이 Playbook이 정답은 아니며 얼마든지 다양한 방법으로 활용할 수 있을 것이다. 그럼 이제부터 순차적으로 살펴보도록 하자.
Ansible ↔ vCenter 연동하기
소규모의 VMware 인프라가 아니라면 다수의 ESXi 서버를 설치한 뒤, 이를 하나의 vCenter로 묶어서 통합 관리한다. Ansible에서는 VMware에 대한 다양한 모듈을 제공하는데 대부분이 vCenter를 통하여 동작하도록 되어있으며 정리하면
Ansible Playbook → vCenter → ESXi → Guest VMware의 순서이다.
그리고 Ansible ↔ vCenter의 연동을 위하여 PyVmomi 모듈과 Python V2.6 이상의 버전이 필요하며 Ansible 자체가 Python2 이상에서 동작하기에 추가 모듈만 설치하면 된다. 아래 링크에서 가능하며 최신 버전으로 사용하면 된다.
인터넷이 가능한 환경이라면 명령어로 간단하게 설치할 수 있겠지만, 대부분의 서버는 차단된 경우가 많을 것이므로 설치 파일 다운로드하여 아래 명령어를 통해서 설치하면 된다.
# gzip -d /tmp/pyvmomi-7.0.1.tar.gz # tar -xvf /tmp/pyvmomi-7.0.1.tar # cd /tmp/pyvmomi-7.0.1 # python setup.py install
설치가 정상적으로 완료되었다면 테스트용 Playbook을 작성하여 실제로 VMware를 만들어보도록 하자. 아래는 예시일 뿐이며 모든 값은 테스트 환경에 맞도록 변경해야 한다. 간단하게 주석도 달아놓았으니 오타가 없도록 주의하여 작성하자. 모듈도 정상 설치되었고 오타도 없고 정상 값이 입력되었다면 신규 VMware가 생성될 것이다.
# vi /tmp/Making_VMware.yml - name: Create VMware vmware_guest: hostname: 10.10.10.10 // vCenter IP username: administrator@vsphere.local // vCenter 로그인ID password: Vmware1! // vCenter 로그인PW folder: /vm // VMware 생성 폴더 name: Ansible_VM // VMware 이름 state: poweredon // VMware 생성 후, 전원ON (반대는 powerdoff) guest_id: centos64Guest // GuestOS 호환성 종류 (다르면 부팅 불가함) esxi_hostname: 10.10.10.20 // Vmware가 위치할 ESXi IP disk: // 연결 Disk 정보 - size_gb: 10 type: thin datastore: datastore1 hardware: // 연결 CPU/MEM 정보 memory_mb: 512 num_cpus: 4 # ansible-playbook Making_VMware.yml -vvv
설치 미디어 연결하기
VMware는 생성되었는데 OS 설치에 필요한 미디어 연결 부분이 없다. 신규 Window VMware를 생성한다고 가정하고 미디어를 연결하는 구문을 추가하여 다시 생성해보도록 하자.
cdrom: // 연결 CPU/MEM 정보 - controller_type: ide // cdrom 장치 Type controller_number: 0 // 컨트롤러 번호 (특별한 이유가 없다면 0부터 시작) unit_number: 0 // cdrom 장치 번호 (컨트롤러 번호 사유와 동일) state: present // cdrom 상태 type: iso // cdrom 연결 미디어 종류 iso_path: "[Datastore1]/CentOS_V7_X86.iso" // ISO 경로
Playbook 변수 할당하여 사용하기
vmware_guest 모듈을 사용하여 작성하다보면 vCenter IP/ID/PW와 같이 반복적인 내용이 포함되는 것을 볼 수 있을 것이다. 계정 정보이기 때문에 파일 안에 모두 기재해둘 수도 없는 노릇인데, 이럴 경우에 사용자가 직접 입력하도록 하여 보안 이슈를 해소함과 동시에 필요한 내용들도 하나의 스크립트로 설정할 수 있다. 아래와 같이 추가로 작성해보자.
# vi /tmp/Making_VMware.sh #!/bin/bash echo -n "vCenter_IP : "; read vCenter_IP echo -n "vCenter_ID : "; read vCenter_ID echo -n "vCenter_PW : "; read vCenter_PW echo -n "Guest_Hostname : "; read Guest_Hostname echo -n "Guest_IP : "; read Guest_IP echo -n "Guest_SM : "; read Guest_SM echo -n "Guest_GW : "; read Guest_GW # ansible-playbook /tmp/MakeVM_VMware.yml -vvv -e "vCenter_IP=$vCenter_IP vCenter_ID=$vCenter_ID vCenter_PW=$vCenter_PW Guest_Hostname=$Guest_Hostname Guest_IP=$Guest_IP Guest_SM=$Guest_SM Guest_GW=$Guest_GW"
echo 명령어를 사용하여 각각의 필요한 변수를 사용자 입력을 통해 할당받고, Playbook 실행 시에 이 변수들을 자동으로 입력되도록 하는 내용이다. 중요한 것은 #ansible-playbook과 -e 옵션을 함께 사용해야 하는 것이다.
실제 VMware 생성하기
위에서 진행한 내용을 바탕으로 필자가 생성에 사용한 Playbook을 파일로 첨부한다. 서두에 언급했던 #1~#5까지 모두 수행하는 내용이라 설명되지 않은 내용들도 다수 포함되어있다. 다음 게시글에서도 이어서 설명할 테니 우선은 아래 값들을 참고하여 이해하는 정도에서 넘어가길 바란다. 그리고 테스트와 함께 추가로 발견된 이슈로 VMware가 내가 생성한 ESXi가 아닌 다른 호스트에서 생성되는 경우가 있었다. 참고하여 생성에 따른 IP 중복등의 문제가 발생하지 않도록 가능하다면 영향도가 없도록 주의해서 진행할 것을 권고한다.
마무리
본 글에서 다루는 것은 #2까지의 내용이다. 그 뒤에 내용들도 포함되어 있긴 하지만 다른 내용이 포함되어야 완성되므로 이어질 포스팅까지 참고해야 전체적인 내용을 마칠 수 있을 것이다. 이후 내용은 빠른 시일 내에 다룰 예정이며 WinSVR 설치 자동화 이미지를 사용해야 하므로 필자가 기술한 관련 게시글을 먼저 확인해보길 바란다.
궁금하신 내용은 댓글로 남겨주시고, 많은 블로그 방문은 저에게 큰 힘이 됩니다. ・ᴥ・
'오픈소스' 카테고리의 다른 글
[Ansible] Window Server 2019 업데이트 자동화 (5) 2022.03.29 [Ansible] VMware 프로비저닝 (VMtools 설치 및 초기 설정) (0) 2021.07.22 [Ansible] Window Server 업데이트 자동화 (0) 2021.03.03 [VisualSyslog] WINDOW에서 syslog 수집을 위한 오픈소스 (0) 2020.09.22 [Ansible] 인프라 구성 관리/변경 작업 자동화를 위한 오픈소스 (0) 2020.09.21