# VMWare

# [서울대병원] wd api 사용 중 "502 Bad Gateway" 에러 발생

\# 증상

\- wd analyzer api 사용 중 "502 Bad Gateway" 에러 발생

\# 원인

\- 리눅스 named 서비스 종료 됨 (리눅스 로그상 1/19 15시 종료 됨)

\- named 서비스 확인 (명령어 : systemctl status named)

\# 조치

\- named 서비스 시작 (명령어 : systemctl start named)

\- pod 상태 확인 및 재시작

<span style="color: rgb(224, 62, 45);">**\# 특이 사항 (사내 서버 테스트 내용)**</span>

\- bastion named 서비스가 종료되어도 wd api 사용 가능

\- cp4d web 접속 및 로그인 가능

\- openshift web 접속 불가

<span style="color: rgb(224, 62, 45);">**&lt;= 원인을 파악 방안에 대해 조사 또는 관련 senior들의 견해나 확인 방법 의논 필요함 <span style="color: rgb(0, 0, 0);">(박성진)</span>**</span>

# [삼성리서치] wd 개발 서버 rabbitmq pod 재시작 불가 에러

\# 증상

\- wd 개발 서버에 인덱싱 안되어 rabbitmq pod 재시작

\- rabbitmq pod 2개중 1개 재시작 불가

\# 원인

\- wd 개발 서버 리스소 부족으로 해당 워커 노드에 pod 배포 불가

\# 조치

1\. rabbitmq pod 배포 불가능한 워커노드 확인

\- 명령어 : oc get pod -o wide | grep rabbitmq

2\. 위 1번에서 확인한 워커노드에 pod 배포 안되도록 설정

\- 명령어 : oc adm cordon &lt;worker node name&gt;

3\. 배포 안됐던 rabbitmq pod 삭제

\- 명령어 : oc delete pod &lt;rabbitmq pod name&gt; --force=true

\- pod가 삭제되고 다른 워커노드에 pod 배포 확인

4\. 위 2번에서 워커노드 pod 배포 안되록 설정했던 내용 원복

\- 명령어 : oc adm uncordon &lt;worker node name&gt;

<span style="color: rgb(224, 62, 45);">**&lt;= 근본 원인이라고 한 위의 서버리소스 부족인지는 어떻게 확인 가능합니까?**</span>  
<span style="color: rgb(224, 62, 45);">**&lt;= 리소스 부족 해소 방법은 무엇인지?**</span>

# VM 인스턴스 실행 불가능 ESXi/ESX error: No free space left on device

<div id="bkmrk-"></div><div id="bkmrk-%23-%EC%A1%B0%EC%B9%98-%EB%82%B4%EC%9A%A9">**\# 조치 내용**</div><div id="bkmrk-1.-vmware-firmware-%28">1. VMware firmware (OS) Update: 보안 패치 및 안정성, 버그 수정 등 23년 1월 정기 패치 팩
2. 각 VM에 sched.swap.vmxSwapEnabled : False 항목 추가
3. 각 VM에 할당 된 메모리를 162G -&gt; 160G로 변경 및 인스턴스 시작 시 fixed 100% 메모리 할당이 아닌 1/3만 할당하고, 이용률에 따라 추가 할당하는 것으로 변경

</div><div id="bkmrk--0">  
</div><div id="bkmrk-%23-%EC%9B%90%EC%9D%B8">**\# 원인**</div><div id="bkmrk-%EC%9E%90%EC%9B%90%EC%9D%84-100%25-%ED%95%A0%EB%8B%B9%ED%95%98%EC%97%AC-%EC%97%AC%EB%B6%84%EA%B3%B5%EA%B0%84%EC%9D%B4-">자원을 100% 할당하여 여분공간이 없음으로 인해 발생한 현상임. 통상 10%의 여유공간 (margin)을 추는 것을 권고하고 있음.</div><div id="bkmrk--2">  
</div><div id="bkmrk---memry-512g-%EC%A4%91-vmwar">- Memry 512G 중 VMWare 자체와 bastion을 띄우면 488G의 메모리가 남음. 3등분 하여 162G씩 할당한 것으로 보임.
- Storage 4.24TB를 100% VM에 할당 함.

