14.14. OpenShift Virtualization runbook

이러한 runbook의 프로시저를 사용하여 OpenShift Virtualization 경고를 트리거하는 문제를 진단하고 해결할 수 있습니다.

OpenShift Virtualization 경고는 가상화 > 개요 페이지에 표시됩니다.

14.14.1. CDIDataImportCronOutdated

meaning

이 경고는 DataImportCron 이 최신 디스크 이미지 버전을 폴링하거나 가져올 수 없는 경우 발생합니다.

DataImportCron 은 디스크 이미지를 폴링하고 최신 버전을 확인하고 이미지를 PVC(영구 볼륨 클레임)로 가져옵니다. 이 프로세스를 통해 PVC가 최신 버전으로 업데이트되므로 안정적인 복제 소스 또는 VM(가상 머신)의 골든 이미지로 사용할 수 있습니다.

golden 이미지의 경우 latest 는 배포의 최신 운영 체제를 나타냅니다. 기타 디스크 이미지의 경우 latest 는 사용 가능한 이미지의 최신 해시를 나타냅니다.

보안 등급

오래된 디스크 이미지에서 VM을 생성할 수 있습니다.

복제에 소스 PVC를 사용할 수 없기 때문에 VM이 시작되지 않을 수 있습니다.

진단
  1. 클러스터에 기본 스토리지 클래스가 있는지 확인합니다.

    $ oc get sc

    출력에는 기본 스토리지 클래스의 이름 옆에 (기본값) 스토리지 클래스가 표시됩니다. DataImportCron 이 golden 이미지를 폴링하고 가져오려면 클러스터 또는 DataImportCron 사양에서 기본 스토리지 클래스를 설정해야 합니다. 스토리지 클래스가 정의되지 않은 경우 DataVolume 컨트롤러에서 PVC를 생성하지 못하고 다음 이벤트가 표시됩니다 . DataVolume.storage 사양은 accessMode이고 storageClass가 프로필을 선택하지 않습니다.

  2. DataImportCron 네임스페이스 및 이름을 가져옵니다.

    $ oc get dataimportcron -A -o json | jq -r '.items[] | \
      select(.status.conditions[] | select(.type == "UpToDate" and \
      .status == "False")) | .metadata.namespace + "/" + .metadata.name'
  3. 기본 스토리지 클래스가 클러스터에 정의되지 않은 경우 기본 스토리지 클래스에 대해 DataImportCron 사양을 확인합니다.

    $ oc get dataimportcron <dataimportcron> -o yaml | \
      grep -B 5 storageClassName

    출력 예

          url: docker://.../cdi-func-test-tinycore
        storage:
          resources:
            requests:
              storage: 5Gi
        storageClassName: rook-ceph-block

  4. DataImportCron 오브젝트와 연결된 DataVolume 의 이름을 가져옵니다.

    $ oc -n <namespace> get dataimportcron <dataimportcron> -o json | \
      jq .status.lastImportedPVC.name
  5. DataVolume 로그에 오류 메시지가 있는지 확인합니다.

    $ oc -n <namespace> get dv <datavolume> -o yaml
  6. CDI_NAMESPACE 환경 변수를 설정합니다.

    $ export CDI_NAMESPACE="$(oc get deployment -A | \
      grep cdi-operator | awk '{print $1}')"
  7. cdi-deployment 로그에서 오류 메시지가 있는지 확인합니다.

    $ oc logs -n $CDI_NAMESPACE deployment/cdi-deployment
완화 방법
  1. 클러스터 또는 DataImportCron 사양에서 기본 스토리지 클래스를 설정하여 골드 이미지를 폴링하고 가져옵니다. 업데이트된 CDI(Containerized Data Importer)는 몇 초 내에 문제를 해결합니다.
  2. 문제가 해결되지 않으면 영향을 받는 DataImportCron 오브젝트와 관련된 데이터 볼륨을 삭제합니다. CDI는 기본 스토리지 클래스를 사용하여 데이터 볼륨을 다시 생성합니다.
  3. 클러스터가 제한된 네트워크 환경에 설치된 경우 자동 업데이트를 사용하지 않도록 하려면 enableCommonBootImageImport 기능 게이트를 비활성화합니다.

    $ oc patch hco kubevirt-hyperconverged -n $CDI_NAMESPACE --type json \
      -p '[{"op": "replace", "path": \
      "/spec/featureGates/enableCommonBootImageImport", "value": false}]'

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.2. CDIDataVolumeUnusualRestartCount

meaning

이 경고는 DataVolume 오브젝트가 세 번 이상 재시작될 때 실행됩니다.

보안 등급

데이터 볼륨은 영구 볼륨 클레임에서 가상 머신 디스크를 가져오고 생성합니다. 데이터 볼륨이 세 번 이상 다시 시작되면 이러한 작업이 성공할 가능성이 없습니다. 문제를 진단하고 해결해야 합니다.

진단
  1. 데이터 볼륨의 이름과 네임스페이스를 가져옵니다.

    $ oc get dv -A -o json | jq -r '.items[] | \
      select(.status.restartCount>3)' | jq '.metadata.name, .metadata.namespace'
  2. 데이터 볼륨과 연결된 Pod의 상태를 확인합니다.

    $ oc get pods -n <namespace> -o json | jq -r '.items[] | \
      select(.metadata.ownerReferences[] | \
      select(.name=="<dv_name>")).metadata.name'
  3. Pod의 세부 정보를 가져옵니다.

    $ oc -n <namespace> describe pods <pod>
  4. Pod 로그에 오류 메시지가 있는지 확인합니다.

    $ oc -n <namespace> describe logs <pod>
완화 방법

데이터 볼륨을 삭제하고, 문제를 해결한 다음 새 데이터 볼륨을 생성합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.3. CDINotReady

meaning

이 경고는 CDI(Containerized Data Importer)가 degraded 상태가 될 때 실행됩니다.

  • 진행되지 않음
  • 사용할 수 없음
보안 등급

CDI를 사용할 수 없으므로 CDI의 데이터 볼륨을 사용하여 PVC(영구 볼륨 클레임)에서 가상 머신 디스크를 빌드할 수 없습니다. CDI 구성 요소는 준비되지 않았으며 준비 상태로 진행을 중지합니다.

진단
  1. CDI_NAMESPACE 환경 변수를 설정합니다.

    $ export CDI_NAMESPACE="$(oc get deployment -A | \
      grep cdi-operator | awk '{print $1}')"
  2. 준비되지 않은 구성 요소가 있는지 CDI 배포를 확인합니다.

    $ oc -n $CDI_NAMESPACE get deploy -l cdi.kubevirt.io
  3. 실패한 Pod의 세부 정보를 확인합니다.

    $ oc -n $CDI_NAMESPACE describe pods <pod>
  4. 실패한 Pod의 로그를 확인합니다.

    $ oc -n $CDI_NAMESPACE logs <pod>
완화 방법

근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.4. CDIOperatorDown

meaning

이 경고는 CDI(Containerized Data Importer) Operator가 중단될 때 실행됩니다. CDI Operator는 데이터 볼륨 및 PVC(영구 볼륨 클레임) 컨트롤러와 같은 CDI 인프라 구성 요소를 배포하고 관리합니다. 이러한 컨트롤러는 사용자가 PVC에서 가상 머신 디스크를 빌드하는 데 도움이 됩니다.

보안 등급

CDI 구성 요소가 배포되지 않거나 필수 상태로 유지되지 않을 수 있습니다. CDI 설치가 제대로 작동하지 않을 수 있습니다.

진단
  1. CDI_NAMESPACE 환경 변수를 설정합니다.

    $ export CDI_NAMESPACE="$(oc get deployment -A | grep cdi-operator | \
      awk '{print $1}')"
  2. cdi-operator Pod가 현재 실행 중인지 확인합니다.

    $ oc -n $CDI_NAMESPACE get pods -l name=cdi-operator
  3. cdi-operator Pod의 세부 정보를 가져옵니다.

    $ oc -n $CDI_NAMESPACE describe pods -l name=cdi-operator
  4. cdi-operator Pod의 로그에 오류가 있는지 확인합니다.

    $ oc -n $CDI_NAMESPACE logs -l name=cdi-operator
완화 방법

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.5. CDIStorageProfilesIncomplete

meaning

이 경고는 CDI(Containerized Data Importer) 스토리지 프로필이 불완전할 때 실행됩니다.

스토리지 프로필이 완료되지 않으면 CDI는 VM(가상 머신) 디스크를 생성하는 데 필요한 volumeModeaccessModes 와 같은 PVC(영구 볼륨 클레임) 필드를 추측할 수 없습니다.

보안 등급

CDI는 PVC에서 VM 디스크를 생성할 수 없습니다.

진단
  • 불완전한 스토리지 프로필을 확인합니다.

    $ oc get storageprofile <storage_class>
완화 방법
  • 다음 예와 같이 누락된 스토리지 프로필 정보를 추가합니다.

    $ oc patch storageprofile local --type=merge -p '{"spec": \
      {"claimPropertySets": [{"accessModes": ["ReadWriteOnce"], \
      "volumeMode": "Filesystem"}]}}'

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.6. CnaoDown

meaning

이 경고는 CNAO(Cluster Network Addons Operator)가 중단될 때 실행됩니다. CNAO는 클러스터 상단에 추가 네트워킹 구성 요소를 배포합니다.

보안 등급

CNAO가 실행되고 있지 않은 경우 클러스터는 가상 머신 구성 요소에 대한 변경 사항을 조정할 수 없습니다. 결과적으로 변경 사항이 적용되지 않을 수 있습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get deployment -A | \
      grep cluster-network-addons-operator | awk '{print $1}')"
  2. cluster-network-addons-operator Pod의 상태를 확인합니다.

    $ oc -n $NAMESPACE get pods -l name=cluster-network-addons-operator
  3. cluster-network-addons-operator 로그에 오류 메시지가 있는지 확인합니다.

    $ oc -n $NAMESPACE logs -l name=cluster-network-addons-operator
  4. cluster-network-addons-operator Pod의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe pods -l name=cluster-network-addons-operator
완화 방법

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.7. HPPNotReady

meaning

이 경고는 HPP(hostpath provisioner) 설치가 degraded 상태가 될 때 실행됩니다.

