서버 가상화(Server Virtualization) - Ansible 실습 : SSH 연결, vCenter Server VM 관리
2024-10-17(THU)
1. Windows Server Command - For Ansible Script
1-1. Windows Server 2022 powershell ISE 실행
(1) ISE 실행 시 작업 관리자로 실행
(2) 위의 Ansible Script를 작성한다.
(3) 각 커맨드 라인에서 상단에 표시한 Running Selection을 누르면 한 줄씩 스크립트를 실행할 수 있다.
(4) sshd 서비스를 start-sevice로 Running 모드로 변경한다.
1-2. Windows 10에서 Rocky Linux로 원격 접속 가능한지 Visual Studio에서 확인
(1) 위와 같이 접속 가능하다면 작업 가능한 상태다.
2. Ansible LAB(Rocky Linux >> Windows Server SSH Connection
2-1. ansible.cfg 파일 작성
2-2. inventory 파일 작성
2-3. Rocky에 접속 : ansible-work 디렉터리에 생성한 파일 존재 확인
(1) 생성한 두 파일이 확인된다.
(2) known_hosts 파일에 접속하면 SSH 호스트에 대한 접속 정보가 확인된다.
(3) 해당 파일의 내용을 nano 에디터를 열어 모두 지운다.
(4) 위와 같이 Windows 서버에 접속을 시도해본다. 접속 성공 시 known_hosts 파일에 접속 정보가 남게 된다.
2-4. win_ssh.yml 파일 작성
(1) win_ssh.yml 파일까지 작성한다.
(2) win_ssh.yml 파일을 실행하기 전 Rocky Linux의 /etc에서 nano hosts 명령어로 에디터를 열어서 윈도우 서버 접속 정보를 적어둔다.
2-5. win_ssh.yml 파일 실행
(1) ansible-playbook win_ssh.yml 커맨드로 해당 yml 파일을 실행시킨다.
(2) 성공하면 위와 같이 출력결과가 나타난다.
(3) 지금까지 리눅스 서버에서 윈도우 서버로 SSH를 통해 접속하는 과정을 정리했다.
3. Windows Server에서 Apache 서비스 설치
3-1. win.apache.yml
3-2. 변수 수정 후 (win2022 → winserver) inventory
3-3. 실행 결과
(1) 접속은 가능하나 네트워크의 속도가 느려서 Apache 서비스를 설치하려고 하지만 Timeout이 나게 된다.
(2) Windows Server, Windows10, Rocky Linux를 모두 VM-Network의 주소 대역으로 변경한 후 진행해 볼 수 있다.
4. VMware vCenter Server 관리
(1) pip pinstall pyvmoi pyvim 커맨드 수행
(2) 가상화 환경에 대한 경고 메시지가 나타난다.
(3) 루트 디렉터리를 기준으로 ansible-vmware라는 새로운 디렉터리를 생성한다.
(4) 방금 생성한 디렉터리로 Windows 10 VS Code 에서 원격 접속을 통해 변경한다.
4-1. 파일 생성 : inventory
4-2. ansible.cfg
4-3. requirements.yml
(1) ansible-galaxy install -r requirements.yml
(2) 해당 명령어는 Ansible Galaxy에서 역할(role)을 설치하기 위해 사용된다. -r 옵션으로 요구사항을 명시할 수 있으며 설치할 역할의 이름 버전 등의 정보를 포함한다.
4-4. vars.yml
4-5. vm_info.yml
(1) nano /etc/ansible/hosts 명령으로 에디터에 접속한다.
(2) vCenter Server에 대한 자동화를 위해 vCenter 서버의 주소 대역을 추가한다.
(3) 가상 시스템의 정보를 출력하기 위한 vm_info.yml 스크립트를 작성한다.
(4) 모든 .yml 구성을 완료하고 ansible-playbook vm_info.yml 커맨드를 수행해서 위와 같이 특정 가상 시스템에 대한 모든 정보를 불러오면 된다.
4-6. 스크립트를 사용해서 VM 종료 : vm_stop.yml
(1) 스크립트 실행 이전 esxi-03 호스트의 VM은 전원이 켜져 있다.
(2) 위와 같이 VM의 전원 종료를 위한 스크립트인 vm_stop.yml을 작성한다.
(3) 또한 vmware_guest_powerstate 키값의 경우 내부에 datacenter를 사용하는 것을 더 이상 지원하지 않는다고 한다. 따라서 guest shutdown 작업은 오류가 나며 수행되지 않는다. ignore_errors 키로 인해서 오류가 나더라도 작업이 멈추지 않고 다음 스크립트로 넘어가게 된다.
(4) 따라서 poweroff 작업의 경우 datacenter가 없기 때문에 작업이 정상적으로 수행된다.
(5) state: shutdown-guest의 경우 가상 시스템의 운영체제를 통해 시스템을 종료하고 state: powered-off는 가상 시스템의 물리적인 전원 버튼을 통해 시스템을 종료한다.
(3) ansible-playbook vm_stop.yml 커맨드를 수행하면 위와 같이 작업이 수행된다.
(4) vCenter Client에 접속해 보면 전원이 종료된 것을 확인할 수 있다.
4-7. VM 전원 시작 : vm_start.yml
(1) 이전 작업으로 인해 VM의 전원이 종료된 상태다.
(2) 위에서 설명한 것처럼 vmware_guest_powerstate 키를 사용하므로 datacenter 라인을 주석 처리했다. 오류도 발생하지 않을 것이므로 ignore_errors 키도 주석 처리한다.
(3) 오류가 발생하지 않고 시스템이 정상적으로 켜지는 것을 확인할 수 있다.
(4) 선택한 가상 시스템의 전원이 켜졌다.
4-8. VM Snapshot Creation : snapshot_create.yml
(1) 위와 같이 가상 머신의 스냅샷 생성을 위한 snapshot_create.yml 스크립트 파일을 생성한다.
(2) vmware_guest_snapshot : 가상 시스템의 스냅샷 생성
(3) snapshot_name은 관리자가 자유롭게 설정, folder는 스냅샷이 생성되는 가상 시스템을 탐색하기 위한 경로를 적는다.
(4) state: present / absent (스냅샷 생성 / 삭제)
(5) 스크립트를 실행시키면 스냅샷이 생성된 것을 확인할 수 있다.
4-9. VM Snapshot Delete: snapshot_delete.yml
(1) 삭제 시 snapshot_name에 삭제할 스냅샷의 이름을 직접 명시한다. 만약 존재하지 않는 스냅샷이라면 삭제되지 않는다.
(2) 위와 같이 실제로 changed 값에 변화(0이 아닌 값)가 있어야 스냅샷이 삭제된 것이고 changed = 0이라면 작성한 스크립트상으로는 구문 오류가 없어서 작업이 수행된 것처럼 보이지만 실제로 삭제되지는 않은 상태다. 즉, 관리자가 의도한 작업이 실제로 수행되지 않은 것이다.
(3) 위와 같이 명시한 스냅샷이 삭제된 것을 확인할 수 있다.
4-10. VM Creation : create_vm.yml
(1) 가상 머신을 생성하기 위해 create.vm.yml 파일을 위와 같이 작성한다.
(2) 현재 특정 클러스터가 아닌 호스트 내부에 생성했다.
(3) 또한 부팅 디스크 인식을 위한 cdrom, type, iso_path(로컬 스토리지 내부 Windows 10), controller_number, unit_number를 사용했다.
(4) 스크립트를 실행하면 changed 값이 1이므로 가상 시스템이 생성된 것을 예측해 볼 수 있다.
(5) 스크립트에서 지정한 name: esxi-03-win10(2) 이름 그대로 가상 시스템이 생성되어 윈도우 이미지로 부팅되는 것을 확인할 수 있다.
(6) 가상 시스템에 접속해 보면 Windows 설치 관리자가 확인된다.
- Ansible을 이용한 VMware 환경 자동화 Reference(공식 문서)
https://docs.ansible.com/ansible/latest/collections/community/vmware/index.html
※ 해당 포스팅을 기준으로 내용 추가가 필요하다고 생각되면 기존 내용에 다른 내용이 추가될 수 있습니다.
개인적으로 공부하며 정리한 내용이기에 오타나 틀린 부분이 있을 수 있으며, 이에 대해 댓글로 알려주시면 감사하겠습니다!