</div><div id="bkmrk--3">  
</div><div id="bkmrk--4">  
</div><div id="bkmrk-%23-%EB%B6%84%EC%84%9D">**\# 분석**</div><div id="bkmrk-vmware%EB%8A%94-%EA%B8%B0%EB%B3%B8-%EC%98%B5%EC%85%98%EC%9C%BC%EB%A1%9C-memo">VMWare는 기본 옵션으로 memory overcommit에 대비하여, 개별 VM 인스턴스 당 스왚파일을 생성 함.</div><div id="bkmrk-%EC%9D%B4-%EC%8A%A4%EC%99%9A-%ED%8C%8C%EC%9D%BC%EC%9D%80-%ED%95%B4%EB%8B%B9-vm%EC%9D%B4-%EA%B0%80%EC%A7%84-%EB%A9%94"><div>1. 이 스왚 파일은 해당 VM이 가진 메모리 총량과 동일한 크기임.
2. 이 스왚이 생기는 이유는 메모리 공유 기능을 이용하여 물리 메모리가 10G인데 실제 VM에는 20G를 할당할 수 있기에, 오버 커밋이 발생하여 물리 메모리가 모자란 경우 디스크에 있는 스왚파일을 메모리 처럼 이용하기 위한 기능
3. 그러나 일산병원의 시스템은 메모리를 오버커밋 하지 않고 100% VM에 맞게 할당하여 이 기능이 필요 없음
4. 이 기능을 끔으로서 메모리 크기와 같은 디스크 공간인 0.5G를 확보 함.
5. 현재 전체 공간 4.24TB 중 사용 3.77TB

</div></div><div id="bkmrk-1%29-%EC%9D%B4-%EC%8A%A4%EC%99%9A-%ED%8C%8C%EC%9D%BC%EC%9D%80-%ED%95%B4%EB%8B%B9-vm%EC%9D%B4-%EA%B0%80"></div><div id="bkmrk--6"></div><div id="bkmrk-%EA%B7%B8%EB%9F%AC%EB%A9%B4-%EA%B8%B0%EC%A1%B4%EC%97%90%EB%8A%94-%EC%99%9C-%EB%AC%B8%EC%A0%9C%EA%B0%80-%EC%97%86%EC%97%88%EB%82%98%3F">**그러면 기존에는 왜 문제가 없었나?**</div><div id="bkmrk-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%ED%95%A0%EB%8B%B9-%EB%B0%A9%EC%8B%9D%EC%9D%B4-thin-pro">스토리지 할당 방식이 Thin Provisioning 방식이었기 때문임.</div><div id="bkmrk-thin-provisioning%C2%A0%EC%9D%80-">Thin Provisioning 은 처음부터 고정 공간으로 디스크를 할당하는 것이 아닌, 사용한 만큼만 디스크를 자치하게 되어있음.  
</div><div id="bkmrk-%EC%A0%84%EC%B2%B4-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80-%EA%B3%B5%EA%B0%84%EC%9D%84-vm%EC%97%90-100%25">전체 스토리지 공간을 VM에 100% 할당하기는 했으나, 시스템 초기에는 공간이 남아있어 문제가 없었을 것이고, 시간이 지남에 따라 메모리 스왚 기능과 겹쳐 공간 부족을 야기 함.</div><div id="bkmrk--7">  
</div><div id="bkmrk--8">  
</div><div id="bkmrk-vm%EC%9D%B4-%EC%8B%A4%EC%A0%9C-%EC%93%B0%EB%8A%94-%EC%82%AC%EC%9A%A9%EB%9F%89%EC%9D%80-%EB%A7%A4%EC%9A%B0-%EC%A0%81%EB%8B%A4">**VM이 실제 쓰는 사용량은 매우 적다. 공간이 부족한 것이 맞는가?**</div><div id="bkmrk-%ED%98%84%EB%8C%80%EC%9D%98-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%97%90%EC%84%9C-%ED%8C%8C%EC%9D%BC%EC%9D%84-%EC%A7%80%EC%9A%B8-">현대의 파일 시스템에서 파일을 지울 때 실제로는 지우는 것이 아니고, 인덱스에서만 제거하고 포인터만 옮겨갑니다.</div><div id="bkmrk-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%84-%EC%93%B0%EB%A9%B4%EC%84%9C-%EC%9E%84%EC%8B%9C-%ED%8C%8C%EC%9D%BC%EC%9D%B4-%EC%83%9D%EC%84%B1%EB%90%98%EA%B3%A0">시스템을 쓰면서 임시 파일이 생성되고 사라지는데, 실제로 지워지는 건 아니고 다만 빈 공간으로 포인터만 옮겨 간 것임.</div><div id="bkmrk--9">  
</div><div id="bkmrk-%EB%95%8C%EB%AC%B8%EC%97%90%C2%A0thin-provisionin">때문에 Thin Provisioning 된 디스크는 시간이 지남에 따라 그 크기가 커지게 됩니다. 그리고 어느 시점에 이르러 디스크 부족 사태를 야기하게 됩니다.</div>