HPP는 hostpath 볼륨을 동적으로 프로비저닝하여 PVC(영구 볼륨 클레임)에 스토리지를 제공합니다.

보안 등급

HPP를 사용할 수 없습니다. 해당 구성 요소는 준비되지 않았으며 준비 상태로 진행되지 않습니다.

진단
  1. HPP_NAMESPACE 환경 변수를 설정합니다.

    $ export HPP_NAMESPACE="$(oc get deployment -A | \
      grep hostpath-provisioner-operator | awk '{print $1}')"
  2. 현재 준비되지 않은 HPP 구성 요소가 있는지 확인합니다.

    $ oc -n $HPP_NAMESPACE get all -l k8s-app=hostpath-provisioner
  3. 실패한 Pod의 세부 정보를 가져옵니다.

    $ oc -n $HPP_NAMESPACE describe pods <pod>
  4. 실패한 Pod의 로그를 확인합니다.

    $ oc -n $HPP_NAMESPACE logs <pod>
완화 방법

진단 절차 중 얻은 정보를 기반으로 근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.8. HPPOperatorDown

meaning

이 경고는 HPP(hostpath provisioner) Operator가 중단될 때 실행됩니다.

HPP Operator는 hostpath 볼륨을 프로비저닝하는 데몬 세트와 같은 HPP 인프라 구성 요소를 배포하고 관리합니다.

보안 등급

HPP 구성 요소가 배포되지 않거나 필수 상태로 유지되지 않을 수 있습니다. 이로 인해 클러스터에서 HPP 설치가 제대로 작동하지 않을 수 있습니다.

진단
  1. HPP_NAMESPACE 환경 변수를 구성합니다.

    $ HPP_NAMESPACE="$(oc get deployment -A | grep \
      hostpath-provisioner-operator | awk '{print $1}')"
  2. hostpath-provisioner-operator Pod가 현재 실행 중인지 확인합니다.

    $ oc -n $HPP_NAMESPACE get pods -l name=hostpath-provisioner-operator
  3. hostpath-provisioner-operator Pod의 세부 정보를 가져옵니다.

    $ oc -n $HPP_NAMESPACE describe pods -l name=hostpath-provisioner-operator
  4. hostpath-provisioner-operator Pod의 로그에 오류가 있는지 확인합니다.

    $ oc -n $HPP_NAMESPACE logs -l name=hostpath-provisioner-operator
완화 방법

진단 절차 중 얻은 정보를 기반으로 근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.9. HPPSharingPoolPathWithOS

meaning

이 경고는 HPP(hostpath provisioner)에서 kubelet 또는 OS(운영 체제)와 같은 다른 중요한 구성 요소와 파일 시스템을 공유할 때 실행됩니다.

HPP는 hostpath 볼륨을 동적으로 프로비저닝하여 PVC(영구 볼륨 클레임)에 스토리지를 제공합니다.

보안 등급

공유 hostpath 풀은 노드의 디스크에 부담을 부여합니다. 노드가 성능과 안정성이 저하될 수 있습니다.

진단
  1. HPP_NAMESPACE 환경 변수를 구성합니다.

    $ export HPP_NAMESPACE="$(oc get deployment -A | \
      grep hostpath-provisioner-operator | awk '{print $1}')"
  2. hostpath-provisioner-csi 데몬 세트 Pod의 상태를 가져옵니다.

    $ oc -n $HPP_NAMESPACE get pods | grep hostpath-provisioner-csi
  3. hostpath-provisioner-csi 로그를 확인하여 공유 풀 및 경로를 확인합니다.

    $ oc -n $HPP_NAMESPACE logs <csi_daemonset> -c hostpath-provisioner

    출력 예

    I0208 15:21:03.769731       1 utils.go:221] pool (<legacy, csi-data-dir>/csi),
    shares path with OS which can lead to node disk pressure

완화 방법

진단 섹션에서 얻은 데이터를 사용하여 풀 경로가 OS와 공유되지 않도록 합니다. 특정 단계는 노드 및 기타 상황에 따라 다릅니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.10. KubeMacPoolDown

meaning

KubeMacPool 이 다운되었습니다. KubeMacPool 은 MAC 주소를 할당하고 MAC 주소 충돌을 방지합니다.

보안 등급

KubeMacPool 이 다운된 경우 VirtualMachine 오브젝트를 생성할 수 없습니다.

진단
  1. KMP_NAMESPACE 환경 변수를 설정합니다.

    $ export KMP_NAMESPACE="$(oc get pod -A --no-headers -l \
      control-plane=mac-controller-manager | awk '{print $1}')"
  2. KMP_NAME 환경 변수를 설정합니다.

    $ export KMP_NAME="$(oc get pod -A --no-headers -l \
      control-plane=mac-controller-manager | awk '{print $2}')"
  3. KubeMacPool-manager Pod 세부 정보를 가져옵니다.

    $ oc describe pod -n $KMP_NAMESPACE $KMP_NAME
  4. KubeMacPool-manager 로그에서 오류 메시지가 있는지 확인합니다.

    $ oc logs -n $KMP_NAMESPACE $KMP_NAME
완화 방법

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.11. KubeMacPoolDuplicateMacsFound

meaning

KubeMacPool 에서 중복된 MAC 주소를 감지하면 이 경고가 실행됩니다.

KubeMacPool 은 MAC 주소를 할당하고 MAC 주소 충돌을 방지합니다. KubeMacPool 이 시작되면 관리형 네임스페이스에서 VM(가상 머신)의 MAC 주소를 클러스터를 검사합니다.

보안 등급

동일한 LAN에서 MAC 주소가 중복되면 네트워크 문제가 발생할 수 있습니다.

진단
  1. kubemacpool-mac-controller Pod의 네임스페이스와 이름을 가져옵니다.

    $ oc get pod -A -l control-plane=mac-controller-manager --no-headers \
      -o custom-columns=":metadata.namespace,:metadata.name"
  2. kubemacpool-mac-controller 로그에서 중복된 MAC 주소를 확보합니다.

    $ oc logs -n <namespace> <kubemacpool_mac_controller> | \
      grep "already allocated"

    출력 예

    mac address 02:00:ff:ff:ff:ff already allocated to
    vm/kubemacpool-test/testvm, br1,
    conflict with: vm/kubemacpool-test/testvm2, br1

완화 방법
  1. VM을 업데이트하여 중복된 MAC 주소를 제거합니다.
  2. kubemacpool-mac-controller Pod를 다시 시작합니다.

    $ oc delete pod -n <namespace> <kubemacpool_mac_controller>

14.14.12. KubeVirtComponentExceedsRequestedCPU

meaning

이 경고는 구성 요소의 CPU 사용량이 요청된 제한을 초과하면 실행됩니다.

보안 등급

CPU 리소스 사용량이 최적이 아니며 노드에 과부하가 발생할 수 있습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. 구성 요소의 CPU 요청 제한을 확인합니다.

    $ oc -n $NAMESPACE get deployment <component> -o yaml | grep requests: -A 2
  3. PromQL 쿼리를 사용하여 실제 CPU 사용량을 확인합니다.

    node_namespace_pod_container:container_cpu_usage_seconds_total:sum_rate
    {namespace="$NAMESPACE",container="<component>"}

자세한 내용은 Prometheus 설명서를 참조하십시오.

완화 방법

HCO 사용자 정의 리소스에서 CPU 요청 제한을 업데이트합니다.

14.14.13. KubeVirtComponentExceedsRequestedMemory

meaning

이 경고는 구성 요소의 메모리 사용량이 요청된 제한을 초과할 때 실행됩니다.

보안 등급

메모리 리소스 사용량이 최적이 아니며 노드에 과부하가 발생할 수 있습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. 구성 요소의 메모리 요청 제한을 확인합니다.

    $ oc -n $NAMESPACE get deployment <component> -o yaml | \
      grep requests: -A 2
  3. PromQL 쿼리를 사용하여 실제 메모리 사용량을 확인합니다.

    container_memory_usage_bytes{namespace="$NAMESPACE",container="<component>"}

자세한 내용은 Prometheus 설명서를 참조하십시오.

완화 방법

HCO 사용자 정의 리소스에서 메모리 요청 제한을 업데이트합니다.

14.14.14. KubevirtHyperconvergedClusterOperatorCRModification

meaning

이 경고는 HyperConverged Cluster Operator(HCO)의 피연산자가 HCO가 아닌 다른 사람에 의해 변경될 때 실행됩니다.

HCO는 의견 있는 방식으로 OpenShift Virtualization 및 지원 Operator를 구성하고 예기치 않은 변경 사항이 있을 때 해당 피연산자를 덮어씁니다. 사용자는 피연산자를 직접 수정할 수 없습니다. HyperConverged 사용자 정의 리소스는 구성에 대한 정보의 소스입니다.

보안 등급

피연산자를 수동으로 변경하면 클러스터 구성이 변동하고 불안정해질 수 있습니다.

진단
  • 경고 세부 사항에서 component_name 값을 확인하여 변경 중인 피연산자 종류(kubevirt) 및 피연산자 이름(kubevirt-kubevirt-hyperconverged)을 결정합니다.

    Labels
      alertname=KubevirtHyperconvergedClusterOperatorCRModification
      component_name=kubevirt/kubevirt-kubevirt-hyperconverged
      severity=warning
완화 방법

HCO 피연산자를 직접 변경하지 마십시오. HyperConverged 오브젝트를 사용하여 클러스터를 구성합니다.

피연산자가 수동으로 변경되지 않으면 10분 후에 경고가 자동으로 해결됩니다.

14.14.15. KubevirtHyperconvergedClusterOperatorInstallationNotCompletedAlert

meaning

이 경고는 HyperConverged Cluster Operator(HCO)가 HyperConverged CR(사용자 정의 리소스) 없이 1시간 이상 실행될 때 실행됩니다.

이 경고에는 다음과 같은 원인이 있습니다.

  • 설치 프로세스 중에 HCO를 설치했지만 HyperConverged CR을 생성하지 않았습니다.
  • 설치 제거 프로세스 중에 HCO를 설치 제거하기 전에 HyperConverged CR을 제거하고 HCO가 계속 실행됩니다.
완화 방법

