PowerCLI 자습서: VMware 인프라 관리

VMWare의 PowerCLI는 ESXi 지원 하드웨어의 가상화 관리자들을 위한 만능 인터페이스가 되고 있습니다. PowerShell과 PowerCLI를 사용하여 VMware를 관리하는 방법을 배우는 것은 여러분의 도구 상자에 강력한 추가가 될 것입니다. 이 PowerCLI 튜토리얼에서는 그것을 어떻게 할지에 대해 배우게 될 것입니다.

이 튜토리얼에서는 다음을 배울 수 있습니다:

  • PowerCLI를 사용하여 VMware 인프라에 연결하는 기본 사항
  • VMware 개체와 작업하기 위한 cmdlet에 익숙해지기
  • 자신을 탐색하기 위한 지식을 얻기
  • PowerCLI를 통해 VMware를 더욱 관리하기

시작해 봅시다!

필요한 것과 알아야 할 사항

이 PowerCLI 튜토리얼을 시작하기 전에, 우리 둘 다 동일한 페이지에 있는지 항상 확인하는 것이 중요합니다. 이 글에서는 다음을 가정하고 있습니다:

  • 기본적인 PowerShell 경험이 있다. 당신이 PowerShell 전문가일 필요는 없지만, PowerShell에 대해 어느 정도의 이해가 있다면 도움이 될 것입니다.
  • VMware ESXi 호스트 또는 vCenter 애플라이언스에 연결하여 테스트하고 있는 상태이다.
  • Windows(또는 Mac / Linux) 워크스테이션에서 작업 중이다.
  • PowerCLI가 이미 설치되어 있고 연결되어 있다. 그렇지 않다면, 이 PowerCLI 설치 문서를 확인하십시오.

I’ll be using PowerCLI v 11.4.0. I will be working from a Windows 10 workstation with Windows PowerShell 5.1, but you’re welcome to use PowerShell 6 instead as there’s feature parity for this tutorial.

PowerCLI로 ESXi 호스트에 대한 정보 수집하기

vSphere 환경의 가상 레이어에 들어가기 전에 물리 하드웨어 레이어를 검토하는 것이 좋습니다. VMware PowerCLI는 이를 위해 직접 정보를 수집하는 Get-VMHost라는 cmdlet을 제공합니다.

vCenter 서버 또는 ESXi 호스트에 연결된 상태에서 다음 cmdlet을 실행하십시오.

PS51> Get-VMHost
Get-VMHost

저는 두 개의 별도 ESXi 호스트를 관리하고 있는 vCenter Server Appliance에 연결되어 있기 때문에 관리되는 호스트에 대한 기본 정보를 제공받습니다. Get-VMHost를 사용하면 가상화 호스트의 하드웨어 기능을 검토할 수 있습니다. 그러나 기본적으로 Get-VMHost는 모든 정보를 반환하지 않습니다.

Get-VMHost cmdlet을 Format-List에 파이프로 연결하면 주어진 호스트에 대한 모든 정보에 대한 콘솔 출력을 얻을 수 있습니다.

Get-VMHost | Format-List

또는 더 구체적이고 선택적으로 작업 중인 VMHost 개체의 개별 속성만 선택할 수도 있습니다. 예를 들어:

PS51> Get-VMHost | format-list -Property State,LicenseKey,Version

이 보다 자세한 출력을 활용하면 가상화된 워크로드를 실행하는 하위 하드웨어에 대한 더 큰 시각을 제공할 수 있습니다. 특히 다음과 같은 정보가 있을 것입니다:

  • 라이선스 유효성 검사 정보
  • CPU/Memory 총량
  • 하드웨어 공급업체 모델
  • DNS 호스트 이름

검토 후, 이를 Export-CSV cmdlet을 사용하여 CSV 파일로 컴파일할 수 있습니다.

PowerCLI을 사용하여 VM 검사

이제 이 PowerCLI 튜토리얼에서 다른 주제로 넘어가서 특정 ESXi 호스트에 현재 있는 가상 머신을 검토하는 방법에 대해 알아보겠습니다.

Get-VM 명령은 VM 정보를 검토하는 데 유용한 명령입니다.

PS51> Get-VMHost -Name <Host FQDN> | Get-VM

이 cmdlet의 출력은 다음과 같을 것입니다:

PS51> Get-VMHost -Name | Get-VM

