12.5. 가상 머신 상태 점검


VirtualMachine 리소스에서 준비 및 활성 프로브를 정의하여 VM(가상 머신) 상태 점검을 구성할 수 있습니다.

12.5.1. 준비 및 활성 프로브 정보

준비 및 활성 프로브를 사용하여 비정상 VM(가상 머신)을 감지하고 처리합니다. VM 사양에 프로브를 하나 이상 추가하여 트래픽이 준비되지 않은 VM에 도달하지 않고 VM이 응답하지 않을 때 새 VM이 생성되도록 할 수 있습니다.

준비 상태 프로브 는 VM이 서비스 요청을 수락할 준비가 되었는지 여부를 결정합니다. 프로브가 실패하면 VM이 준비될 때까지 VM이 사용 가능한 엔드포인트 목록에서 제거됩니다.

활성 상태 프로브 는 VM의 응답 여부를 결정합니다. 프로브가 실패하면 VM이 삭제되고 응답성을 복원하기 위해 새 VM이 생성됩니다.

VirtualMachine 오브젝트의 spec.readinessProbespec.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 준비 상태 프로브를 정의합니다.

프로세스

  1. 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입니다.
  2. 다음 명령을 실행하여 VM을 생성합니다.

    $ oc create -f <file_name>.yaml

12.5.1.2. TCP 준비 프로브 정의

VM(가상 머신) 구성의 spec.readinessProbe.tcpSocket 필드를 설정하여 TCP 준비 프로브를 정의합니다.

프로세스

  1. 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
    # ...

    1
    준비 프로브가 시작되기 전에 VM이 시작된 후 시간(초)입니다.
    2
    프로브 수행 사이의 지연 시간(초)입니다. 기본 지연 시간은 10초입니다. 이 값은 timeoutSeconds 보다 커야 합니다.
    3
    수행할 TCP 작업입니다.
    4
    프로브가 쿼리하는 VM의 포트입니다.
    5
    프로브가 시간 초과되고 VM이 실패한 것으로 간주되는 비활성 시간(초)입니다. 기본값은 1입니다. 이 값은 periodSeconds 보다 작아야 합니다.
  2. 다음 명령을 실행하여 VM을 생성합니다.

    $ oc create -f <file_name>.yaml

12.5.1.3. HTTP 활성 프로브 정의

VM(가상 머신) 구성의 spec.livenessProbe.httpGet 필드를 설정하여 HTTP 활성 프로브를 정의합니다. 준비 프로브와 동일한 방식으로 활성 프로브에 대한 HTTP 및 TCP 테스트를 모두 정의할 수 있습니다. 이 절차에서는 HTTP GET 테스트를 사용하여 샘플 활성 프로브를 구성합니다.

프로세스

  1. 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 보다 작아야 합니다.
  2. 다음 명령을 실행하여 VM을 생성합니다.

    $ oc create -f <file_name>.yaml

12.5.2. 워치독 정의

다음 단계를 수행하여 워치독을 정의하여 게스트 운영 체제의 상태를 모니터링할 수 있습니다.

  1. VM(가상 머신)에 대한 워치독 장치를 구성합니다.
  2. 게스트에 watchdog 에이전트를 설치합니다.

워치독 장치는 에이전트를 모니터링하고 게스트 운영 체제가 응답하지 않는 경우 다음 작업 중 하나를 수행합니다.

  • poweroff: VM의 전원이 즉시 꺼집니다. spec.runningtrue 로 설정되어 있거나 spec.runStrategy수동으로 설정되지 않은 경우 VM이 재부팅됩니다.
  • reset: VM이 재부팅되고 게스트 운영 체제가 반응 할 수 없습니다.

    참고

    재부팅 시간으로 인해 활성 프로브가 시간 초과될 수 있습니다. 클러스터 수준 보호에서 실패한 활성 프로브를 감지하면 VM이 강제로 다시 예약되어 재부팅 시간이 증가할 수 있습니다.

  • shutdown: VM이 모든 서비스를 중지하여 정상적으로 전원을 끕니다.
참고

Windows VM에서는 워치독을 사용할 수 없습니다.

12.5.2.1. 가상 머신에 대한 워치독 장치 구성

VM(가상 머신)에 대한 워치독 장치를 구성합니다.

사전 요구 사항

  • VM에는 i6300esb 워치독 장치에 대한 커널 지원이 있어야 합니다. RHEL(Red Hat Enterprise Linux) 이미지는 i6300esb를 지원합니다.

프로세스

  1. 다음 콘텐츠를 사용하여 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로 노출합니다.

    이제 워치독 바이너리에서 이 장치를 사용할 수 있습니다.

  2. 다음 명령을 실행하여 클러스터에 YAML 파일을 적용합니다.

    $ oc apply -f <file_name>.yaml
중요

이 절차는 워치독 기능을 테스트하는 데만 제공되며 프로덕션 시스템에서 실행해서는 안 됩니다.

  1. 다음 명령을 실행하여 VM이 워치독 장치에 연결되어 있는지 확인합니다.

    $ lspci | grep watchdog -i
  2. 다음 명령 중 하나를 실행하여 워치독이 활성 상태인지 확인합니다.

    • 커널 패닉을 트리거합니다.

      # echo c > /proc/sysrq-trigger
    • 워치독 서비스를 중지합니다.

      # pkill -9 watchdog

12.5.2.2. 게스트에 워치독 에이전트 설치

게스트에 워치독 에이전트를 설치하고 워치독 서비스를 시작합니다.

프로세스

  1. root 사용자로 가상 머신에 로그인합니다.
  2. watchdog 패키지 및 해당 종속 항목을 설치합니다.

    # yum install watchdog
  3. /etc/watchdog.conf 파일에서 다음 행의 주석을 제거하고 변경 사항을 저장합니다.

    #watchdog-device = /dev/watchdog
  4. 워치독 서비스가 부팅 시 시작되도록 활성화합니다.

    # systemctl enable --now watchdog.service

12.5.3. 게스트 에이전트 ping 프로브 정의

VM(가상 머신) 구성의 spec.readinessProbe.guestAgentPing 필드를 설정하여 게스트 에이전트 ping 프로브를 정의합니다.

중요

게스트 에이전트 ping 프로브는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

사전 요구 사항

  • QEMU 게스트 에이전트는 가상 머신에 설치하고 활성화해야 합니다.

프로세스

  1. 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입니다.
  2. 다음 명령을 실행하여 VM을 생성합니다.

    $ oc create -f <file_name>.yaml

12.5.4. 추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.