완화 조치는 HCO를 설치 또는 설치 제거하는지에 따라 다릅니다.

  • 기본값을 사용하여 HyperConverged CR을 생성하여 설치를 완료합니다.

    $ cat <<EOF | oc apply -f -
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: hco-operatorgroup
      namespace: kubevirt-hyperconverged
    spec: {}
    EOF
  • HCO를 제거합니다. 제거 프로세스가 계속 실행되는 경우 경고를 취소하기 위해 해당 문제를 해결해야 합니다.

14.14.16. KubevirtHyperconvergedClusterOperatorUSModification

meaning

이 경고는 HyperConverged Cluster Operator(HCO)의 피연산자를 변경하는 데 JSON Patch 주석을 사용할 때 실행됩니다.

HCO는 의견 있는 방식으로 OpenShift Virtualization 및 지원 Operator를 구성하고 예기치 않은 변경 사항이 있을 때 해당 피연산자를 덮어씁니다. 사용자는 피연산자를 직접 수정할 수 없습니다.

그러나 변경이 필요하며 HCO API에서 지원되지 않는 경우 JSON 패치 주석을 사용하여 HCO에서 Operator 변경을 설정할 수 있습니다. 이러한 변경 사항은 조정 프로세스 중에 HCO에서 되돌릴 수 없습니다.

보안 등급

JSON 패치 주석을 잘못 사용하면 예기치 않은 결과가 발생하거나 불안정한 환경이 발생할 수 있습니다.

구성 요소 사용자 정의 리소스의 구조가 변경될 수 있으므로 JSON 패치 주석을 사용하여 시스템을 업그레이드하는 것은 위험합니다.

진단
  • 경고 세부 사항에서 annotations_name 을 확인하여 JSON Patch 주석을 확인합니다.

    Labels
      alertname=KubevirtHyperconvergedClusterOperatorUSModification
      annotation_name=kubevirt.kubevirt.io/jsonpatch
      severity=info
완화 방법

HCO API를 사용하여 피연산자를 변경하는 것이 가장 좋습니다. 그러나 JSON Patch 주석만 변경할 수 있는 경우 신중하게 진행합니다.

잠재적인 문제를 방지하기 위해 업그레이드하기 전에 JSON 패치 주석을 제거합니다.

14.14.17. KubevirtVmHighMemoryUsage

meaning

이 경고는 VM(가상 머신)을 호스팅하는 컨테이너의 사용 가능한 메모리가 20MB 미만일 때 실행됩니다.

보안 등급

컨테이너 메모리 제한을 초과하면 컨테이너 내부에서 실행 중인 가상 머신이 런타임에 의해 종료됩니다.

진단
  1. virt-launcher Pod 세부 정보를 가져옵니다.

    $ oc get pod <virt-launcher> -o yaml
  2. virt-launcher Pod에서 메모리 사용량이 많은 컴퓨팅 컨테이너 프로세스를 식별합니다.

    $ oc exec -it <virt-launcher> -c compute -- top
완화 방법
  • 다음 예와 같이 VirtualMachine 사양에서 메모리 제한을 늘립니다.

    spec:
      running: false
      template:
        metadata:
          labels:
            kubevirt.io/vm: vm-name
        spec:
          domain:
            resources:
              limits:
                memory: 200Mi
              requests:
                memory: 128Mi

14.14.18. KubeVirtVMIExcessiveMigrations

meaning

이 경고는 VMI(가상 머신 인스턴스)가 24시간 동안 12번 이상 실시간 마이그레이션될 때 실행됩니다.

이러한 마이그레이션 비율은 업그레이드 중에도 비정상적으로 높습니다. 이 경고는 네트워크 중단 또는 리소스 부족과 같은 클러스터 인프라의 문제를 나타낼 수 있습니다.

보안 등급

너무 자주 마이그레이션되는 가상 머신(VM)은 전환 중에 메모리 페이지 폴트가 발생하므로 성능이 저하될 수 있습니다.

진단
  1. 작업자 노드에 충분한 리소스가 있는지 확인합니다.

    $ oc get nodes -l node-role.kubernetes.io/worker= -o json | \
      jq .items[].status.allocatable

    출력 예

    {
      "cpu": "3500m",
      "devices.kubevirt.io/kvm": "1k",
      "devices.kubevirt.io/sev": "0",
      "devices.kubevirt.io/tun": "1k",
      "devices.kubevirt.io/vhost-net": "1k",
      "ephemeral-storage": "38161122446",
      "hugepages-1Gi": "0",
      "hugepages-2Mi": "0",
      "memory": "7000128Ki",
      "pods": "250"
    }

  2. 작업자 노드의 상태를 확인합니다.

    $ oc get nodes -l node-role.kubernetes.io/worker= -o json | \
      jq .items[].status.conditions

    출력 예

    {
      "lastHeartbeatTime": "2022-05-26T07:36:01Z",
      "lastTransitionTime": "2022-05-23T08:12:02Z",
      "message": "kubelet has sufficient memory available",
      "reason": "KubeletHasSufficientMemory",
      "status": "False",
      "type": "MemoryPressure"
    },
    {
      "lastHeartbeatTime": "2022-05-26T07:36:01Z",
      "lastTransitionTime": "2022-05-23T08:12:02Z",
      "message": "kubelet has no disk pressure",
      "reason": "KubeletHasNoDiskPressure",
      "status": "False",
      "type": "DiskPressure"
    },
    {
      "lastHeartbeatTime": "2022-05-26T07:36:01Z",
      "lastTransitionTime": "2022-05-23T08:12:02Z",
      "message": "kubelet has sufficient PID available",
      "reason": "KubeletHasSufficientPID",
      "status": "False",
      "type": "PIDPressure"
    },
    {
      "lastHeartbeatTime": "2022-05-26T07:36:01Z",
      "lastTransitionTime": "2022-05-23T08:24:15Z",
      "message": "kubelet is posting ready status",
      "reason": "KubeletReady",
      "status": "True",
      "type": "Ready"
    }

  3. 작업자 노드에 로그인하고 kubelet 서비스가 실행 중인지 확인합니다.

    $ systemctl status kubelet
  4. kubelet 저널 로그에 오류 메시지가 있는지 확인합니다.

    $ journalctl -r -u kubelet
완화 방법

작업자 노드에 VM 워크로드를 중단하지 않고 실행하기에 충분한 리소스(CPU, 메모리, 디스크)가 있는지 확인합니다.

문제가 지속되면 근본 원인을 확인하고 문제를 해결하십시오.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.19. KubeVirtVMStuckInErrorState

meaning

이 경고는 VM(가상 머신)이 5분 이상 오류 상태가 될 때 실행됩니다.

오류 상태:

  • CrashLoopBackOff
  • 알 수 없음
  • 예약 불가
  • ErrImagePull
  • ImagePullBackOff
  • PvcNotFound
  • DataVolumeError

이 경고는 VM 구성의 누락된 영구 볼륨 클레임 또는 네트워크 중단 또는 노드 리소스 부족과 같은 클러스터 인프라의 문제를 나타낼 수 있습니다.

보안 등급

즉각적인 영향은 없습니다. 그러나 이 경고가 지속되는 경우 근본 원인을 조사하고 문제를 해결해야 합니다.

진단
  1. VMI(가상 머신 인스턴스) 세부 정보를 확인합니다.

    $ oc describe vmi <vmi> -n <namespace>

    출력 예

    Name:          testvmi-hxghp
    Namespace:     kubevirt-test-default1
    Labels:        name=testvmi-hxghp
    Annotations:   kubevirt.io/latest-observed-api-version: v1
                   kubevirt.io/storage-observed-api-version: v1alpha3
    API Version:   kubevirt.io/v1
    Kind:          VirtualMachineInstance
    ...
    Spec:
      Domain:
    ...
        Resources:
          Requests:
            Cpu:     5000000Gi
            Memory:  5130000240Mi
    ...
    Status:
    ...
      Conditions:
        Last Probe Time:       2022-10-03T11:11:07Z
        Last Transition Time:  2022-10-03T11:11:07Z
        Message:               Guest VM is not reported as running
        Reason:                GuestNotRunning
        Status:                False
        Type:                  Ready
        Last Probe Time:       <nil>
        Last Transition Time:  2022-10-03T11:11:07Z
        Message:               0/2 nodes are available: 2 Insufficient cpu, 2
          Insufficient memory.
        Reason:                Unschedulable
        Status:                False
        Type:                  PodScheduled
      Guest OS Info:
      Phase:  Scheduling
      Phase Transition Timestamps:
        Phase:                        Pending
        Phase Transition Timestamp:   2022-10-03T11:11:07Z
        Phase:                        Scheduling
        Phase Transition Timestamp:   2022-10-03T11:11:07Z
      Qos Class:                       Burstable
      Runtime User:                    0
      Virtual Machine Revision Name:   revision-start-vm-3503e2dc-27c0-46ef-9167-7ae2e7d93e6e-1
    Events:
      Type    Reason            Age   From                       Message
      ----    ------            ----  ----                       -------
      Normal  SuccessfulCreate  27s   virtualmachine-controller  Created virtual
        machine pod virt-launcher-testvmi-hxghp-xh9qn

  2. 노드 리소스를 확인합니다.

    $ oc get nodes -l node-role.kubernetes.io/worker= -o json | jq '.items | \
      .[].status.allocatable'

    출력 예

    {
      "cpu": "5",
      "devices.kubevirt.io/kvm": "1k",
      "devices.kubevirt.io/sev": "0",
      "devices.kubevirt.io/tun": "1k",
      "devices.kubevirt.io/vhost-net": "1k",
      "ephemeral-storage": "33812468066",
      "hugepages-1Gi": "0",
      "hugepages-2Mi": "128Mi",
      "memory": "3783496Ki",
      "pods": "110"
    }

  3. 노드에서 오류 상태를 확인합니다.

    $ oc get nodes -l node-role.kubernetes.io/worker= -o json | jq '.items | \
      .[].status.conditions'

    출력 예

    [
      {
        "lastHeartbeatTime": "2022-10-03T11:13:34Z",
        "lastTransitionTime": "2022-10-03T10:14:20Z",
        "message": "kubelet has sufficient memory available",
        "reason": "KubeletHasSufficientMemory",
        "status": "False",
        "type": "MemoryPressure"
      },
      {
        "lastHeartbeatTime": "2022-10-03T11:13:34Z",
        "lastTransitionTime": "2022-10-03T10:14:20Z",
        "message": "kubelet has no disk pressure",
        "reason": "KubeletHasNoDiskPressure",
        "status": "False",
        "type": "DiskPressure"
      },
      {
        "lastHeartbeatTime": "2022-10-03T11:13:34Z",
        "lastTransitionTime": "2022-10-03T10:14:20Z",
        "message": "kubelet has sufficient PID available",
        "reason": "KubeletHasSufficientPID",
        "status": "False",
        "type": "PIDPressure"
      },
      {
        "lastHeartbeatTime": "2022-10-03T11:13:34Z",
        "lastTransitionTime": "2022-10-03T10:14:30Z",
        "message": "kubelet is posting ready status",
        "reason": "KubeletReady",
        "status": "True",
        "type": "Ready"
      }
    ]