위의 출력은 특정 호스트에서 현재 실행 중인 VM의 전체 상태 목록을 제공합니다. 위의 예에서처럼 개별 호스트를 지정하지 않은 경우 각 후속 호스트와 해당 호스트의 VM에 대한 정보 표가 표시됩니다.

문제 해결 중에 특정 호스트에 있는 가상 머신의 수를 알아야 하는 경우 또는 VMware PowerCLI를 사용하여 ESXi 호스트 정보를 수집해야 할 필요가 있는 경우 이러한 cmdlet을 사용할 수 있습니다. 현재 사용 가능한 보고 기능이 점점 확장되고 있습니다!

PowerCLI를 사용하여 가상 스위치 검사

vCenter 클러스터의 가상 네트워크를 구성하거나 관리해야 하는 경우 모든 사용 사례에 대한 네트워킹 cmdlet의 전체 범위가 있습니다. vSphere 환경에서 구성된 가상 스위치를 보려면 다음을 사용합니다:

PS51> Get-VirtualSwitch

가상 네트워크 및 가상 스위치의 수에 따라 결과 목록이 상당히 크게 될 수 있습니다. 아래에서 보는 것처럼, 저는 단일 DSwitch 즉, 분산 가상 스위치를 가지고 있습니다.

다수의 ESXi 호스트가 클러스터에 있는 Enterprise vSphere 구현에서 DSwitches는 동일한 구성을 가진 여러 호스트에 가상 스위치와 포트 그룹을 배포하는 것을 간소화합니다. 이는 각 호스트에서 동일한 네트워크 구성을 수동으로 작성하는 수고를 덜어주며, 클러스터의 확장에 효과적인 방법입니다!

Get-VirtualSwitch

PowerCLI를 사용하여 가상 네트워크에 연결된 가상 머신을 찾는 방법

문제의 범위를 좁히기 위해 특정 네트워크에 연결된 가상 머신을 확인하고 싶을 때가 있습니다. 이를 위해 Get-VirtualPortGroup 명령을 사용할 수 있습니다. 이 PowerCLI 튜토리얼에서 이 cmdlet에 대해 알아보겠습니다.

A port group is essentially a virtual network. To display all port groups, run Get-VirtualPortGroup without any parameters. You should then see a listing of all virtual port groups present in your vSphere environment.

Get-VirtualPortGroup

해당 포트 그룹(나의 경우 DPortGroup)에 속한 모든 가상 머신을 찾으려면 아래 스크립트를 실행하면 됩니다. DPortGroup 값을 자신의 가상 포트 그룹의 이름으로 교체해야 합니다.

PS51> Get-VM | Where-Object { ($PSItem | Get-NetworkAdapter | where {$_.networkname -match "DPortgroup"})}

이 한 줄의 명령에서는 이 vCenter 애플라이언스에 있는 모든 가상 머신 목록을 가져와서 Where-Object cmdlet을 사용하여 네트워크 이름이 포트 그룹과 일치하는 가상 머신만 가져옵니다.

Getting VMs with only a specific port group

이 출력을 통해 어떤 기계가 각 네트워크에 연결되어 구성되어 있는지 확인할 수 있습니다.

VMware에서 특정 네트워크에 연결된 가상 머신을 찾고 분석하라는 요구가 있을 때, 이제 PowerCLI 보고 솔루션을 제공할 수 있게 되었습니다.

PowerCLI를 사용하여 VM의 OS 버전 정보 가져오기

VMware 내의 대부분의 관리 작업은 가상 머신 수준에서 수행됩니다. VM의 모든 하드 드라이브 크기 목록을 검색하거나 서버의 게스트 OS 버전을 가져오는 등의 작업 요청을 무수히 받을 수 있습니다.

이러한 작업은 대규모로 진행될 때 번거로울 수 있습니다. PowerCLI를 사용하면 몇 가지 중요한 cmdlet을 사용하여 이러한 작업을 간소화할 수 있습니다. 이 PowerCLI 튜토리얼에서 해당 cmdlet에 대해 알아보겠습니다.

아마도 한 번은 “VMware 클러스터에 Ubuntu 서버가 몇 개 있나요?”라는 질문을 받았을 것입니다. 그럼 아마도 많은 시간을 소비하여 답을 찾기 위해 vCenter에서 여기저기 클릭했을 것입니다. PowerCLI는 vCenter의 VM 개체를 확인하고 출력에 PowerShell 마법을 적용하여이 프로세스를 간소화할 수 있습니다.

