12.5. 가상 머신 상태 점검
VirtualMachine
리소스에서 준비 및 활성 프로브를 정의하여 VM(가상 머신) 상태 점검을 구성할 수 있습니다.
12.5.1. 준비 및 활성 프로브 정보
준비 및 활성 프로브를 사용하여 비정상 VM(가상 머신)을 감지하고 처리합니다. VM 사양에 프로브를 하나 이상 추가하여 트래픽이 준비되지 않은 VM에 도달하지 않고 VM이 응답하지 않을 때 새 VM이 생성되도록 할 수 있습니다.
준비 상태 프로브 는 VM이 서비스 요청을 수락할 준비가 되었는지 여부를 결정합니다. 프로브가 실패하면 VM이 준비될 때까지 VM이 사용 가능한 엔드포인트 목록에서 제거됩니다.
활성 상태 프로브 는 VM의 응답 여부를 결정합니다. 프로브가 실패하면 VM이 삭제되고 응답성을 복원하기 위해 새 VM이 생성됩니다.
VirtualMachine
오브젝트의 spec.readinessProbe
및 spec.livenessProbe
필드를 설정하여 준비 및 활성 프로브를 구성할 수 있습니다. 이러한 필드는 다음 테스트를 지원합니다.
- HTTP GET
- 프로브는 웹 후크를 사용하여 VM의 상태를 결정합니다. HTTP 응답 코드가 200에서 399 사이인 경우 테스트에 성공합니다. HTTP GET 테스트는 HTTP 상태 코드를 완전히 초기화할 때 반환하는 애플리케이션에 사용할 수 있습니다.
- TCP 소켓
- 프로브는 VM에 대한 소켓을 열려고 시도합니다. VM은 프로브에서 연결을 설정할 수 있는 경우에만 정상으로 간주됩니다. TCP 소켓 테스트는 초기화가 완료된 후 수신 대기를 시작하는 애플리케이션에 사용할 수 있습니다.
- 게스트 에이전트 ping
-
프로브는
guest-ping
명령을 사용하여 QEMU 게스트 에이전트가 가상 머신에서 실행 중인지 확인합니다.
12.5.1.1. HTTP 준비 상태 프로브 정의
VM(가상 머신) 구성의 spec.readinessProbe.httpGet
필드를 설정하여 HTTP 준비 상태 프로브를 정의합니다.
프로세스
VM 구성 파일에 준비 프로브의 세부 정보를 포함합니다.
HTTP GET 테스트가 있는 샘플 준비 상태 프로브
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: annotations: name: fedora-vm namespace: example-namespace # ... spec: template: spec: readinessProbe: httpGet: 1 port: 1500 2 path: /healthz 3 httpHeaders: - name: Custom-Header value: Awesome initialDelaySeconds: 120 4 periodSeconds: 20 5 timeoutSeconds: 10 6 failureThreshold: 3 7 successThreshold: 3 8 # ...
- 1
- VM에 연결하기 위해 수행할 HTTP GET 요청입니다.
- 2
- 프로브가 쿼리하는 VM의 포트입니다. 위의 예에서 프로브는 포트 1500을 쿼리합니다.
- 3
- HTTP 서버에서 액세스할 경로입니다. 위의 예에서 서버의 /healthz 경로에 대한 처리기가 성공 코드를 반환하면 VM이 정상으로 간주됩니다. 핸들러에서 실패 코드를 반환하면 사용 가능한 엔드포인트 목록에서 VM이 제거됩니다.
- 4
- 준비 프로브가 시작되기 전에 VM이 시작된 후 시간(초)입니다.
- 5
- 프로브 수행 사이의 지연 시간(초)입니다. 기본 지연 시간은 10초입니다. 이 값은
timeoutSeconds
보다 커야 합니다. - 6
- 프로브가 시간 초과되고 VM이 실패한 것으로 간주되는 비활성 시간(초)입니다. 기본값은 1입니다. 이 값은
periodSeconds
보다 작아야 합니다. - 7
- 프로브가 실패할 수 있는 횟수입니다. 기본값은 3입니다. 지정된 횟수의 시도 후 Pod가
Unready
로 표시됩니다. - 8
- 프로브에서 실패 후 성공한 것으로 간주하기 위해 성공으로 보고해야 하는 횟수입니다. 기본값은 1입니다.
다음 명령을 실행하여 VM을 생성합니다.
$ oc create -f <file_name>.yaml
12.5.1.2. TCP 준비 프로브 정의
VM(가상 머신) 구성의 spec.readinessProbe.tcpSocket
필드를 설정하여 TCP 준비 프로브를 정의합니다.
프로세스
VM 구성 파일에 TCP 준비 프로브 세부 정보를 포함합니다.
TCP 소켓 테스트를 사용하는 샘플 준비 상태 프로브
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: annotations: name: fedora-vm namespace: example-namespace # ... spec: template: spec: readinessProbe: initialDelaySeconds: 120 1 periodSeconds: 20 2 tcpSocket: 3 port: 1500 4 timeoutSeconds: 10 5 # ...
다음 명령을 실행하여 VM을 생성합니다.
$ oc create -f <file_name>.yaml
12.5.1.3. HTTP 활성 프로브 정의
VM(가상 머신) 구성의 spec.livenessProbe.httpGet
필드를 설정하여 HTTP 활성 프로브를 정의합니다. 준비 프로브와 동일한 방식으로 활성 프로브에 대한 HTTP 및 TCP 테스트를 모두 정의할 수 있습니다. 이 절차에서는 HTTP GET 테스트를 사용하여 샘플 활성 프로브를 구성합니다.
프로세스
VM 구성 파일에 HTTP 활성 프로브의 세부 정보를 포함합니다.
HTTP GET 테스트가 포함된 샘플 활성 프로브
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: annotations: name: fedora-vm namespace: example-namespace # ... spec: template: spec: livenessProbe: initialDelaySeconds: 120 1 periodSeconds: 20 2 httpGet: 3 port: 1500 4 path: /healthz 5 httpHeaders: - name: Custom-Header value: Awesome timeoutSeconds: 10 6 # ...
- 1
- 활성 프로브가 시작되기 전에 VM이 시작된 후 시간(초)입니다.
- 2
- 프로브 수행 사이의 지연 시간(초)입니다. 기본 지연 시간은 10초입니다. 이 값은
timeoutSeconds
보다 커야 합니다. - 3
- VM에 연결하기 위해 수행할 HTTP GET 요청입니다.
- 4
- 프로브가 쿼리하는 VM의 포트입니다. 위의 예에서 프로브는 포트 1500을 쿼리합니다. VM은 cloud-init를 통해 포트 1500에 최소 HTTP 서버를 설치하고 실행합니다.
- 5
- HTTP 서버에서 액세스할 경로입니다. 위의 예에서 서버의
/healthz
경로에 대한 처리기가 성공 코드를 반환하면 VM이 정상으로 간주됩니다. 핸들러에서 실패 코드를 반환하면 VM이 삭제되고 새 VM이 생성됩니다. - 6
- 프로브가 시간 초과되고 VM이 실패한 것으로 간주되는 비활성 시간(초)입니다. 기본값은 1입니다. 이 값은
periodSeconds
보다 작아야 합니다.
다음 명령을 실행하여 VM을 생성합니다.
$ oc create -f <file_name>.yaml
12.5.2. 워치독 정의
다음 단계를 수행하여 워치독을 정의하여 게스트 운영 체제의 상태를 모니터링할 수 있습니다.
- VM(가상 머신)에 대한 워치독 장치를 구성합니다.
- 게스트에 watchdog 에이전트를 설치합니다.
워치독 장치는 에이전트를 모니터링하고 게스트 운영 체제가 응답하지 않는 경우 다음 작업 중 하나를 수행합니다.
-
poweroff
: VM의 전원이 즉시 꺼집니다.spec.running
이true
로 설정되어 있거나spec.runStrategy
가수동으로
설정되지 않은 경우 VM이 재부팅됩니다. reset
: VM이 재부팅되고 게스트 운영 체제가 반응 할 수 없습니다.참고재부팅 시간으로 인해 활성 프로브가 시간 초과될 수 있습니다. 클러스터 수준 보호에서 실패한 활성 프로브를 감지하면 VM이 강제로 다시 예약되어 재부팅 시간이 증가할 수 있습니다.
-
shutdown
: VM이 모든 서비스를 중지하여 정상적으로 전원을 끕니다.
Windows VM에서는 워치독을 사용할 수 없습니다.
12.5.2.1. 가상 머신에 대한 워치독 장치 구성
VM(가상 머신)에 대한 워치독 장치를 구성합니다.
사전 요구 사항
-
VM에는
i6300esb
워치독 장치에 대한 커널 지원이 있어야 합니다. RHEL(Red Hat Enterprise Linux) 이미지는i6300esb
를 지원합니다.
프로세스
다음 콘텐츠를 사용하여
YAML
파일을 생성합니다.apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: vm2-rhel84-watchdog name: <vm-name> spec: running: false template: metadata: labels: kubevirt.io/vm: vm2-rhel84-watchdog spec: domain: devices: watchdog: name: <watchdog> i6300esb: action: "poweroff" 1 # ...
- 1
poweroff
,reset
또는shutdown
을 지정합니다.
위의 예제에서는 poweroff 작업을 사용하여 RHEL8 VM에서
i6300esb
워치독 장치를 구성하고 장치를/dev/watchdog
로 노출합니다.이제 워치독 바이너리에서 이 장치를 사용할 수 있습니다.
다음 명령을 실행하여 클러스터에 YAML 파일을 적용합니다.
$ oc apply -f <file_name>.yaml
이 절차는 워치독 기능을 테스트하는 데만 제공되며 프로덕션 시스템에서 실행해서는 안 됩니다.
다음 명령을 실행하여 VM이 워치독 장치에 연결되어 있는지 확인합니다.
$ lspci | grep watchdog -i
다음 명령 중 하나를 실행하여 워치독이 활성 상태인지 확인합니다.
커널 패닉을 트리거합니다.
# echo c > /proc/sysrq-trigger
워치독 서비스를 중지합니다.
# pkill -9 watchdog
12.5.2.2. 게스트에 워치독 에이전트 설치
게스트에 워치독 에이전트를 설치하고 워치독
서비스를 시작합니다.
프로세스
- root 사용자로 가상 머신에 로그인합니다.
watchdog
패키지 및 해당 종속 항목을 설치합니다.# yum install watchdog
/etc/watchdog.conf
파일에서 다음 행의 주석을 제거하고 변경 사항을 저장합니다.#watchdog-device = /dev/watchdog
워치독
서비스가 부팅 시 시작되도록 활성화합니다.# systemctl enable --now watchdog.service
12.5.3. 게스트 에이전트 ping 프로브 정의
VM(가상 머신) 구성의 spec.readinessProbe.guestAgentPing
필드를 설정하여 게스트 에이전트 ping 프로브를 정의합니다.
게스트 에이전트 ping 프로브는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
사전 요구 사항
- QEMU 게스트 에이전트는 가상 머신에 설치하고 활성화해야 합니다.
프로세스
VM 구성 파일에 게스트 에이전트 ping 프로브 세부 정보를 포함합니다. 예를 들면 다음과 같습니다.
게스트 에이전트 ping 프로브 샘플
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: annotations: name: fedora-vm namespace: example-namespace # ... spec: template: spec: readinessProbe: guestAgentPing: {} 1 initialDelaySeconds: 120 2 periodSeconds: 20 3 timeoutSeconds: 10 4 failureThreshold: 3 5 successThreshold: 3 6 # ...
- 1
- VM에 연결하기 위한 게스트 에이전트 ping 프로브입니다.
- 2
- 선택 사항: 게스트 에이전트 프로브가 시작되기 전에 VM이 시작된 후 시간(초)입니다.
- 3
- 선택사항: 프로브 수행 사이의 지연 시간(초)입니다. 기본 지연 시간은 10초입니다. 이 값은
timeoutSeconds
보다 커야 합니다. - 4
- 선택 사항: 프로브가 시간 초과되고 VM이 실패한 것으로 간주되는 비활성 시간(초)입니다. 기본값은 1입니다. 이 값은
periodSeconds
보다 작아야 합니다. - 5
- 선택 사항: 프로브가 실패할 수 있는 횟수입니다. 기본값은 3입니다. 지정된 횟수의 시도 후 Pod가
Unready
로 표시됩니다. - 6
- 선택 사항: 프로브에서 실패 후 성공한 것으로 간주하기 위해 성공으로 보고해야 하는 횟수입니다. 기본값은 1입니다.
다음 명령을 실행하여 VM을 생성합니다.
$ oc create -f <file_name>.yaml