완화 방법

문제를 확인하고 해결하십시오.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.20. KubeVirtVMStuckInMigratingState

meaning

이 경고는 VM(가상 머신)이 5분 이상 마이그레이션 상태가 될 때 실행됩니다.

이 경고는 네트워크 중단 또는 노드 리소스 부족과 같은 클러스터 인프라의 문제를 나타낼 수 있습니다.

보안 등급

즉각적인 영향은 없습니다. 그러나 이 경고가 지속되는 경우 근본 원인을 조사하고 문제를 해결해야 합니다.

진단
  1. 노드 리소스를 확인합니다.

    $ oc get nodes -l node-role.kubernetes.io/worker= -o json | jq '.items | \
      .[].status.allocatable'

    출력 예

    {
       "cpu": "5",
       "devices.kubevirt.io/kvm": "1k",
       "devices.kubevirt.io/sev": "0",
       "devices.kubevirt.io/tun": "1k",
       "devices.kubevirt.io/vhost-net": "1k",
       "ephemeral-storage": "33812468066",
       "hugepages-1Gi": "0",
       "hugepages-2Mi": "128Mi",
       "memory": "3783496Ki",
       "pods": "110"
    }

  2. 노드 상태 조건을 확인합니다.

    $ oc get nodes -l node-role.kubernetes.io/worker= -o json | jq '.items | \
      .[].status.conditions'

    출력 예

    [
      {
        "lastHeartbeatTime": "2022-10-03T11:13:34Z",
        "lastTransitionTime": "2022-10-03T10:14:20Z",
        "message": "kubelet has sufficient memory available",
        "reason": "KubeletHasSufficientMemory",
        "status": "False",
        "type": "MemoryPressure"
      },
      {
        "lastHeartbeatTime": "2022-10-03T11:13:34Z",
        "lastTransitionTime": "2022-10-03T10:14:20Z",
        "message": "kubelet has no disk pressure",
        "reason": "KubeletHasNoDiskPressure",
        "status": "False",
        "type": "DiskPressure"
      },
      {
        "lastHeartbeatTime": "2022-10-03T11:13:34Z",
        "lastTransitionTime": "2022-10-03T10:14:20Z",
        "message": "kubelet has sufficient PID available",
        "reason": "KubeletHasSufficientPID",
        "status": "False",
        "type": "PIDPressure"
      },
      {
        "lastHeartbeatTime": "2022-10-03T11:13:34Z",
        "lastTransitionTime": "2022-10-03T10:14:30Z",
        "message": "kubelet is posting ready status",
        "reason": "KubeletReady",
        "status": "True",
        "type": "Ready"
      }
    ]

완화 방법

가상 머신의 마이그레이션 구성을 확인하여 워크로드에 적합한지 확인합니다.

KubeVirt 사용자 정의 리소스의 MigrationConfiguration 스탠자를 편집하여 클러스터 전체 마이그레이션 구성을 설정합니다.

마이그레이션 정책을 생성하여 특정 범위에 대한 마이그레이션 구성을 설정합니다.

vm.Status.MigrationState.MigrationPolicyName 매개변수를 확인하여 VM이 마이그레이션 정책에 바인딩되는지 여부를 확인할 수 있습니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.21. KubeVirtVMStuckInStartingState

meaning

이 경고는 VM(가상 머신)이 5분 이상 시작 상태가 될 때 실행됩니다.

이 경고는 잘못된 우선 순위 클래스 또는 누락된 네트워크 장치와 같은 VM 구성의 문제를 나타낼 수 있습니다.

보안 등급

즉각적인 영향은 없습니다. 그러나 이 경고가 지속되는 경우 근본 원인을 조사하고 문제를 해결해야 합니다.

진단
  • 오류 상태에 대한 VMI(가상 머신 인스턴스) 세부 정보를 확인합니다.

    $ oc describe vmi <vmi> -n <namespace>

    출력 예

    Name:          testvmi-ldgrw
    Namespace:     kubevirt-test-default1
    Labels:        name=testvmi-ldgrw
    Annotations:   kubevirt.io/latest-observed-api-version: v1
                   kubevirt.io/storage-observed-api-version: v1alpha3
    API Version:   kubevirt.io/v1
    Kind:          VirtualMachineInstance
    ...
    Spec:
    ...
      Networks:
        Name:  default
        Pod:
      Priority Class Name:               non-preemtible
      Termination Grace Period Seconds:  0
    Status:
      Conditions:
        Last Probe Time:       2022-10-03T11:08:30Z
        Last Transition Time:  2022-10-03T11:08:30Z
        Message:               virt-launcher pod has not yet been scheduled
        Reason:                PodNotExists
        Status:                False
        Type:                  Ready
        Last Probe Time:       <nil>
        Last Transition Time:  2022-10-03T11:08:30Z
        Message:               failed to create virtual machine pod: pods
        "virt-launcher-testvmi-ldgrw-" is forbidden: no PriorityClass with name
        non-preemtible was found
        Reason:                FailedCreate
        Status:                False
        Type:                  Synchronized
      Guest OS Info:
      Phase:  Pending
      Phase Transition Timestamps:
        Phase:                        Pending
        Phase Transition Timestamp:   2022-10-03T11:08:30Z
      Runtime User:                    0
      Virtual Machine Revision Name:
        revision-start-vm-6f01a94b-3260-4c5a-bbe5-dc98d13e6bea-1
    Events:
      Type     Reason        Age                From                       Message
      ----     ------        ----               ----                       -------
      Warning  FailedCreate  8s (x13 over 28s)  virtualmachine-controller  Error
      creating pod: pods "virt-launcher-testvmi-ldgrw-" is forbidden: no
      PriorityClass with name non-preemtible was found

완화 방법

VM이 올바르게 구성되어 필요한 리소스가 있는지 확인합니다.

Pending 상태는 VM이 아직 예약되지 않았음을 나타냅니다. 다음과 같은 가능한 원인을 확인하십시오.

  • virt-launcher Pod는 예약되지 않습니다.
  • VMI의 토폴로지 힌트는 최신 상태가 아닙니다.
  • 데이터 볼륨이 프로비저닝되거나 준비되지 않았습니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.22. LowKVMNodesCount

meaning

이 경고는 클러스터의 두 개 미만의 노드에 KVM 리소스가 있을 때 실행됩니다.

보안 등급

클러스터에 실시간 마이그레이션을 위해 KVM 리소스가 있는 노드가 두 개 이상 있어야 합니다.

노드에 KVM 리소스가 없는 경우 가상 머신을 예약하거나 실행할 수 없습니다.

진단
  • KVM 리소스로 노드를 식별합니다.

    $ oc get nodes -o jsonpath='{.items[*].status.allocatable}' | \
      grep devices.kubevirt.io/kvm
완화 방법

KVM 리소스가 없는 노드에 KVM을 설치합니다.

14.14.23. LowReadyVirtControllersCount

meaning

이 경고는 하나 이상의 virt-controller Pod가 실행 중일 때 실행되지만 이러한 Pod 중 어느 것도 지난 5분 동안 Ready 상태에 있지 않은 경우 실행됩니다.

virt-controller 장치는 VMI(가상 머신 인스턴스)의 CRD(사용자 정의 리소스 정의)를 모니터링하고 관련 Pod를 관리합니다. 장치는 VMI의 Pod를 생성하고 라이프사이클을 관리합니다. 이 장치는 클러스터 전체 가상화 기능에 중요합니다.

보안 등급

이 경고는 클러스터 수준 오류가 발생할 수 있음을 나타냅니다. 새 VMI 시작 또는 기존 VMI 종료와 같은 VM 라이프사이클 관리와 관련된 작업이 실패합니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-controller 장치를 사용할 수 있는지 확인합니다.

    $ oc get deployment -n $NAMESPACE virt-controller \
      -o jsonpath='{.status.readyReplicas}'
  3. virt-controller 배포 상태를 확인합니다.

    $ oc -n $NAMESPACE get deploy virt-controller -o yaml
  4. virt-controller 배포의 세부 정보를 가져와서 Pod 충돌 또는 이미지 가져오기 실패와 같은 상태 조건을 확인합니다.

    $ oc -n $NAMESPACE describe deploy virt-controller
  5. 노드에서 문제가 발생했는지 확인합니다. 예를 들어 NotReady 상태에 있을 수 있습니다.

    $ oc get nodes
완화 방법

이 경고에는 다음을 포함하여 여러 원인이 있을 수 있습니다.

  • 클러스터에 메모리가 충분하지 않습니다.
  • 노드가 다운되었습니다.
  • API 서버가 과부하되었습니다. 예를 들어 스케줄러는 부하가 많은 수 있으므로 완전히 사용할 수 없습니다.
  • 네트워크 문제가 있습니다.

근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.24. LowReadyVirtOperatorsCount

meaning

이 경고는 하나 이상의 virt-operator Pod가 실행 중일 때 실행되지만 이러한 Pod 중 어느 것도 마지막 10분 동안 Ready 상태가 되지 않았습니다.

virt-operator 는 클러스터에서 시작하는 첫 번째 Operator입니다. virt-operator 배포에는 두 개의 virt-operator pod의 기본 복제본이 있습니다.