다음 스크립트를 살펴보세요. 이 코드는 나중에 자세히 설명할 Get-View 명령을 사용하여 VMware 개체 속성을 검색하는 고급 방법임을 알아두세요. 이 경우에는이 방법으로 가장 쉽게 검색할 수 있는 중첩 속성을 수집하고 있습니다.

PS51> Get-VM | 
      Sort-Object -Property Name |
      Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") |
      Select-Object -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}}

위의 코드는 PowerCLI Get-VM cmdlet을 사용하여 가상 머신 목록을 검색하고, PowerShell Sort-Object cmdlet을 사용하여 해당 목록을 정렬하며, PowerCLI Get-View cmdlet을 사용하여 일부 개체 속성을 검색합니다.

내 환경에서 이를 실행하면 아래 결과가 생성됩니다. vCenter의 VM 이름, VMware의 가상 하드웨어가 게스트 운영 체제를 해석하는 방식인 구성된 OS 및 실제 운영 체제를 나타내는 실행 중인 OS가 표시됩니다.

Finding VMs based on various criteria

replicantScriptrunner 가상 머신이 클러스터에서 꺼져 있으면 Running OS 값이 표시되지 않습니다. 운영 체제는 VMware Tools 서비스에 의해 수집됩니다. 사용할 수 없으면 PowerCLI는 운영 체제 정보를 가져올 수 없습니다.

PowerCLI를 사용하여 CSV 보고서 생성하기

VMware Tools는 Windows 및 Linux 가상 머신을 위한 게스트 내부 서비스로서 하이퍼바이저에 추가 정보와 관리 기능을 제공합니다. 가장 일반적으로 깨끗한 종료, 운영 체제 정보 및 가상 머신의 고해상도 콘솔 보기가 제공됩니다.

A convenient way to report on and provide this information would be to pipe the above script into the Export-CSV  cmdlet. Export-Csv will create a CSV file with the same information you see in the console.

PS51> Get-VM | Sort-Object -Property Name | Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") |
Select -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}} | Export-CSV C:\report.csv -NoTypeInformation 

위의 코드를 실행한 후에는 Excel로 CSV 파일을 열어 보고서를 검토할 수 있어야 합니다.

CSV file of VM information

PowerCLI를 사용하여 가상 하드 디스크 검사하기

Get-Harddisk 명령은 또 다른 유용한 명령입니다. Get-HardDisk cmdlet을 사용하면 가상 머신에 연결된 가상 하드 디스크에 대한 정보를 검사할 수 있습니다.

예를 들어, exchange1 가상 머신에 연결된 가상 하드 디스크에 대한 정보를 조회하려면 다음을 실행할 수 있습니다:

PS51> Get-VM -Name exchange1 | Get-HardDisk | Format-List
Querying information about the virtual hard disk attached to the exchange1 VMs

일부 정보는 중복될 수 있습니다. 예를 들어, 용량을 KB와 GB로 표시하는 것은 중복될 수 있습니다. 그러나 StorageFormat (thin/thick 프로비저닝 유형)과 VMDK 파일 이름을 알고 있는 것은 가치가 있습니다.

예를 들어, 일반적인 문제를 발견하고 모든 VM 하드 디스크가 동일한 데이터 저장소 볼륨에 있으면 이러한 정보를 알고 있다면 문제 해결이 가속화될 수 있습니다.

PowerCLI를 사용하여 가상 네트워크 어댑터 검사하기

가상 머신의 하드 디스크 정보를 검토하는 것 외에도 가상 네트워크 어댑터를 확인할 수도 있습니다. 단일 가상 머신에 대한 이러한 속성을 확인하려면 Get-NetworkAdpter cmdlet을 사용할 수 있습니다.

PS51> Get-NetworkAdapter -VM myVM

이전에 동일한 네트워크에 있는 모든 가상 머신을 찾았다면, 이번에는 특정 가상 머신에 연결된 어댑터만 보고 싶을 것입니다.

Get-NetworkAdapter

이는 여러 개의 네트워크 어댑터에 연결된 가상 머신을 문제 해결하는 경우 유용합니다. 이를 통해 어댑터가 올바른 네트워크에 연결되어 있는지 빠르게 확인할 수 있습니다.

