13.3. 문제 해결
OpenShift Virtualization은 VM(가상 머신) 및 가상화 구성 요소를 해결하기 위한 툴과 로그를 제공합니다.
웹 콘솔에 제공된 툴을 사용하거나 oc
CLI 툴을 사용하여 OpenShift Virtualization 구성 요소의 문제를 해결할 수 있습니다.
13.3.1. 이벤트
OpenShift Container Platform 이벤트는 중요한 라이프 사이클 정보에 대한 레코드이며 가상 머신, 네임스페이스 및 리소스 문제를 모니터링하고 해결하는 데 유용합니다.
VM 이벤트: 웹 콘솔의 VirtualMachine 세부 정보 페이지의 Events 탭으로 이동합니다.
- 네임스페이스 이벤트
다음 명령을 실행하여 네임스페이스 이벤트를 볼 수 있습니다.
$ oc get events -n <namespace>
특정 이벤트에 대한 자세한 내용은 이벤트 목록을 참조하십시오.
- 리소스 이벤트
다음 명령을 실행하여 리소스 이벤트를 볼 수 있습니다.
$ oc describe <resource> <resource_name>
13.3.2. Pod 로그
웹 콘솔 또는 CLI를 사용하여 OpenShift Virtualization Pod의 로그를 볼 수 있습니다. 웹 콘솔에서 LokiStack을 사용하여 집계된 로그 를 볼 수도 있습니다.
13.3.2.1. OpenShift Virtualization Pod 로그 상세 정보 표시 구성
HyperConverged
CR(사용자 정의 리소스)을 편집하여 OpenShift Virtualization Pod 로그의 상세 정보 표시 수준을 구성할 수 있습니다.
프로세스
특정 구성 요소에 대한 로그 세부 정보 표시 수준을 설정하려면 다음 명령을 실행하여 기본 텍스트 편집기에서
HyperConverged
CR을 엽니다.$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
spec.logVerbosityConfig
스탠자를 편집하여 하나 이상의 구성 요소의 로그 수준을 설정합니다. 예를 들면 다음과 같습니다.apiVersion: hco.kubevirt.io/v1beta1 kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: logVerbosityConfig: kubevirt: virtAPI: 5 1 virtController: 4 virtHandler: 3 virtLauncher: 2 virtOperator: 6
- 1
- 로그 상세 정보 표시 값은
1-9
범위의 정수여야 합니다. 여기서 더 많은 수는 더 자세한 로그를 나타냅니다. 이 예에서는 우선순위 수준이5
이상인 경우virtAPI
구성 요소 로그가 노출됩니다.
- 편집기를 저장하고 종료하여 변경 사항을 적용합니다.
13.3.2.2. 웹 콘솔을 사용하여 virt-launcher Pod 로그 보기
OpenShift Container Platform 웹 콘솔을 사용하여 가상 머신의 virt-launcher
Pod 로그를 볼 수 있습니다.
프로세스
-
가상화
VirtualMachines 로 이동합니다. - 가상 머신을 선택하여 VirtualMachine 세부 정보 페이지를 엽니다.
- 일반 타일에서 포드 이름을 클릭하여 Pod 세부 정보 페이지를 엽니다.
- 로그 탭을 클릭하여 로그를 확인합니다.
13.3.2.3. CLI를 사용하여 OpenShift Virtualization Pod 로그 보기
oc
CLI 툴을 사용하여 OpenShift Virtualization Pod의 로그를 볼 수 있습니다.
프로세스
다음 명령을 실행하여 OpenShift Virtualization 네임스페이스에서 Pod 목록을 확인합니다.
$ oc get pods -n openshift-cnv
예 13.1. 출력 예
NAME READY STATUS RESTARTS AGE disks-images-provider-7gqbc 1/1 Running 0 32m disks-images-provider-vg4kx 1/1 Running 0 32m virt-api-57fcc4497b-7qfmc 1/1 Running 0 31m virt-api-57fcc4497b-tx9nc 1/1 Running 0 31m virt-controller-76c784655f-7fp6m 1/1 Running 0 30m virt-controller-76c784655f-f4pbd 1/1 Running 0 30m virt-handler-2m86x 1/1 Running 0 30m virt-handler-9qs6z 1/1 Running 0 30m virt-operator-7ccfdbf65f-q5snk 1/1 Running 0 32m virt-operator-7ccfdbf65f-vllz8 1/1 Running 0 32m
다음 명령을 실행하여 Pod 로그를 확인합니다.
$ oc logs -n openshift-cnv <pod_name>
참고Pod가 시작되지 않으면
--previous
옵션을 사용하여 마지막 시도에서 로그를 볼 수 있습니다.로그 출력을 실시간으로 모니터링하려면
-f
옵션을 사용합니다.예 13.2. 출력 예
{"component":"virt-handler","level":"info","msg":"set verbosity to 2","pos":"virt-handler.go:453","timestamp":"2022-04-17T08:58:37.373695Z"} {"component":"virt-handler","level":"info","msg":"set verbosity to 2","pos":"virt-handler.go:453","timestamp":"2022-04-17T08:58:37.373726Z"} {"component":"virt-handler","level":"info","msg":"setting rate limiter to 5 QPS and 10 Burst","pos":"virt-handler.go:462","timestamp":"2022-04-17T08:58:37.373782Z"} {"component":"virt-handler","level":"info","msg":"CPU features of a minimum baseline CPU model: map[apic:true clflush:true cmov:true cx16:true cx8:true de:true fpu:true fxsr:true lahf_lm:true lm:true mca:true mce:true mmx:true msr:true mtrr:true nx:true pae:true pat:true pge:true pni:true pse:true pse36:true sep:true sse:true sse2:true sse4.1:true ssse3:true syscall:true tsc:true]","pos":"cpu_plugin.go:96","timestamp":"2022-04-17T08:58:37.390221Z"} {"component":"virt-handler","level":"warning","msg":"host model mode is expected to contain only one model","pos":"cpu_plugin.go:103","timestamp":"2022-04-17T08:58:37.390263Z"} {"component":"virt-handler","level":"info","msg":"node-labeller is running","pos":"node_labeller.go:94","timestamp":"2022-04-17T08:58:37.391011Z"}
13.3.3. 게스트 시스템 로그
VM 게스트의 부팅 로그를 보면 문제를 진단하는 데 도움이 될 수 있습니다. 게스트 로그에 대한 액세스를 구성하고 OpenShift Container Platform 웹 콘솔 또는 oc
CLI를 사용하여 볼 수 있습니다.
이 기능은 기본적으로 비활성화되어 있습니다. VM에 이 설정이 명시적으로 활성화 또는 비활성화되지 않은 경우 클러스터 전체 기본 설정을 상속합니다.
자격 증명 또는 기타 개인 식별 정보(PII)와 같은 민감한 정보가 직렬 콘솔에 기록되면 다른 모든 표시 텍스트로 기록됩니다. Red Hat은 SSH를 사용하여 직렬 콘솔 대신 중요한 데이터를 전송하는 것이 좋습니다.
13.3.3.1. 웹 콘솔을 사용하여 VM 게스트 시스템 로그에 대한 기본 액세스 활성화
웹 콘솔을 사용하여 VM 게스트 시스템 로그에 대한 기본 액세스를 활성화할 수 있습니다.
프로세스
-
사이드 메뉴에서 가상화
개요 를 클릭합니다. - 설정 탭을 클릭합니다.
-
클러스터
게스트 관리를 클릭합니다. - 에서 게스트 시스템 로그 액세스 활성화를 설정합니다.
13.3.3.2. CLI를 사용하여 VM 게스트 시스템 로그에 대한 기본 액세스 활성화
HyperConverged
CR(사용자 정의 리소스)을 편집하여 VM 게스트 시스템 로그에 대한 기본 액세스를 활성화할 수 있습니다.
프로세스
다음 명령을 실행하여 기본 편집기에서
HyperConverged
CR을 엽니다.$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
disableSerialConsoleLog
값을 업데이트합니다. 예를 들면 다음과 같습니다.kind: HyperConverged metadata: name: kubevirt-hyperconverged spec: virtualMachineOptions: disableSerialConsoleLog: true 1 #...
- 1
- VM에서 직렬 콘솔 액세스를 활성화하려면 기본적으로
disableSerialConsoleLog
값을false
로 설정합니다.
13.3.3.3. 웹 콘솔을 사용하여 단일 VM의 게스트 시스템 로그 액세스 설정
웹 콘솔을 사용하여 단일 VM의 VM 게스트 시스템 로그에 대한 액세스를 구성할 수 있습니다. 이 설정은 클러스터 전체 기본 구성보다 우선합니다.
프로세스
-
사이드 메뉴에서 가상화
VirtualMachines 를 클릭합니다. - 가상 머신을 선택하여 VirtualMachine 세부 정보 페이지를 엽니다.
- 구성 탭을 클릭합니다.
- 게스트 시스템 로그 액세스를 on 또는 off로 설정합니다.
13.3.3.4. CLI를 사용하여 단일 VM의 게스트 시스템 로그 액세스 설정
VirtualMachine
CR을 편집하여 단일 VM의 VM 게스트 시스템 로그에 대한 액세스를 구성할 수 있습니다. 이 설정은 클러스터 전체 기본 구성보다 우선합니다.
프로세스
다음 명령을 실행하여 가상 머신 매니페스트를 편집합니다.
$ oc edit vm <vm_name>
logSerialConsole
필드의 값을 업데이트합니다. 예를 들면 다음과 같습니다.apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm spec: template: spec: domain: devices: logSerialConsole: true 1 #...
- 1
- 게스트의 직렬 콘솔 로그에 대한 액세스를 활성화하려면
logSerialConsole
값을true
로 설정합니다.
다음 명령을 실행하여 VM에 새 구성을 적용합니다.
$ oc apply vm <vm_name>
선택 사항: 실행 중인 VM을 편집한 경우 VM을 다시 시작하여 새 구성을 적용합니다. 예를 들면 다음과 같습니다.
$ virtctl restart <vm_name> -n <namespace>
13.3.3.5. 웹 콘솔을 사용하여 게스트 시스템 로그 보기
웹 콘솔을 사용하여 VM(가상 머신) 게스트의 직렬 콘솔 로그를 볼 수 있습니다.
사전 요구 사항
- 게스트 시스템 로그 액세스가 활성화됩니다.
프로세스
-
사이드 메뉴에서 가상화
VirtualMachines 를 클릭합니다. - 가상 머신을 선택하여 VirtualMachine 세부 정보 페이지를 엽니다.
- Cryostat 탭 을 클릭합니다.
- 게스트 시스템 로그를 클릭하여 직렬 콘솔을 로드합니다.
13.3.3.6. CLI를 사용하여 게스트 시스템 로그 보기
oc logs
명령을 실행하여 VM 게스트의 직렬 콘솔 로그를 볼 수 있습니다.
사전 요구 사항
- 게스트 시스템 로그 액세스가 활성화됩니다.
프로세스
다음 명령을 실행하여 <
namespace
> 및 <vm_name
>에 대한 고유한 값을 대체하여 로그를 확인합니다.$ oc logs -n <namespace> -l kubevirt.io/domain=<vm_name> --tail=-1 -c guest-console-log
13.3.4. 로그 집계
로그를 집계하고 필터링하여 문제 해결을 용이하게 수행할 수 있습니다.
13.3.4.1. LokiStack을 사용하여 집계된 OpenShift Virtualization 로그 보기
웹 콘솔에서 LokiStack을 사용하여 OpenShift Virtualization Pod 및 컨테이너에 대해 집계된 로그를 볼 수 있습니다.
사전 요구 사항
- LokiStack을 배포했습니다.
프로세스
- 웹 콘솔에서 모니터링 → 로그 로 이동합니다.
-
로그 유형 목록에서 OpenShift Virtualization 컨트롤 플레인 Pod 및 컨테이너의 경우
virt-launcher
Pod 로그 또는 인프라 의 경우 애플리케이션을 선택합니다. - 쿼리 표시를 클릭하여 쿼리 필드를 표시합니다.
- 쿼리 필드에 LogQL 쿼리를 입력하고 쿼리 실행을 클릭하여 필터링된 로그를 표시합니다.
13.3.4.2. OpenShift Virtualization LogQL 쿼리
웹 콘솔의 모니터링
기본 로그 유형은 인프라 입니다. virt-launcher
로그 유형은 application 입니다.
선택 사항: 줄 필터 표현식을 사용하여 문자열 또는 정규식을 포함하거나 제외할 수 있습니다.
쿼리가 많은 수의 로그와 일치하면 쿼리가 시간 초과될 수 있습니다.
Component | LogQL 쿼리 |
---|---|
All |
{log_type=~".+"}|json |kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster" |
|
{log_type=~".+"}|json |kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster" |kubernetes_labels_app_kubernetes_io_component="storage" |
|
{log_type=~".+"}|json |kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster" |kubernetes_labels_app_kubernetes_io_component="deployment" |
|
{log_type=~".+"}|json |kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster" |kubernetes_labels_app_kubernetes_io_component="network" |
|
{log_type=~".+"}|json |kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster" |kubernetes_labels_app_kubernetes_io_component="compute" |
|
{log_type=~".+"}|json |kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster" |kubernetes_labels_app_kubernetes_io_component="schedule" |
컨테이너 |
{log_type=~".+",kubernetes_container_name=~"<container>|<container>"} 1
|json|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|
| 이 쿼리를 실행하기 전에 로그 유형 목록에서 애플리케이션을 선택해야 합니다. {log_type=~".+", kubernetes_container_name="compute"}|json
|!= "custom-ga-command" 1
|
행 필터 표현식을 사용하여 문자열 또는 정규식을 포함하거나 제외하도록 로그 행을 필터링할 수 있습니다.
줄 필터 표현식 | 설명 |
---|---|
| 로그 줄에는 문자열이 포함되어 있습니다. |
| 로그 줄에는 문자열이 포함되어 있지 않음 |
| 로그 행에는 정규식이 포함되어 있습니다. |
| 로그 행에는 정규식이 포함되지 않음 |
줄 필터 표현식의 예
{log_type=~".+"}|json |kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster" |= "error" != "timeout"
LokiStack 및 LogQL에 대한 추가 리소스
- 로그 스토리지 정보
- LokiStack 배포
- Grafana 문서의 LogQL 로그 쿼리
13.3.5. 일반적인 오류 메시지
OpenShift Virtualization 로그에 다음 오류 메시지가 표시될 수 있습니다.
ErrImagePull
또는ImagePullBackOff
- 참조되는 이미지의 잘못된 배포 구성 또는 문제를 나타냅니다.
13.3.6. 데이터 볼륨 문제 해결
DataVolume
오브젝트의 Conditions
및 Events
섹션을 확인하여 문제를 분석하고 해결할 수 있습니다.
13.3.6.1. 데이터 볼륨 조건 및 이벤트 정보
명령으로 생성된 Conditions
및 Events
섹션의 출력을 검사하여 데이터 볼륨 문제를 진단할 수 있습니다.
$ oc describe dv <DataVolume>
Conditions
섹션에는 다음과 같은 유형이
표시됩니다.
-
Bound
-
Running
-
Ready
Events
섹션에서는 다음과 같은 추가 정보를 제공합니다.
-
이벤트
Type
-
로깅
Reason
-
이벤트
Source
-
추가 진단 정보가 포함된
Message
oc describe
의 출력에 항상 Events
가 포함되는 것은 아닙니다.
Status
,Reason
또는 Message
가 변경되면 이벤트가 생성됩니다. 조건과 이벤트는 모두 데이터 볼륨의 상태 변화에 반응합니다.
예를 들어 가져오기 작업 중에 URL을 잘못 입력하면 가져오기 작업에서 404 메시지를 생성합니다. 이러한 메시지 변경으로 인해 원인이 포함된 이벤트가 생성됩니다. Conditions
섹션의 출력도 업데이트됩니다.
13.3.6.2. 데이터 볼륨 조건 및 이벤트 분석
describe
명령으로 생성된 Conditions
및 Events
섹션을 검사하여 PVC(영구 볼륨 클레임)와 관련된 데이터 볼륨 상태 및 작업이 활발하게 실행되고 있거나 완료되었는지의 여부를 확인합니다. 데이터 볼륨의 상태와 어떻게 해서 현재 상태가 되었는지에 대한 구체적인 정보를 제공하는 메시지가 표시될 수도 있습니다.
조건은 다양한 형태로 조합될 수 있습니다. 각각 고유의 컨텍스트에서 평가해야 합니다.
다음은 다양한 조합의 예입니다.
바인딩
- 이 예제에 성공적으로 바인딩된 PVC가 표시됩니다.Type
은Bound
이므로Status
가True
입니다. PVC가 바인딩되지 않은 경우Status
는False
입니다.PVC가 바인딩되면 PVC가 바인딩되었음을 알리는 이벤트가 생성됩니다. 이 경우
Reason
은Bound
이고Status
는True
입니다.Message
는 데이터 볼륨이 속한 PVC를 나타냅니다.Events
섹션의Message
에서는 PVC가 바인딩된 기간(Age
) 및 리소스(From
)(이 경우datavolume-controller
)를 포함한 추가 세부 정보를 제공합니다.출력 예
Status: Conditions: Last Heart Beat Time: 2020-07-15T03:58:24Z Last Transition Time: 2020-07-15T03:58:24Z Message: PVC win10-rootdisk Bound Reason: Bound Status: True Type: Bound ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Bound 24s datavolume-controller PVC example-dv Bound
Running
- 이 경우Type
은Running
이고Status
는False
이므로 시도된 작업이 실패하여 상태를True
에서False
로 변경한 이벤트가 발생했음을 나타냅니다.그러나
Reason
이Completed
이고Message
필드에Import Complete
라고 표시됩니다.Events
섹션의Reason
및Message
에는 실패한 작업에 대한 추가 문제 해결 정보가 포함되어 있습니다. 이 예제에서는Message
에Events
섹션의 첫 번째Warning
에 나열된404
로 인해 연결할 수 없다는 내용이 표시됩니다.이러한 정보를 통해 가져오기 작업이 실행 중이며 데이터 볼륨에 액세스하려는 다른 작업에 대한 경합이 발생한다는 것을 알 수 있습니다.
출력 예
Status: Conditions: Last Heart Beat Time: 2020-07-15T04:31:39Z Last Transition Time: 2020-07-15T04:31:39Z Message: Import Complete Reason: Completed Status: False Type: Running ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning Error 12s (x2 over 14s) datavolume-controller Unable to connect to http data source: expected status code 200, got 404. Status: 404 Not Found
Ready
–Type
이Ready
이고Status
가True
이면 다음 예제와 같이 데이터 볼륨을 사용할 준비가 된 것입니다. 데이터 볼륨을 사용할 준비가 되지 않은 경우에는Status
가False
입니다.출력 예
Status: Conditions: Last Heart Beat Time: 2020-07-15T04:31:39Z Last Transition Time: 2020-07-15T04:31:39Z Status: True Type: Ready