# 기타



# USB 장치에 VMFS를 만들어 ESXi 시스템에서 사용하기

**\# USB를 호스트에서 사용할 수 있도록 설정 변경**

ESXi 시스템에 USB 장치가 연결 되면 ESXi는 이걸 VM에서만 인식할 수 있는 형태로 인식한다. 때문에 호스트인 ESXi에서 사용하기 위해서 약간의 설정 변경이 필요하다.

방법 1 - Disable usbarbitrator service  
Navigate to ESX &gt; Configure &gt; System &gt; Advanced System Settings and click "Edit"  
Search for USB.arbitratorAutoStartDisabled and set the Value to 1  
Reboot the ESXi

방법 2 alternative option  
Connect to the ESXi host with SSH  
Stop the USB arbitrator service.  
 /etc/init.d/usbarbitrator stop  
Permanently disable the USB arbitrator service after reboot.  
 chkconfig usbarbitrator off  
No reboot is required

  
**\# USB 장치에 VMFS 파티션 만들기**  
USB 장치는 GUI 환경에서는 다룰 수 없기에 콘솔에 접속할 수 있어야 한다.

호스트 -&gt; 관리 -&gt; 서비스 항목으로 이동,  
TSM-SSH를 활성화 해준다.

콘솔에 접속해서 **vdq -q** 명령을 통해 장치를 확인.

```bash
[
   {
      "Name"     : "naa.5000cca2b089ea6c",
      "VSANUUID" : "",
      "State"    : "Ineligible for use by VSAN",
      "Reason"   : "Has partitions",
"StoragePoolState": "Ineligible for use by Storage Pool",
"StoragePoolReason": "Has partitions",
      "IsSSD"    : "0",
"IsCapacityFlash": "0",
      "IsPDL"    : "0",
      "Size(MB)" : "11444224",
    "FormatType" : "512e",
   "IsVsanDirectDisk" : "0"
   },

   {
      "Name"     : "mpx.vmhba32:C0:T0:L0",
      "VSANUUID" : "",
      "State"    : "Ineligible for use by VSAN",
      "Reason"   : "Has partitions",
"StoragePoolState": "Ineligible for use by Storage Pool",
"StoragePoolReason": "Has partitions",
      "IsSSD"    : "0",
"IsCapacityFlash": "0",
      "IsPDL"    : "0",
      "Size(MB)" : "117348",
    "FormatType" : "512n",
   "IsVsanDirectDisk" : "0"
   },

   {
      "Name"     : "t10.NVMe____Samsung_SSD_970_PRO_512GB_______________E93640115C382500",
      "VSANUUID" : "",
      "State"    : "Ineligible for use by VSAN",
      "Reason"   : "Has partitions",
"StoragePoolState": "Ineligible for use by Storage Pool",
"StoragePoolReason": "Has partitions",
      "IsSSD"    : "1",
"IsCapacityFlash": "0",
      "IsPDL"    : "0",
      "Size(MB)" : "488386",
    "FormatType" : "512e",
   "IsVsanDirectDisk" : "0"
   }
]
```

위와 같은 결과 값이 나오는데, USB 장치는 보통 mpx. 으로 시작한다.

**\# 파티션 작업**  
먼저 파티션 테이블을 만들어야 한다. VMWare에서는 GPT 형식만 지원한다.

```bash
partedUtil mklabel /dev/disks/mpx.vmhba32:C0:T0:L0 gpt
```

  
이제 제대로 만들어 졌는지 확인 해 보자.

```bash
partedUtil getptbl /dev/disks/mpx.vmhba32:C0:T0:L0 

gpt
14959 255 63 240328704
```

라고 나오면 정상이다. 숫자는 디스크 크기에 따라 다르다.  
참고로 위의 숫자의 의미는 다음과 같다.