Invoke-VMScript를 사용하여 VM에서 PowerShell 스크립트 실행

Invoke-VMScript를 사용하면 VM 내에서 직접 PowerShell 코드를 실행할 수 있습니다. 네트워크 연결이 필요하지 않습니다. Hyper-V 환경에서 PowerShell Direct를 사용한 적이 있다면 유사한 경험이 될 것입니다.

원격 PowerShell 세션을 생성하거나 네트워크를 통해 Invoke-Command cmdlet을 사용하는 대신 Invoke-VMScript cmdlet을 사용하여 일반적인 WinRM 또는 SSH 연결 없이 명령을 직접 VM으로 전송할 수 있습니다.

예를 들어, exchange1이라는 VM에서 간단한 디렉토리 목록을 수행하려면 아래와 같이 ScriptText 매개변수의 값으로 dir C:\을 전달하면 됩니다.

PS51> Invoke-VMScript -VM exchange1 -ScriptText "dir C:\"

결과는 마치 VM 콘솔에서 명령을 실행한 것처럼 나타납니다. 그런 다음 Invoke-VMScript는 VM에서 실행된 명령의 모든 출력을 중계합니다.

Invoke-VMScript

이것은 기본적인 예제이지만, 원하는 대로 복잡해질 수 있습니다. 이 PowerCLI cmdlet은 ScriptText 매개변수 내에서 배치, PowerShell 또는 Bash 유형을 지정할 수 있습니다.

더욱 고급진 방법도 사용할 수 있습니다. 아래에서는 별도의 $script 변수를 사용하여 ScriptText 매개변수 입력에 대해 PowerShell 코드를 실행하는 방법을 볼 수 있습니다. 이를 통해 VM이 처리할 수 있는 더 맞춤형 스크립트 입력을 만들 수 있습니다.

PS51> $script = 'Get-Disk'

$guestCredential = Get-Credential

Invoke-VMScript -ScriptText $script -VM VM -GuestCredential $guestCredential  -ScriptType Powershell

ScriptText 매개변수 값은 문자열이어야 합니다. 이것이 $script 변수에 단일 외부 따옴표가 필요한 이유입니다.

GuestCredential 매개변수의 사용에도 주목하셨을 것입니다. 이 매개변수는 VM 운영 체제에 인증하기 위해 사용됩니다. 특히 다른 계정으로 스크립트를 실행하려는 경우에 유용합니다.

작동 중인 스크립트의 결과는 다음과 유사한 출력을 제공합니다.

Running a script on a VM with Invoke-VMScript

이 스크립트의 결과로 VM의 디스크 정보를 얻을 수 있습니다. 그에 따라 VMware Virtual Disk가 드라이브의 친숙한 이름으로 나타나므로 이것이 원격 VM임을 알 수 있습니다.

Get-View를 사용하여 고급 사용 방법

일부 기본 cmdlet에서는 ExtensionData라는 속성이 반환될 수 있습니다. PowerShell Get-Member cmdlet에 파이핑하여이 속성을 찾을 수 있습니다. 그게 무엇인지 궁금하다면 지금은 알아볼 기회입니다.

이 모험의 다음 단계는 Get-View cmdlet을 이해하는 것입니다. VMware PowerCLI는 Get-VM의 멋지고 간단한 출력을 제공하기 위해 VM에 대한 여러 가지 쿼리를 활용합니다. 그러나 Get-View cmdlet을 사용해야만 접근할 수있는 많은 부분이 있습니다.

이 cmdlet을 사용하는 스크립트를 많이 볼 수 있습니다. 이 cmdlet이 작동하는 것을 익히기 위해 시간을 투자하는 것이 좋습니다. 익숙해지려면 Get-View cmdlet을 사용하여 일부 가상 머신 정보(exchange1 예제에서)를 얻으십시오.

이 cmdlet의 Filter 옵션은 PowerShell 해시 테이블을 사용하며 개별 문자열 값은 사용할 수 없습니다. 고유한 스크립트를 작성할 때 이 점을 유의하십시오!

PS51> Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}

위의 명령의 결과는 VM에 대한 중첩된 구성 정보와 작업 수행 옵션의 많은 옵션입니다.

Get-View

위의 동일한 스크립트를 사용하여 출력을 변수에 보내면 점 표기법으로 해당 중첩 옵션을 검사할 수 있습니다. 여기에서는 PowerCLI를 통해 보고하려는 게스트 운영 체제의 모든 추가 정보를 볼 수 있습니다.