주요 책임은 다음과 같습니다.

  • 클러스터 설치, 실시간 업그레이드 및 업그레이드
  • virt-controller,virt-handler,virt-launcher 와 같은 최상위 컨트롤러의 라이프사이클 모니터링 및 조정 관리
  • 인증서 교체 및 인프라 관리와 같은 특정 클러스터 전체 작업
보안 등급

클러스터 수준 오류가 발생할 수 있습니다. 인증 교체, 업그레이드 및 컨트롤러 조정과 같은 중요한 클러스터 전체 관리 기능을 사용할 수 없게 될 수 있습니다. 이러한 상태도 NoReadyVirtOperator 경고를 트리거합니다.

virt-operator 는 클러스터에서 VM(가상 머신)을 직접 지원하지 않습니다. 따라서 임시 사용 불가능은 VM 워크로드에 큰 영향을 미치지 않습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-operator 배포의 이름을 가져옵니다.

    $ oc -n $NAMESPACE get deploy virt-operator -o yaml
  3. virt-operator 배포의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe deploy virt-operator
  4. NotReady 상태와 같은 노드 문제를 확인합니다.

    $ oc get nodes
완화 방법

진단 절차 중 얻은 정보를 기반으로 근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.25. LowVirtAPICount

meaning

이 경고는 스케줄링에 두 개 이상의 노드를 사용할 수 있지만 60분 동안 사용 가능한 virt-api 포드가 하나만 감지되면 실행됩니다.

보안 등급

virt-api Pod가 단일 실패 지점이 되므로 노드 제거 중에 API 호출 중단이 발생할 수 있습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. 사용 가능한 virt-api Pod 수를 확인합니다.

    $ oc get deployment -n $NAMESPACE virt-api \
      -o jsonpath='{.status.readyReplicas}'
  3. virt-api 배포의 상태에 오류 조건이 있는지 확인합니다.

    $ oc -n $NAMESPACE get deploy virt-api -o yaml
  4. 노드에서 NotReady 상태의 노드와 같은 문제가 있는지 확인합니다.

    $ oc get nodes
완화 방법

근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.26. LowVirtControllersCount

meaning

이 경고는 적은 수의 virt-controller Pod가 감지되면 실행됩니다. 고가용성을 보장하기 위해서는 하나 이상의 virt-controller Pod를 사용할 수 있어야 합니다. 기본 복제본 수는 2입니다.

virt-controller 장치는 VMI(가상 머신 인스턴스)의 CRD(사용자 정의 리소스 정의)를 모니터링하고 관련 Pod를 관리합니다. 장치는 VMI에 대한 Pod를 생성하고 Pod의 라이프사이클을 관리합니다. 이 장치는 클러스터 전체 가상화 기능에 중요합니다.

보안 등급

OpenShift Virtualization의 응답성이 부정적인 영향을 받을 수 있습니다. 예를 들어 특정 요청이 누락될 수 있습니다.

또한 다른 virt-launcher 인스턴스가 예기치 않게 종료되면 OpenShift Virtualization이 완전히 응답하지 않을 수 있습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. 실행 중인 virt-controller Pod를 사용할 수 있는지 확인합니다.

    $ oc -n $NAMESPACE get pods -l kubevirt.io=virt-controller
  3. virt-launcher 로그에서 오류 메시지가 있는지 확인합니다.

    $ oc -n $NAMESPACE logs <virt-launcher>
  4. virt-launcher Pod의 세부 정보를 가져와서 예기치 않은 종료 또는 NotReady 상태와 같은 상태 조건을 확인합니다.

    $ oc -n $NAMESPACE describe pod/<virt-launcher>
완화 방법

이 경고는 다음을 포함하여 다양한 원인이 있을 수 있습니다.

  • 클러스터에 메모리가 충분하지 않음
  • 노드가 다운됨
  • API 서버가 과부하되었습니다. 예를 들어 스케줄러는 부하가 많은 수 있으므로 완전히 사용할 수 없습니다.
  • 네트워킹 문제

근본 원인을 확인하고 가능한 경우 수정합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.27. LowVirtOperatorCount

meaning

이 경고는 마지막 60분 동안 Ready 상태에서 하나의 virt-operator Pod만 실행 중일 때 실행됩니다.

virt-operator 는 클러스터에서 시작하는 첫 번째 Operator입니다. 주요 책임은 다음과 같습니다.

  • 클러스터 설치, 실시간 업그레이드 및 업그레이드
  • virt-controller,virt-handler,virt-launcher 와 같은 최상위 컨트롤러의 라이프사이클 모니터링 및 조정 관리
  • 인증서 교체 및 인프라 관리와 같은 특정 클러스터 전체 작업
보안 등급

virt-operator 는 배포에 HA(고가용성)를 제공할 수 없습니다. HA에는 Ready 상태에 두 개 이상의 virt-operator Pod가 필요합니다. 기본 배포는 두 개의 Pod입니다.

virt-operator 는 클러스터에서 VM(가상 머신)을 직접 지원하지 않습니다. 따라서 가용성 감소는 VM 워크로드에 크게 영향을 미치지 않습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-operator Pod의 상태를 확인합니다.

    $ oc -n $NAMESPACE get pods -l kubevirt.io=virt-operator
  3. 영향을 받는 virt-operator Pod의 로그를 검토합니다.

    $ oc -n $NAMESPACE logs <virt-operator>
  4. 영향을 받는 virt-operator Pod의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe pod <virt-operator>
완화 방법

진단 절차 중 얻은 정보를 기반으로 근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.28. NetworkAddonsConfigNotReady

meaning

이 경고는 CNAO(Cluster Network Addons Operator)의 NetworkAddonsConfig CR(사용자 정의 리소스)이 준비되지 않은 경우 실행됩니다.

CNAO는 클러스터에 추가 네트워킹 구성 요소를 배포합니다. 이 경고는 배포된 구성 요소 중 하나가 준비되지 않았음을 나타냅니다.

보안 등급

네트워크 기능이 영향을 받습니다.

진단
  1. NetworkAddonsConfig CR의 상태 조건을 확인하여 준비되지 않은 배포 또는 데몬 세트를 확인합니다.

    $ oc get networkaddonsconfig \
      -o custom-columns="":.status.conditions[*].message

    출력 예

    DaemonSet "cluster-network-addons/macvtap-cni" update is being processed...

  2. 구성 요소의 Pod에 오류가 있는지 확인합니다.

    $ oc -n cluster-network-addons get daemonset <pod> -o yaml
  3. 구성 요소의 로그를 확인합니다.

    $ oc -n cluster-network-addons logs <pod>
  4. 구성 요소의 오류 상태에 대한 세부 정보를 확인합니다.

    $ oc -n cluster-network-addons describe <pod>
완화 방법

근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.29. NoLeadingVirtOperator

meaning

virt-operator Pod가 Ready 상태인 경우에도 리더 리스가 있는 virt-operator Pod가 10분 동안 탐지되면 이 경고가 실행됩니다. 경고는 리더 Pod를 사용할 수 없음을 나타냅니다.

virt-operator 는 클러스터에서 시작하는 첫 번째 Operator입니다. 주요 책임은 다음과 같습니다.

  • 클러스터 설치, 실시간 업데이트 및 실시간 업그레이드
  • virt-controller,virt-handler,virt-launcher 와 같은 최상위 컨트롤러의 라이프사이클 모니터링 및 조정 관리
  • 인증서 교체 및 인프라 관리와 같은 특정 클러스터 전체 작업

virt-operator 배포에는 Pod 2의 기본 복제본이 있으며 하나의 Pod에 리더 리스가 있습니다.

보안 등급

이 경고는 클러스터 수준에서 오류를 나타냅니다. 결과적으로 인증 교체, 업그레이드 및 조정과 같은 중요한 클러스터 전체 관리 기능을 사용할 수 없습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A -o \
      custom-columns="":.metadata.namespace)"
  2. virt-operator Pod의 상태를 가져옵니다.

    $ oc -n $NAMESPACE get pods -l kubevirt.io=virt-operator
  3. virt-operator Pod 로그를 확인하여 리더 상태를 확인합니다.

    $ oc -n $NAMESPACE logs | grep lead

    리더 Pod의 예:

    {"component":"virt-operator","level":"info","msg":"Attempting to acquire
    leader status","pos":"application.go:400","timestamp":"2021-11-30T12:15:18.635387Z"}
    I1130 12:15:18.635452       1 leaderelection.go:243] attempting to acquire
    leader lease <namespace>/virt-operator...
    I1130 12:15:19.216582       1 leaderelection.go:253] successfully acquired
    lease <namespace>/virt-operator
    {"component":"virt-operator","level":"info","msg":"Started leading",
    "pos":"application.go:385","timestamp":"2021-11-30T12:15:19.216836Z"}

    비 레더 Pod의 예:

    {"component":"virt-operator","level":"info","msg":"Attempting to acquire
    leader status","pos":"application.go:400","timestamp":"2021-11-30T12:15:20.533696Z"}
    I1130 12:15:20.533792       1 leaderelection.go:243] attempting to acquire
    leader lease <namespace>/virt-operator...
  4. 영향을 받는 virt-operator Pod의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe pod <virt-operator>
완화 방법

진단 절차 중 얻은 정보를 기반으로 근본 원인을 찾아 문제를 해결하십시오.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.30. NoReadyVirtController

meaning

이 경고는 사용 가능한 virt-controller 장치가 5분 동안 탐지되지 않은 경우 실행됩니다.

virt-controller 장치는 VMI(가상 머신 인스턴스)의 사용자 정의 리소스 정의를 모니터링하고 관련 Pod를 관리합니다. 장치는 VMI에 대한 Pod를 생성하고 Pod의 라이프사이클을 관리합니다.

따라서 모든 클러스터 전체 가상화 기능에 virt-controller 장치가 중요합니다.

보안 등급

VM 라이프사이클 관리와 관련된 모든 작업이 실패합니다. 여기에는 새 VMI 시작 또는 기존 VMI 종료가 포함됩니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-controller 장치 수를 확인합니다.

    $ oc get deployment -n $NAMESPACE virt-controller \
      -o jsonpath='{.status.readyReplicas}'
  3. virt-controller 배포 상태를 확인합니다.

    $ oc -n $NAMESPACE get deploy virt-controller -o yaml
  4. virt-controller 배포의 세부 정보를 가져와서 Pod 충돌 또는 이미지 가져오기 실패와 같은 상태 조건을 확인합니다.

    $ oc -n $NAMESPACE describe deploy virt-controller
  5. virt-controller Pod의 세부 정보를 가져옵니다.

    $ get pods -n $NAMESPACE | grep virt-controller
  6. virt-controller Pod의 로그에 오류 메시지가 있는지 확인합니다.

    $ oc logs -n $NAMESPACE <virt-controller>
  7. NotReady 상태와 같은 문제가 노드에 있는지 확인합니다.

    $ oc get nodes
