최근에 VMware 제품인 ESXi를 공부해야할 필요가 생겨서 공부를 하면서 정리를 해 보았습니다. 이제 공부를 처음 시작하는 것이기 때문에 어떤 내용들을 정리할 수 있을지 정하지는 않았지만 최대한 많이 자료를 접하면 정리가 될 것 같습니다.


VMware world TA8245-ESXi Internals - Better Understanding for Better Management and Troubleshooting

https://www.youtube.com/watch?v=Qq3H3yIh5UQ&list=WL&index=6&t=0s


자료가 VMworld 2010 자료라 현재는 내용이 달라졌을 수 있습니다. 큰 그림은 바뀌지 않았으리라 생각하고 정리해 봅니다.

Olivier Cremel 이라는 VMware의 Principal Engineer가 발표를 하는데 Linkedin을 보니 Google로 갔다가 다시 VMware로 컴백을 했습니다.


Files & Filesystems

어떤 부트 디바이스일 경우에도 단일 부팅 이미지로 되어 있고 모든 내용이 메모리로 로드가 된다고 합니다. 그래서 부트 디바이스에 문제가 발생 하더라도 운영에 문제가 없다고 합니다. Windows의 경우에는 일부 시스템 이미지가 로드 되지 않은 상태이고 페이지 아웃 까지 가능해서 부팅 디바이스가 문제가 생가면 1분 안에 시스템이 크래시 됩니다. 아무래도 가상화 부분만 담당하기 때문에 좀더 안정적으로 만들 수 있었던것 같습니다. 

ESXi의 베이스 이미지는 압축되어 있고 메모리에 압축이 해제되어 로드가 됩니다. VIB (VMware Installation Bundles) 파일은 압축이 해제되지 않고 Tardisks 라는 방식으로 Mount 됩니다. (https://blogs.vmware.com/vsphere/2011/09/whats-in-a-vib.html)

/etc 디렉토리에 있는 파일들은 persisted state files 로 (esx.conf, inetd.conf) tardisk에 위치라며 sticky로 설정된다. /var/spool/cron/root/cronjobs 와 같은 파일등은 running state가 유지되지 않는다. persisted state file 들은 root filesystem에 마운트되고 메모리에서 유지 관리 됩니다.

Persistence 파일들을 변경 하려면 rebuild를 하고 부트 디바이스에 저장을 해야 합니다.

Diskless, Stateless가 가능 합니다. Diskless는 부팅 한 후 부트 디바이스를 사용하지 않는 것이고 Stateless는 state 정보가 ESXi 로 부터 얻어지지 않습니다.

Archive 에서 Tardsk로 파일이 올라갑니다. VisorFS에 대한 상세한 기술 문서는 VMware lab에 있는데 다음번에 정리를 해보고자 합니다. (https://labs.vmware.com/vmtj/visorfs-a-special-purpose-file-system-for-efficient-handling-of-system-images)

vdf, vdu 명령으로 tardisk 의 사용률을 볼 수 있습니다.

state file은 /etc/vmware/esx.conf 파일에 있고 기본 환경에서 실행한 명령은 /tmp.cmd.log, /var/run/cmd.pid 에 있고 로그 파일은 /var/log/vmkernel.log에 있습니다.

Ramdisk 는 32MB 정도의 크기를 가지는데 90~95% 정도의 사용률을 보입니다. 버그나 비정상적인 상황(TSM에서 큰 파일을 다운받기)를 하지 않는 경우 디스크가 full 되는 일은 없는데 Ramdisk가 full 되면 시스템이 불안정한 상태가 됩니다. 이 경우 문제점을 찾은 후 조치를 취하거나 /var/log 파일을 삭제 하거나 Ramdisk 크기를 조절해서 조치해야 합니다. (https://kb.vmware.com/s/article/2001550)

컴포넌트를 live system에 설치 하는 것은 Ramdisk를 마운트 하고 tardisk 이미지를 Ramdisk에 다운로드하고 tardisk를 마운트 하는 작업으로 적절한 크기의 메모리가 있어야 하며 overcommitted 된 시스템에서는 해서는 안된다고 합니다.

Esxi의 디스크와 Filesystem 구조는 다음과 같습니다.

 


Agents & Execution environment

코어 실행 모듈은 vmkernel 이고 코어 익스텐션은 kernel 모듈, 드라이버가 있습니다. Idle, helper, Driver 는 시스템 권한으로 실행됩니다. 유저 레벨 프로세스도 있는데 여기서 유저 레벨은 End user를 의미하는 것이 아니라 실행 권한이 시스템 레벨이 아니라는 것입니다.

Userworld에는 어떤 일이 있을 수 있을까요?

Out of memory가 발생하면 random 으로 userworld 프로세스를 종료 합니다.

메모리 부족 현상이 발생하면 ENOMEM이나 NULL이 되고 Exception 핸들러가 없이 크래시되거나 행이 됩니다.

다른 Userworld에는 영향이 없으며 리소소를 많이 사용한 모듈이 종료 됩니다.

CPU 부족 현상이 발생하면 Userworld가 느려 집니다.

Remote CLI나 PowerShell CLI의 첫 엔트리 포인트는 hostd 입니다. hostd가 응답하지 않을 경우 DCUI를 사용하여 네트워크, 에이전트 등을 확인합니다. 이마저도 동작하지 않은다면 VMware support에 연락을 하고 TSM을 Enable 한 후 문제 해결을 합니다.

Ramdisk를 파일을 저장하는 용도로 사용하지 않아야 합니다. root filesystem에서 변경한 내용은 재부팅이 되면 삭제 됩니다.

Userworld 의 리소스 풀에는 제약이 있어서 너무 많은 명령을 실행하면 에러가 발생할 수 있고 CPU를 많이 사용하는 명령은 CPU 제한 때문에 행 상태로 보일 수 있습니다.

Userworld 는 일반적인 용도를 위한 것이 아닙니다. ps 결과는 vmkernel 월드의 결과를 보여주고 vsortfs 는 vdf와 vdu를 사용해서 사용률을 확인해야 합니다. Debug VID를 설치해서 추가적인 Troubleshooting command를 실행할 수 있습니다.


'Virtualization' 카테고리의 다른 글

ESXi Internal  (0) 2018.10.20

+ Recent posts