PS51> $VM = Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}
PS51> $VM.Guest
Using Get-View with the Filter Parameter

단일 속성을 선택하려면 다음을 실행하여 개별 값을 좁힐 수 있습니다.

PS51> $VM.Guest.GuestFullName

모든 종류의 VMware 개체에 대한 Get-View 옵션이 많이 있습니다. 이러한 옵션을 모두 살펴보고 이 강력한 cmdlet에 대해 자세히 설명하는 VMware의 유익한 기사를 확인해보세요!

VMware Code Capture – 클릭에서 학습하기

PowerCLI를 활용하고 싶지만 코드를 직접 작성하기 싫다면, vCenter의 Code Capture를 사용하세요. Code Capture는 Active Directory 관리 센터와 유사하게 작동하는 새로운 개발자 도구입니다. 이 PowerCLI 자습서에서 Code Capture를 다루어 보겠습니다.

이 도구는 GUI에서 수행하는 모든 작업을 기록합니다. 그런 다음 해당 작업을 PowerCLI 스크립트로 변환해 제공합니다.

기본적으로 Code Capture는 비활성화되어 있습니다. 활성화하려면 vCenter 어플라이언스를 열고 다음과 같이 이동하여 메뉴 -> 개발자 센터로 이동하세요.

Navigating to the Developer Center menu item in vSphere

개발자 센터 탭에 도착하면 Code Capture 활성화 옵션을 토글하세요.

Enabling code capture

Code Capture를 활성화하면 vCenter 헤더에 빨간색 기록 버튼이 표시됩니다. 활성화된 후에는 GUI 작업을 기록하고 PowerCLI 출력으로 변환하려면 기록 버튼을 눌러야 합니다.

Code capture enabled indicator

빨간색 기록 버튼은 vCenter에 로그인한 사용자 섹션 옆에 나타나므로 언제든지 기록할 수 있습니다.

코드 캡처를 시연하기 위해 새 가상 머신 생성 마법사를 따라가세요.

  1. 녹화 시작을 위해 녹화 버튼을 클릭하세요. 이로 인해 빨간색 녹화 버튼이 깜박이기 시작합니다.
  2. VMware 호스트를 마우스 오른쪽 버튼으로 클릭하고 새 가상 머신 생성을 선택하세요. 결과로 나오는 마법사를 통해 모든 기본값을 가진 새 가상 머신을 생성하세요.
  3. 가상 머신이 생성되면 녹화 버튼을 클릭하고 녹화를 중지하세요.

결과로 나오는 출력물은 예상보다 약간 더 자세할 수 있습니다. 출력물에는 가상 머신을 생성하기 전에 GUI를 탐색하는 모든 작업도 포함됩니다. 하지만 주석으로 표시된 CreateVM_Task로 시작하는 섹션을 확인할 수 있어야 합니다. 여기서 코드가 가상 머신을 생성하기 시작합니다.

아래는 코드 캡처를 통해 GUI를 통한 새 VM 마법사 프로세스의 일부분인 CreateVM_Task 출력입니다.

Developer Center generated code

이 출력은 약간 어려울 수 있지만, 가상 머신에 사용 가능한 구성 옵션의 수를 직접 노출시킵니다. 자신의 필요에 따라 스크립트를 수정하고 자유롭게 사용자 정의할 수 있습니다.

코드 캡처 유틸리티는 VM 생성에만 한정되지 않습니다. 네트워킹 변경, 작은 VM 수정 또는 호스트 구성 변경에 대한 코드도 생성할 수 있습니다. GUI 작업의 PowerCLI 출력을 검토할 수 있기 때문에 인프라를 코드로 배포하는 여정을 빠르게 진행할 수 있습니다.

PowerCLI 튜토리얼 요약

이 기사에서는 많은 내용을 다뤘습니다. 잘 하셨습니다! PowerCLI이 VMware 인프라 관리에 가져다주는 힘을 깨달으셨기를 바랍니다.

PowerCLI에는 다양한 제품 베이스에 대한 많은 cmdlet이 있지만, 여기서는 일부만 다루었습니다. 이 멋진 도구에 대한 더 많은 기사를 위해 이 블로그를 계속 지켜봐주시기 바랍니다!

추가 읽을거리

Source:
https://adamtheautomator.com/powercli-tutorial/