완화 방법

진단 절차 중 얻은 정보를 기반으로 근본 원인을 찾아 문제를 해결하십시오.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.31. NoReadyVirtOperator

meaning

이 경고는 Ready 상태의 virt-operator Pod가 10분 동안 탐지되면 실행됩니다.

virt-operator 는 클러스터에서 시작하는 첫 번째 Operator입니다. 주요 책임은 다음과 같습니다.

  • 클러스터 설치, 실시간 업그레이드 및 업그레이드
  • virt-controller,virt-handler,virt-launcher 와 같은 최상위 컨트롤러의 라이프 사이클 모니터링 및 조정 관리
  • 인증서 교체 및 인프라 관리와 같은 특정 클러스터 전체 작업

기본 배포는 두 개의 virt-operator Pod입니다.

보안 등급

이 경고는 클러스터 수준 오류를 나타냅니다. 인증 교체, 업그레이드 및 조정과 같은 중요한 클러스터 관리 기능을 사용할 수 없습니다.

virt-operator 는 클러스터의 가상 머신을 직접 지원하지 않습니다. 따라서 임시 사용 불가능은 워크로드에 큰 영향을 미치지 않습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-operator 배포의 이름을 가져옵니다.

    $ oc -n $NAMESPACE get deploy virt-operator -o yaml
  3. virt-operator 배포에 대한 설명을 생성합니다.

    $ oc -n $NAMESPACE describe deploy virt-operator
  4. NotReady 상태와 같은 노드 문제를 확인합니다.

    $ oc get nodes
완화 방법

진단 절차 중 얻은 정보를 기반으로 근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.32. OrphanedVirtualMachineInstances

meaning

이 경고는 VMI(가상 머신 인스턴스) 또는 virt-launcher Pod가 실행 중인 virt-handler Pod가 없는 노드에서 실행될 때 실행됩니다. 이러한 VMI를 고립된 이라고 합니다.

보안 등급

고립된 VMI는 관리할 수 없습니다.

진단
  1. virt-handler Pod의 상태를 확인하여 실행 중인 노드를 확인합니다.

    $ oc get pods --all-namespaces -o wide -l kubevirt.io=virt-handler
  2. VMI의 상태를 확인하여 실행 중인 virt-handler Pod가 없는 노드에서 실행되는 VMI를 확인합니다.

    $ oc get vmis --all-namespaces
  3. virt-handler 데몬의 상태를 확인합니다.

    $ oc get daemonset virt-handler --all-namespaces

    출력 예

    NAME          DESIRED  CURRENT  READY  UP-TO-DATE  AVAILABLE ...
    virt-handler  2        2        2      2           2         ...

    Desired,ReadyAvailable 열에 동일한 값이 포함된 경우 데몬 세트는 정상으로 간주됩니다.

  4. virt-handler 데몬 세트가 정상이 아닌 경우 virt-handler 데몬 세트에 Pod 배포 문제가 있는지 확인합니다.

    $ oc get daemonset virt-handler --all-namespaces -o yaml | jq .status
  5. NotReady 상태와 같은 문제가 노드에 있는지 확인합니다.

    $ oc get nodes
  6. 워크로드 배치 정책의 KubeVirt CR(사용자 정의 리소스)의 spec.workloads 스탠자를 확인합니다.

    $ oc get kubevirt kubevirt --all-namespaces -o yaml
완화 방법

워크로드 배치 정책이 구성된 경우 VMI가 포함된 노드를 정책에 추가합니다.

노드에서 virt-handler Pod를 제거하면 노드의 테인트 및 허용 오차 또는 Pod의 스케줄링 규칙을 변경해야 할 수 있습니다.

근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.33. OutdatedVirtualMachineInstanceWorkloads

meaning

이전 virt-launcher Pod에서 VMI(가상 머신 인스턴스)를 실행할 때 OpenShift Virtualization 컨트롤 플레인을 업데이트한 후 24시간 후에 이 경고가 발생합니다.

보안 등급

오래된 VMI가 새로운 OpenShift Virtualization 기능에 액세스하지 못할 수 있습니다.

오래된 VMI에는 virt-launcher Pod 업데이트와 관련된 보안 수정 사항이 제공되지 않습니다.

진단
  1. 오래된 VMI를 확인합니다.

    $ oc get vmi -l kubevirt.io/outdatedLauncherImage --all-namespaces
  2. KubeVirt 사용자 정의 리소스(CR)를 확인하여 workloadUpdateMethodsworkloadUpdateStrategy 스탠자에 구성되어 있는지 확인합니다.

    $ oc get kubevirt kubevirt --all-namespaces -o yaml
  3. 오래된 각 VMI를 확인하여 라이브로 마이그레이션할 수 있는지 확인합니다.

    $ oc get vmi <vmi> -o yaml

    출력 예

    apiVersion: kubevirt.io/v1
    kind: VirtualMachineInstance
    ...
      status:
        conditions:
        - lastProbeTime: null
          lastTransitionTime: null
          message: cannot migrate VMI which does not use masquerade
          to connect to the pod network
          reason: InterfaceNotLiveMigratable
          status: "False"
          type: LiveMigratable

완화 방법
자동화된 워크로드 업데이트 구성

HyperConverged CR을 업데이트하여 자동 워크로드 업데이트를 활성화합니다.

실시간migratable VMI와 연결된 VM 중지
  • VMI가 Live-migratable이 아니고 runStrategy: always 가 해당 VirtualMachine 오브젝트에 설정된 경우 VM(가상 머신)을 수동으로 중지하여 VMI를 업데이트할 수 있습니다.

    $ virctl stop --namespace <namespace> <vm>

새 VMI는 중지된 VMI를 교체하기 위해 업데이트된 virt-launcher Pod에서 즉시 회전합니다. 이는 재시작 작업과 동일합니다.

참고

실시간 마이그레이션 가능한 VM을 수동으로 중지하는 것은 안전하지 않으며 워크로드를 중단하기 때문에 권장되지 않습니다.

실시간 마이그레이션 VMI

VMI가 실시간 마이그레이션 가능한 경우 실행 중인 특정 VMI를 대상으로 하는 VirtualMachineInstanceMigration 오브젝트를 생성하여 업데이트할 수 있습니다. VMI가 업데이트된 virt-launcher Pod로 마이그레이션됩니다.

  1. VirtualMachineInstanceMigration 매니페스트를 생성하여 migration.yaml 로 저장합니다.

    apiVersion: kubevirt.io/v1
    kind: VirtualMachineInstanceMigration
    metadata:
      name: <migration_name>
      namespace: <namespace>
    spec:
      vmiName: <vmi_name>
  2. 마이그레이션을 트리거할 VirtualMachineInstanceMigration 오브젝트를 생성합니다.

    $ oc create -f migration.yaml

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.34. SSPCommonTemplatesModificationReverted

meaning

이 경고는 스케줄링, 스케일링 및 성능(SSP) Operator가 조정 프로세스의 일부로 공통 템플릿으로 변경 사항을 되돌릴 때 실행됩니다.

SSP Operator는 공통 템플릿과 Template Validator를 배포하고 조정합니다. 사용자 또는 스크립트가 공통 템플릿을 변경하면 SSP Operator에서 변경 사항을 되돌립니다.

보안 등급

공통 템플릿 변경 사항을 덮어씁니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get deployment -A | grep ssp-operator | \
      awk '{print $1}')"
  2. 변경된 사항이 있는 ssp-operator 로그를 확인합니다.

    $ oc -n $NAMESPACE logs --tail=-1 -l control-plane=ssp-operator | \
      grep 'common template' -C 3
완화 방법

변경 사항의 원인을 확인하고 해결하십시오.

템플릿 사본만 변경하고 템플릿 자체가 아닌 변경 사항을 확인하십시오.

14.14.35. SSPFailingToReconcile

meaning

이 경고는 SSP Operator가 실행 중이지만 스케줄링, 스케일링 및 성능(SSP) Operator의 조정 주기가 반복적으로 실패하면 실행됩니다.

SSP Operator는 공통 템플릿과 Template Validator의 배포 및 조정을 담당합니다.

보안 등급

종속 구성 요소가 배포되지 않을 수 있습니다. 구성 요소의 변경 사항은 조정되지 않을 수 있습니다. 결과적으로 공통 템플릿 또는 Template Validator가 업데이트되지 않거나 실패하는 경우 재설정할 수 있습니다.

진단
  1. NAMESPACE 환경 변수를 내보냅니다.

    $ export NAMESPACE="$(oc get deployment -A | grep ssp-operator | \
      awk '{print $1}')"
  2. ssp-operator Pod의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe pods -l control-plane=ssp-operator
  3. ssp-operator 로그에 오류가 있는지 확인합니다.

    $ oc -n $NAMESPACE logs --tail=-1 -l control-plane=ssp-operator
  4. virt-template-validator Pod의 상태를 가져옵니다.

    $ oc -n $NAMESPACE get pods -l name=virt-template-validator
  5. virt-template-validator Pod의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe pods -l name=virt-template-validator
  6. virt-template-validator 로그에서 오류가 있는지 확인합니다.

    $ oc -n $NAMESPACE logs --tail=-1 -l name=virt-template-validator
완화 방법

근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.36. SSPHighRateRejectedVms

meaning

이 경고는 잘못된 구성을 사용하여 사용자 또는 스크립트가 다수의 VM(가상 머신)을 생성하거나 수정하려고 할 때 실행됩니다.

보안 등급

VM은 작성되거나 수정되지 않습니다. 결과적으로 환경이 예상대로 작동하지 않을 수 있습니다.

