본문 바로가기

가상화/VMware Esxi

[VMware ESXi] ssh를 통한 VM 생성, 삭제 하기(1)

반응형

개요


  • 무료버전인 Esxi만을 사용하는 경우 라이선스에 의해 외부 API 사용이 금지 된다.
  • 이때 ssh를 통해 직접 vmx 파일을 생성, 등록하고, vmdk format 등을 통해 VM을 생성할 수 있다.

 

라이선스에 의한 오류 확인

  • ansible을 이용하여 ESXi에 직접 작업을 수행 할 경우
  • 'Current license or ESXi version prohibits execution of the requested operation.'  문구로 fail이 발생한다.
> ansible-playbook -i ../hosts 08.vmware.yml
PLAY [all] **************************************************************************************************************************************************************

TASK [Run command inside a vm] ******************************************************************************************************************************************
...
msg = 'Current license or ESXi version prohibits execution of the requested operation.',\n   faultCause = <unset>,\n   faultMessage = (vmodl.LocalizableMessage) []\n}"}

PLAY RECAP **************************************************************************************************************************************************************
              : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

 

 

스크립트를 통한 VM 생성


 

GitHub - josenk/esxi-vm-create: ESXi create VM utility using python and ssh.

ESXi create VM utility using python and ssh. Contribute to josenk/esxi-vm-create development by creating an account on GitHub.

github.com

 

  • 다운로드
git clone https://github.com/josenk/esxi-vm-create.git

 

  • 모듈설치
    • paramiko : ssh 모듈
yum install python-paramiko

 

  • VM 생성
    • VMware ESXi 6.7 사용
    • guest OS : vmware doc 참조
    • Microsoft Windows Server 2012(64비트) : windows8srv-64
    • Microsoft Windows Server 2016(64비트) : windows9srv-64
    • CentOS 7(64비트) : centos7-64
esxi-vm-create -H <Esxi ip> -U <Esxi ssh user> -n <vm name> -c <cpu 개수> -m <memory, GB> -v <volume, GB> --iso <마운트 iso> -N <연결할 네트워크> -g <guest OS>

 

 

  • VM 삭제
esxi-vm-destroy -H <ESXi ip> -U root -P <password> -n <VM name>

 

 

스크립트 수정


ESXi 버전 변경

  • VM 생성 시 호환성에 표기되는 esxi 버전이 기본 "VM 버전 8" 이 적용되는데 ESXi 6.7의 경우 "VM 버전 14"

vim esxi-vm-create
...
VMX.append('virtualHW.version = "8"') -> VMX.append('virtualHW.version = "14"')

 

CPU Vaildate 수정

  • 무료버전인 ESXi는 최대 CPU Core 8개를 지원하므로 수정
vim esxi-vm-create
...
#  Check CPU
if CPU < 1 or CPU > 128:
    print str(CPU) + " CPU out of range. [1-128]."
    ErrorMessages += " " + str(CPU) + " CPU out of range. [1-128]."
    CheckHasErrors = True
...

# 변경
#  Check CPU
if CPU < 1 or CPU > 8:
    print str(CPU) + " CPU out of range. [1-8]."
    ErrorMessages += " " + str(CPU) + " CPU out of range. [1-8]."
    CheckHasErrors = True

 

 

default 값 변경

  • esxi_vm_functions.py 의 setup_config() 함수
  • 최초 실행시만 적용
vim esxi_vm_functions.py