[![rtaImage.jpg](http://138.2.116.150/uploads/images/gallery/2023-01/scaled-1680-/rtaimage.jpg)](http://138.2.116.150/uploads/images/gallery/2023-01/rtaimage.jpg)

파티션을 만들기 위해서는 마지막 섹터를 알아야 하는데, 마지막 숫자에서 2048을 뺀 숫자가 된다.  
위의 예제에서는 240328704 - 2048 = 240326656 이 마지막 섹터가 된다.

이제 파티션을 만들어 보자.

partedUtil setptbl /dev/disks/mpx.vmhba32:C0:T0:L0 gpt "1 2048 &lt;마지막 섹터&gt; AA31E02A400F11DB9590000C2911D1B8 0"

와 같은 형식이고, AA31E02A400F11DB9590000C2911D1B8의 의미는 파티션 형태가 VMFS라는 뜻이다.  
partedUtil showGuids 명령을 통해 VMWare ESXi에서 만들수 있는 파티션 GUID의 목록을 볼수 있다.

위의 예제에서는

```bash
partedUtil setptbl /dev/disks/mpx.vmhba32:C0:T0:L0 gpt "1 2048 240326656  AA31E02A400F11DB9590000C2911D1B8 0"
```

라고 입력한다.

```bash
gpt
0 0 0 0
1 2048 240326656 AA31E02A400F11DB9590000C2911D1B8 0
```

처럼 결과가 나오면 성공한 것이다.

  
**\# 데이터스토어를 만들고 이를 시스템에 탑재하기**  
명령의 형식은 아래와 같다.

vmkfstools -C vmfs6 -S &lt;이름&gt; /dev/disks/&lt;deviceID&gt;:1

이름은 내가 원하는 DataStore의 이름이고, &lt;deviceID&gt;:1에서 :1은 해당 장치의 첫 번째 파티션이라는 의미이다.

```bash
vmkfstools -C vmfs6 -S usb_store /dev/disks/mpx.vmhba32:C0:T0:L0:1
```

실행 해보자.

```bash
create fs deviceName:'/dev/disks/mpx.vmhba32:C0:T0:L0:1', fsShortName:'vmfs6', fsName:'usb_store'
deviceFullPath:/dev/disks/mpx.vmhba32:C0:T0:L0:1 deviceFile:mpx.vmhba32:C0:T0:L0:1
ATS on device /dev/disks/mpx.vmhba32:C0:T0:L0:1: not supported.
Checking if remote hosts are using this device as a valid file system. This may take a few seconds...
Creating vmfs6 file system on "mpx.vmhba32:C0:T0:L0:1" with blockSize 1048576, unmapGranularity 1048576, unmapPriority default and volume label "usb_store".
Successfully created new volume: 63bfb975-7328d029-c8f4-2cf05df47a0d
```

이제 웹콘솔 스토리지로 이동하면 만든 usb store가 보일 것이다.

[![usb_store.jpg](http://138.2.116.150/uploads/images/gallery/2023-01/scaled-1680-/usb-store.jpg)](http://138.2.116.150/uploads/images/gallery/2023-01/usb-store.jpg)

만약 추가한 USB 장치가 하드디스크라면 더 이상 할 작업은 없지만, 메모리 스틱이나 SSD인 경우에는 드라이브 유형을 비SSD에서 SSD로 바꿔줄 필요가 있다. 이 항목은 다음의 문서를 참고하면 더 자세한 정보를 얻을 수 있다.  
https://kb.vmware.com/s/article/2013188

먼저, SSD로 선언이 가능하도록 아래의 명령을 실행한다.

```bash
esxcli system settings advanced set -o /Disk/AllowUsbClaimedAsSSD -i 1
```

  
그후 USB 장치의 정보를 불러온다.

```bash
esxcli storage nmp device list

mpx.vmhba32:C0:T0:L0
   Device Display Name: Local USB Direct-Access (mpx.vmhba32:C0:T0:L0)
   Storage Array Type: VMW_SATP_LOCAL
   Storage Array Type Device Config: SATP VMW_SATP_LOCAL does not support device configuration.
   Path Selection Policy: VMW_PSP_FIXED
   Path Selection Policy Device Config: {preferred=vmhba32:C0:T0:L0;current=vmhba32:C0:T0:L0}
   Path Selection Policy Device Custom Config: 
   Working Paths: vmhba32:C0:T0:L0
   Is USB: true
```

Storage Array Type을 눈여겨 봐야한다. 다음의 명령을 실행할 때 동일한 타입으로 선언 해 주어야 하기 때문이다.

esxcli storage nmp satp rule add --satp=&lt;SATP\_TYPE&gt; --device &lt;장치이름&gt; --option "enable\_ssd"

위의 예제의 경우 다음과 같이 입력한다.

```bash
esxcli storage nmp satp rule add --satp=VMW_SATP_LOCAL --device mpx.vmhba32:C0:T0:L0 --option "enable_ssd"
```

  
명령 수행 후, 아래의 명령을 실행 해 보면

```bash
esxcli storage core device list -d mpx.vmhba32:C0:T0:L0 | grep SSD
Is SSD: false
```

라고 나온다. 실망하지 말고 VMWare ESXi를 리부팅 해보자.

부팅 후에는 Is SSD: true 라는 메시지를 볼 수 있으며, 웹 콘솔에서도 SSD로 표기가 된다.