진단
  1. NAMESPACE 환경 변수를 내보냅니다.

    $ export NAMESPACE="$(oc get deployment -A | grep ssp-operator | \
      awk '{print $1}')"
  2. virt-template-validator 로그에서 원인을 나타낼 수 있는 오류가 있는지 확인합니다.

    $ oc -n $NAMESPACE logs --tail=-1 -l name=virt-template-validator

    출력 예

    {"component":"kubevirt-template-validator","level":"info","msg":"evalution
    summary for ubuntu-3166wmdbbfkroku0:\nminimal-required-memory applied: FAIL,
    value 1073741824 is lower than minimum [2147483648]\n\nsucceeded=false",
    "pos":"admission.go:25","timestamp":"2021-09-28T17:59:10.934470Z"}

완화 방법

근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.37. SSPOperatorDown

meaning

이 경고는 모든 스케줄링, 스케일링 및 성능(SSP) Operator Pod가 중단될 때 실행됩니다.

SSP Operator는 공통 템플릿과 Template Validator의 배포 및 조정을 담당합니다.

보안 등급

종속 구성 요소가 배포되지 않을 수 있습니다. 구성 요소의 변경 사항은 조정되지 않을 수 있습니다. 결과적으로 공통 템플릿 및/또는 템플릿 검증기를 업데이트하지 않거나 실패하는 경우 재설정할 수 있습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get deployment -A | grep ssp-operator | \
      awk '{print $1}')"
  2. ssp-operator Pod의 상태를 확인합니다.

    $ oc -n $NAMESPACE get pods -l control-plane=ssp-operator
  3. ssp-operator Pod의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe pods -l control-plane=ssp-operator
  4. ssp-operator 로그에 오류 메시지가 있는지 확인합니다.

    $ oc -n $NAMESPACE logs --tail=-1 -l control-plane=ssp-operator
완화 방법

근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.38. SSPTemplateValidatorDown

meaning

이 경고는 모든 Template Validator Pod가 중단될 때 실행됩니다.

Template Validator는 VM(가상 머신)을 확인하여 템플릿을 위반하지 않는지 확인합니다.

보안 등급

VM은 템플릿에 대해 검증되지 않습니다. 결과적으로 해당 워크로드와 일치하지 않는 사양을 사용하여 VM을 생성할 수 있습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get deployment -A | grep ssp-operator | \
      awk '{print $1}')"
  2. virt-template-validator Pod의 상태를 가져옵니다.

    $ oc -n $NAMESPACE get pods -l name=virt-template-validator
  3. virt-template-validator Pod의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe pods -l name=virt-template-validator
  4. virt-template-validator 로그에서 오류 메시지가 있는지 확인합니다.

    $ oc -n $NAMESPACE logs --tail=-1 -l name=virt-template-validator
완화 방법

근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.39. VirtAPIDown

meaning

이 경고는 모든 API 서버 Pod가 중단될 때 실행됩니다.

보안 등급

OpenShift Virtualization 오브젝트는 API 호출을 보낼 수 없습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-api 포드의 상태를 확인합니다.

    $ oc -n $NAMESPACE get pods -l kubevirt.io=virt-api
  3. virt-api 배포 상태를 확인합니다.

    $ oc -n $NAMESPACE get deploy virt-api -o yaml
  4. Pod 충돌 또는 이미지 가져오기 실패와 같은 문제가 있는지 virt-api 배포 세부 정보를 확인합니다.

    $ oc -n $NAMESPACE describe deploy virt-api
  5. NotReady 상태의 노드와 같은 문제를 확인합니다.

    $ oc get nodes
완화 방법

근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.40. VirtApiRESTErrorsBurst

meaning

지난 5분 동안 virt-api Pod에서 REST 호출의 80% 이상이 실패했습니다.

보안 등급

virt-api 에 대한 실패한 REST 호출 비율이 매우 높으면 API 호출의 응답 및 실행 속도가 느려질 수 있으며 API 호출이 완전히 중단될 수 있습니다.

그러나 현재 실행 중인 가상 머신 워크로드는 영향을 받지 않습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. 배포에서 virt-api Pod 목록을 가져옵니다.

    $ oc -n $NAMESPACE get pods -l kubevirt.io=virt-api
  3. virt-api 로그에서 오류 메시지가 있는지 확인합니다.

    $ oc logs -n $NAMESPACE <virt-api>
  4. virt-api Pod의 세부 정보를 가져옵니다.

    $ oc describe -n $NAMESPACE <virt-api>
  5. 노드에서 문제가 발생했는지 확인합니다. 예를 들어 NotReady 상태에 있을 수 있습니다.

    $ oc get nodes
  6. virt-api 배포 상태를 확인합니다.

    $ oc -n $NAMESPACE get deploy virt-api -o yaml
  7. virt-api 배포의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe deploy virt-api
완화 방법

진단 절차 중 얻은 정보를 기반으로 근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.41. VirtApiRESTErrorsHigh

meaning

지난 60분 동안 virt-api Pod에서 REST 호출의 5% 이상이 실패했습니다.

보안 등급

virt-api 에 대한 실패한 REST 호출 속도가 높으면 API 호출의 응답 및 실행이 느려질 수 있습니다.

그러나 현재 실행 중인 가상 머신 워크로드는 영향을 받지 않습니다.

진단
  1. NAMESPACE 환경 변수를 다음과 같이 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-api 포드의 상태를 확인합니다.

    $ oc -n $NAMESPACE get pods -l kubevirt.io=virt-api
  3. virt-api 로그를 확인합니다.

    $ oc logs -n  $NAMESPACE <virt-api>
  4. virt-api Pod의 세부 정보를 가져옵니다.

    $ oc describe -n $NAMESPACE <virt-api>
  5. 노드에서 문제가 발생했는지 확인합니다. 예를 들어 NotReady 상태에 있을 수 있습니다.

    $ oc get nodes
  6. virt-api 배포 상태를 확인합니다.

    $ oc -n $NAMESPACE get deploy virt-api -o yaml
  7. virt-api 배포의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe deploy virt-api
완화 방법

진단 절차 중 얻은 정보를 기반으로 근본 원인을 확인하고 문제를 해결합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.42. VirtControllerDown

meaning

5분 동안 실행 중인 virt-controller Pod가 탐지되지 않았습니다.

보안 등급

VM(가상 머신) 라이프사이클 관리와 관련된 모든 작업이 실패합니다. 여기에는 새로운 VMI(가상 머신 인스턴스) 시작 또는 기존 VMI 종료가 포함됩니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-controller 배포 상태를 확인합니다.

    $ oc get deployment -n $NAMESPACE virt-controller -o yaml
  3. virt-controller Pod의 로그를 확인합니다.

    $ oc get logs <virt-controller>
완화 방법

이 경고는 다음을 포함하여 다양한 원인이 있을 수 있습니다.

  • 노드 리소스 소모
  • 클러스터에 메모리가 충분하지 않음
  • 노드가 다운됨
  • API 서버가 과부하되었습니다. 예를 들어 스케줄러는 부하가 많은 수 있으므로 완전히 사용할 수 없습니다.
  • 네트워킹 문제

근본 원인을 확인하고 가능한 경우 수정합니다.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.43. VirtControllerRESTErrorsBurst

meaning

최근 5분 동안 virt-controller Pod에서 REST 호출의 80% 이상이 실패했습니다.

virt-controller 가 API 서버에 대한 연결이 완전히 손실되었을 수 있습니다.

이 오류는 종종 다음 문제 중 하나로 인해 발생합니다.

  • API 서버가 과부하되어 시간 초과가 발생합니다. 이 경우 API 서버의 지표를 확인하고 응답 시간과 전체 호출을 확인합니다.
  • virt-controller Pod는 API 서버에 연결할 수 없습니다. 이는 일반적으로 노드의 DNS 문제 및 네트워킹 연결 문제로 인해 발생합니다.
보안 등급

상태 업데이트는 전파되지 않으며 마이그레이션과 같은 작업을 수행할 수 없습니다. 그러나 워크로드 실행은 영향을 받지 않습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. 사용 가능한 virt-controller Pod를 나열합니다.

    $ oc get pods -n $NAMESPACE -l=kubevirt.io=virt-controller
  3. API 서버에 연결할 때 virt-controller 로그에서 오류 메시지를 확인합니다.

    $ oc logs -n  $NAMESPACE <virt-controller>
완화 방법
  • virt-controller Pod가 API 서버에 연결할 수 없는 경우 Pod를 삭제하여 다시 시작합니다.

    $ oc delete -n $NAMESPACE <virt-controller>

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.44. VirtControllerRESTErrorsHigh

meaning

지난 60분 동안 virt-controller 에서 REST 호출의 5% 이상이 실패했습니다.

virt-controller 가 API 서버에 부분적으로 연결이 손실되어 있기 때문일 가능성이 높습니다.

이 오류는 종종 다음 문제 중 하나로 인해 발생합니다.

  • API 서버가 과부하되어 시간 초과가 발생합니다. 이 경우 API 서버의 지표를 확인하고 응답 시간과 전체 호출을 확인합니다.
  • virt-controller Pod는 API 서버에 연결할 수 없습니다. 이는 일반적으로 노드의 DNS 문제 및 네트워킹 연결 문제로 인해 발생합니다.
보안 등급

가상 머신 시작 및 마이그레이션과 같은 노드 관련 작업이 지연됩니다. 워크로드 실행은 영향을 받지 않지만 현재 상태를 보고하는 것이 지연될 수 있습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. 사용 가능한 virt-controller Pod를 나열합니다.

    $ oc get pods -n $NAMESPACE -l=kubevirt.io=virt-controller
  3. API 서버에 연결할 때 virt-controller 로그에서 오류 메시지를 확인합니다.

    $ oc logs -n  $NAMESPACE <virt-controller>
완화 방법
  • virt-controller Pod가 API 서버에 연결할 수 없는 경우 Pod를 삭제하여 다시 시작합니다.

    $ oc delete -n $NAMESPACE <virt-controller>

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.45. VirtHandlerDaemonSetRolloutFailing

meaning

virt-handler 데몬 세트는 15분 후에 하나 이상의 작업자 노드에 배포하지 못했습니다.

보안 등급

이 경고는 경고입니다. 모든 virt-handler 데몬 세트가 배포되지 않았음을 나타내지는 않습니다. 따라서 클러스터에 과부하가 걸리지 않는 한 가상 머신의 일반 라이프사이클은 영향을 받지 않습니다.