def setup_config():

    #
    #   System wide defaults
    #
    ConfigData = dict(

        #   Your logfile
        LOG= os.path.expanduser("~") + "/esxi-vm.log",

        #  Enable/Disable dryrun by default
        isDryRun=False,

        #  Enable/Disable Verbose output by default
        isVerbose=False,

        #  Enable/Disable exit summary by default
        isSummary=False,

        #  ESXi host/IP, root login & password
        HOST="esxi",
        USER="root",
        PASSWORD="",

        #  Default number of vCPU's, GB Mem, & GB boot disk
        CPU=2,
        MEM=4,
        HDISK=20,

        #  Default Disk format thin, zeroedthick, eagerzeroedthick
        DISKFORMAT="thin",

        #  Virtual Disk device type
        VIRTDEV="pvscsi",

        #  Specify default Disk store to "LeastUsed"
        STORE="LeastUsed",

        #  Default Network Interface (vswitch)
        NET="None",

        #  Default ISO
        ISO="None",

        #  Default GuestOS type.  (See VMware documentation for all available options)
        GUESTOS="centos-64",

        # Extra VMX options
        VMXOPTS=""
    )

 

  • "-u" 옵션을 지정하지 않으면 default 값은 계정 홈디렉토리에 히든파일로(.esxi-vm.yml)로 생성 됨
  • 이 후 VM 생성 시에 히든 파일을 참조 하게 되므로 default 값 변경을 원할 경우 히든파일을 수정하면 됨
parser.add_argument("-u", "--updateDefaults", dest='UPDATE', action='store_true', help="Update Default VM settings stored in ~/.esxi-vm.yml")

 

 

Disk Provisioning

  • default diskformat는 "thin" 프로비저닝 방식이며 "thick" 방식으로 변경할 경우 "zeroedthick", "eagerzeroedthick" 두가지 방식으로 변경 가능함.
  • zeroedthick의 경우 Lazy zeroed disk 방식으로 느리게 비워지며, eagerzeroedthick의 경우 Eager zeroed disk 방식으로 빠르게 비워진다.
  • 참조 : https://ploz.tistory.com/entry/VMware-ESXi-thin-thick-provisioning
  • 문제 발생 : 스크립트를 통해 "eagerzeroedthick" 방식으로 생성한 경우 vmkfstool 진행이 느린 탓인지 온전히 formatting 이 되지 않는 문제가 발생함.
  • 수동으로 vmx -> vmdk -> vm register 으로 VM을 생성한경우 이상없음.

 

vSCSI Controller

  • 참조 : https://ploz.tistory.com/entry/VMware-ESXi-vSCSI-Controller
  • 스크립트 상에 기본적으로 "pvscsi" 방식으로 vmx 파일을 생성하게 됨
  • 윈도우(win 2k12)의 경우 pvscsi 방식인 경우 드라이버 로드가 안되어 설치가 진행되지 않음.
  • 따라서 LSI Logic SAS 방식인 "lsisas1068" 으로 변경하여 진행하는 것이 좋음.
  • 단 IOPS가  높은 서비스의 경우  pvscsi가  성능상의 우위가 있음.
> vim esxi-vm-create 
...
#      Create the VM
#
VMX = []
...
VMX.append('scsi0.virtualDev = "pvscsi"')
...

# 변경
VMX.append('scsi0.virtualDev = "lsisas1068"')
  • 리눅스의 경우는 "pvscsi" 사용.

 

Ethernet Adapter

  • 스크립트 상에 기본적으로 "vmxnet3" 드라이버가 올라감.
  • 윈도우(win 2k12)의 경우 "vmxnet3" 드라이버가 없어 잡히지 않는 경우가 있음.
  • 따라서 윈도우는 "e1000e" 드라이버를 사용하면 별도의 드라이버로드 없이 설치후 사용이 가능함
> vim esxi-vm-create 

#      Create the VM
#
VMX = []
...
if NET != "None":
    VMX.append('ethernet0.virtualDev = "vmxnet3"')
...


# 변경
VMX.append('ethernet0.virtualDev = "e1000e"')

 

  • vmxnet3 드라이버 사용을 위해서는 "VMware tools" 설치를 통해 사용 가능함.
  • vmxnet3은 e1000e 보다 약 2배 가량의 성능상의 이점이 있음.

 

[VMware ESXi] ssh를 통한  VM 생성, 삭제 하기(2) 에서 VMware ESXi 6.7 버전에 맞게 스크립트를 수정.

반응형