진단

실행 중인 virt-handler Pod가 없는 작업자 노드를 확인합니다.

  1. NAMESPACE 환경 변수를 내보냅니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-handler Pod의 상태를 확인하여 배포되지 않은 Pod를 식별합니다.

    $ oc get pods -n $NAMESPACE -l=kubevirt.io=virt-handler
  3. virt-handler Pod의 작업자 노드 이름을 가져옵니다.

    $ oc -n $NAMESPACE get pod <virt-handler> -o jsonpath='{.spec.nodeName}'
완화 방법

리소스가 충분하지 않아 virt-handler Pod를 배포하지 못한 경우 영향을 받는 작업자 노드의 다른 Pod를 삭제할 수 있습니다.

14.14.46. VirtHandlerRESTErrorsBurst

meaning

지난 5분 동안 virt-handler 에서 REST 호출의 80% 이상이 실패했습니다. 이 경고는 일반적으로 virt-handler Pod가 API 서버에 연결할 수 없음을 나타냅니다.

이 오류는 종종 다음 문제 중 하나로 인해 발생합니다.

  • API 서버가 과부하되어 시간 초과가 발생합니다. 이 경우 API 서버의 지표를 확인하고 응답 시간과 전체 호출을 확인합니다.
  • virt-handler Pod는 API 서버에 연결할 수 없습니다. 이는 일반적으로 노드의 DNS 문제 및 네트워킹 연결 문제로 인해 발생합니다.
보안 등급

상태 업데이트는 전파되지 않으며 마이그레이션과 같은 노드 관련 작업이 실패합니다. 그러나 영향을 받는 노드에서 워크로드를 실행하면 영향을 받지 않습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-handler Pod의 상태를 확인합니다.

    $ oc get pods -n $NAMESPACE -l=kubevirt.io=virt-handler
  3. API 서버에 연결할 때 virt-handler 로그에서 오류 메시지를 확인합니다.

    $ oc logs -n  $NAMESPACE <virt-handler>
완화 방법
  • virt-handler 에서 API 서버에 연결할 수 없는 경우 Pod를 삭제하여 재시작을 강제 적용합니다.

    $ oc delete -n $NAMESPACE <virt-handler>

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.47. VirtHandlerRESTErrorsHigh

meaning

지난 60분 동안 virt-handler 에서 REST 호출의 5% 이상이 실패했습니다. 이 경고는 일반적으로 virt-handler Pod가 API 서버와의 연결이 부분적으로 손실되었음을 나타냅니다.

이 오류는 종종 다음 문제 중 하나로 인해 발생합니다.

  • API 서버가 과부하되어 시간 초과가 발생합니다. 이 경우 API 서버의 지표를 확인하고 응답 시간과 전체 호출을 확인합니다.
  • virt-handler Pod는 API 서버에 연결할 수 없습니다. 이는 일반적으로 노드의 DNS 문제 및 네트워킹 연결 문제로 인해 발생합니다.
보안 등급

워크로드 시작 및 마이그레이션과 같은 노드 관련 작업은 virt-handler 가 실행 중인 노드에서 지연됩니다. 워크로드 실행은 영향을 받지 않지만 현재 상태를 보고하는 것이 지연될 수 있습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-handler Pod의 상태를 확인합니다.

    $ oc get pods -n $NAMESPACE -l=kubevirt.io=virt-handler
  3. API 서버에 연결할 때 virt-handler 로그에서 오류 메시지를 확인합니다.

    $ oc logs -n $NAMESPACE <virt-handler>
완화 방법
  • virt-handler 에서 API 서버에 연결할 수 없는 경우 Pod를 삭제하여 재시작을 강제 적용합니다.

    $ oc delete -n $NAMESPACE <virt-handler>

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.48. VirtOperatorDown

meaning

이 경고는 Running 상태의 virt-operator Pod가 10분 동안 탐지되면 실행됩니다.

virt-operator 는 클러스터에서 시작하는 첫 번째 Operator입니다. 주요 책임은 다음과 같습니다.

  • 클러스터 설치, 실시간 업그레이드 및 업그레이드
  • virt-controller,virt-handler,virt-launcher 와 같은 최상위 컨트롤러의 라이프 사이클 모니터링 및 조정 관리
  • 인증서 교체 및 인프라 관리와 같은 특정 클러스터 전체 작업

virt-operator 배포에는 Pod의 기본 복제본이 2개 있습니다.

보안 등급

이 경고는 클러스터 수준에서 오류를 나타냅니다. 인증 교체, 업그레이드 및 컨트롤러 조정과 같은 중요한 클러스터 전체 관리 기능을 사용할 수 없습니다.

virt-operator 는 클러스터에서 VM(가상 머신)을 직접 지원하지 않습니다. 따라서 임시 사용 불가능은 VM 워크로드에 큰 영향을 미치지 않습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-operator 배포 상태를 확인합니다.

    $ oc -n $NAMESPACE get deploy virt-operator -o yaml
  3. virt-operator 배포의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe deploy virt-operator
  4. virt-operator Pod의 상태를 확인합니다.

    $ oc get pods -n $NAMESPACE -l=kubevirt.io=virt-operator
  5. NotReady 상태와 같은 노드 문제를 확인합니다.

    $ oc get nodes
완화 방법

진단 절차 중 얻은 정보를 기반으로 근본 원인을 찾아 문제를 해결하십시오.

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.49. VirtOperatorRESTErrorsBurst

meaning

이 경고는 virt-operator Pod의 REST 호출 중 80% 이상이 지난 5분 내에 실패한 경우 실행됩니다. 일반적으로 virt-operator Pod가 API 서버에 연결할 수 없음을 나타냅니다.

이 오류는 종종 다음 문제 중 하나로 인해 발생합니다.

  • API 서버가 과부하되어 시간 초과가 발생합니다. 이 경우 API 서버의 지표를 확인하고 응답 시간과 전체 호출을 확인합니다.
  • virt-operator Pod는 API 서버에 연결할 수 없습니다. 이는 일반적으로 노드의 DNS 문제 및 네트워킹 연결 문제로 인해 발생합니다.
보안 등급

업그레이드 및 컨트롤러 조정과 같은 클러스터 수준 작업을 사용할 수 없습니다.

그러나 VM(가상 머신) 및 VM 인스턴스(VM)와 같은 워크로드는 영향을 받지 않습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-operator Pod의 상태를 확인합니다.

    $ oc -n $NAMESPACE get pods -l kubevirt.io=virt-operator
  3. API 서버에 연결할 때 virt-operator 로그에서 오류 메시지가 있는지 확인합니다.

    $ oc -n $NAMESPACE logs <virt-operator>
  4. virt-operator Pod의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe pod <virt-operator>
완화 방법
  • virt-operator Pod가 API 서버에 연결할 수 없는 경우 Pod를 삭제하여 재시작을 강제 적용합니다.

    $ oc delete -n $NAMESPACE <virt-operator>

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.50. VirtOperatorRESTErrorsHigh

meaning

이 경고는 virt-operator Pod의 REST 호출의 5% 이상이 지난 60분 동안 실패한 경우 실행됩니다. 일반적으로 virt-operator Pod가 API 서버에 연결할 수 없음을 나타냅니다.

이 오류는 종종 다음 문제 중 하나로 인해 발생합니다.

  • API 서버가 과부하되어 시간 초과가 발생합니다. 이 경우 API 서버의 지표를 확인하고 응답 시간과 전체 호출을 확인합니다.
  • virt-operator Pod는 API 서버에 연결할 수 없습니다. 이는 일반적으로 노드의 DNS 문제 및 네트워킹 연결 문제로 인해 발생합니다.
보안 등급

업그레이드 및 컨트롤러 조정과 같은 클러스터 수준 작업이 지연될 수 있습니다.

그러나 VM(가상 머신) 및 VM 인스턴스(VM)와 같은 워크로드는 영향을 받지 않습니다.

진단
  1. NAMESPACE 환경 변수를 설정합니다.

    $ export NAMESPACE="$(oc get kubevirt -A \
      -o custom-columns="":.metadata.namespace)"
  2. virt-operator Pod의 상태를 확인합니다.

    $ oc -n $NAMESPACE get pods -l kubevirt.io=virt-operator
  3. API 서버에 연결할 때 virt-operator 로그에서 오류 메시지가 있는지 확인합니다.

    $ oc -n $NAMESPACE logs <virt-operator>
  4. virt-operator Pod의 세부 정보를 가져옵니다.

    $ oc -n $NAMESPACE describe pod <virt-operator>
완화 방법
  • virt-operator Pod가 API 서버에 연결할 수 없는 경우 Pod를 삭제하여 재시작을 강제 적용합니다.

    $ oc delete -n $NAMESPACE <virt-operator>

문제를 해결할 수 없는 경우 고객 포털에 로그인하여 지원 케이스를 열고 진단 절차 중에 수집된 아티팩트를 첨부합니다.

14.14.51. VMCannotBeEvicted

meaning

이 경고는 VM(가상 머신)의 제거 전략이 LiveMigration 으로 설정되어 있을 때 발생하지만 VM은 음소거할 수 없습니다.

보안 등급

마이그레이션 불가능한 VM으로 노드 제거를 방지합니다. 이 상태는 노드 드레이닝 및 업데이트와 같은 작업에 영향을 미칩니다.

진단
  1. VMI 구성을 확인하여 evictionStrategy 값이 LiveMigrate 인지 확인합니다.

    $ oc get vmis -o yaml
  2. LIVE-MIGRA ECDHE 열에서 False 상태를 확인하여 음소거할 수 없는 VMI를 확인합니다.

    $ oc get vmis -o wide
  3. VMI의 세부 정보를 가져오고 spec.conditions 를 확인하여 문제를 확인합니다.

    $ oc get vmi <vmi> -o yaml

    출력 예

    status:
      conditions:
      - lastProbeTime: null
        lastTransitionTime: null
        message: cannot migrate VMI which does not use masquerade to connect
        to the pod network
        reason: InterfaceNotLiveMigratable
        status: "False"
        type: LiveMigratable

완화 방법

VMI의 evictionStrategy종료 로 설정하거나 VMI가 마이그레이션되지 않는 문제를 해결합니다.