14.3. 모니터링
14.3.1. 모니터링 개요
다음 툴을 사용하여 클러스터 및 VM(가상 머신)의 상태를 모니터링할 수 있습니다.
- OpenShift Container Platform 클러스터 검사 프레임워크
OpenShift Container Platform 클러스터 검사 프레임워크를 사용하여 클러스터에서 자동화된 테스트를 실행하여 다음 조건을 확인합니다.
- 보조 네트워크 인터페이스에 연결된 두 VM 간 네트워크 연결 및 대기 시간
- 패킷 손실이 없는 DPDK(Data Plane Development Kit) 워크로드를 실행하는 VM
OpenShift Container Platform 클러스터 검사 프레임워크는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
- 가상 리소스에 대한 Prometheus 쿼리
- vCPU, 네트워크, 스토리지, 게스트 메모리 스왑 사용 및 실시간 마이그레이션 진행 상황을 쿼리합니다.
- VM 사용자 정의 지표
-
내부 VM 지표 및 프로세스를 노출하도록
node-exporter
서비스를 구성합니다. - xref:[VM 상태 점검]
- VM에 대해 준비, 활성 상태, 게스트 에이전트 ping 프로브 및 워치독을 구성합니다.
게스트 에이전트 ping 프로브는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
14.3.2. OpenShift Container Platform 클러스터 검사 프레임워크
OpenShift Virtualization에는 클러스터 유지 관리 및 문제 해결에 사용할 수 있는 사전 정의된 점검이 포함되어 있습니다.
OpenShift Container Platform 클러스터 검사 프레임워크는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
14.3.2.1. OpenShift Container Platform 클러스터 점검 프레임워크 정보
점검 은 특정 클러스터 기능이 예상대로 작동하는지 확인할 수 있는 자동화된 테스트 워크로드입니다. 클러스터 검사 프레임워크는 기본 Kubernetes 리소스를 사용하여 점검을 구성하고 실행합니다.
클러스터 관리자와 개발자는 사전 정의된 점검을 사용하여 클러스터 유지 관리를 개선하고, 예기치 않은 동작을 해결하고, 오류를 최소화하며, 시간을 절약할 수 있습니다. 또한 수표 결과를 검토하여 추가 분석을 위해 전문가에게 공유할 수도 있습니다. 공급 업체에서는 제공하는 기능이나 서비스에 대한 점검을 작성하고 게시하고 고객 환경이 올바르게 구성되었는지 확인할 수 있습니다.
기존 네임스페이스에서 사전 정의된 점검을 실행하려면 점검에 대한 서비스 계정을 설정하고, 서비스 계정에 대한 Role
및 RoleBinding
오브젝트를 생성하며, 검사에 대한 권한을 활성화하며, 입력 구성 맵 및 검사 작업을 생성해야 합니다. 검사를 여러 번 실행할 수 있습니다.
항상 다음을 수행해야 합니다.
- 이미지를 적용하기 전에 이미지 점검 소스의 출처가 있는지 확인합니다.
-
Role
및RoleBinding
오브젝트를 생성하기 전에 점검 권한을 검토합니다.
14.3.2.2. 가상 머신 대기 시간 검사
사전 정의된 점검을 사용하여 네트워크 연결을 확인하고 보조 네트워크 인터페이스에 연결된 두 가상 머신(VM) 간의 대기 시간을 측정합니다. 대기 시간 검사에서는 ping 유틸리티를 사용합니다.
다음 단계를 수행하여 대기 시간 점검을 실행합니다.
- 서비스 계정, 역할, 역할 바인딩을 생성하여 대기 시간 점검에 클러스터 액세스 권한을 제공합니다.
- 구성 맵을 생성하여 점검을 실행하고 결과를 저장할 입력을 제공합니다.
- 점검을 실행하는 작업을 생성합니다.
- 구성 맵에서 결과를 검토합니다.
- 선택 사항: 점검을 다시 실행하려면 기존 구성 맵 및 작업을 삭제한 다음 새 구성 맵 및 작업을 생성합니다.
- 완료되면 latency checkup 리소스를 삭제합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. - 클러스터에는 작업자 노드가 두 개 이상 있습니다.
- Multus CNI(Container Network Interface) 플러그인이 클러스터에 설치되어 있습니다.
- 네임스페이스에 대한 네트워크 연결 정의를 구성했습니다.
절차
대기 시간 확인에 대한
ServiceAccount
,Role
,RoleBinding
매니페스트를 생성합니다.예 14.1. 역할 매니페스트 파일 예
--- apiVersion: v1 kind: ServiceAccount metadata: name: vm-latency-checkup-sa --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kubevirt-vm-latency-checker rules: - apiGroups: ["kubevirt.io"] resources: ["virtualmachineinstances"] verbs: ["get", "create", "delete"] - apiGroups: ["subresources.kubevirt.io"] resources: ["virtualmachineinstances/console"] verbs: ["get"] - apiGroups: ["k8s.cni.cncf.io"] resources: ["network-attachment-definitions"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: kubevirt-vm-latency-checker subjects: - kind: ServiceAccount name: vm-latency-checkup-sa roleRef: kind: Role name: kubevirt-vm-latency-checker apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kiagnose-configmap-access rules: - apiGroups: [ "" ] resources: [ "configmaps" ] verbs: ["get", "update"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: kiagnose-configmap-access subjects: - kind: ServiceAccount name: vm-latency-checkup-sa roleRef: kind: Role name: kiagnose-configmap-access apiGroup: rbac.authorization.k8s.io
ServiceAccount
,Role
,RoleBinding
매니페스트를 적용합니다.$ oc apply -n <target_namespace> -f <latency_sa_roles_rolebinding>.yaml 1
- 1
<target_namespace
>는 점검을 실행할 네임스페이스입니다.NetworkAttachmentDefinition
오브젝트가 있는 기존 네임스페이스여야 합니다.
검사에 대한 입력 매개변수가 포함된
ConfigMap
매니페스트를 생성합니다.입력 구성 맵의 예
apiVersion: v1 kind: ConfigMap metadata: name: kubevirt-vm-latency-checkup-config data: spec.timeout: 5m spec.param.networkAttachmentDefinitionNamespace: <target_namespace> spec.param.networkAttachmentDefinitionName: "blue-network" 1 spec.param.maxDesiredLatencyMilliseconds: "10" 2 spec.param.sampleDurationSeconds: "5" 3 spec.param.sourceNode: "worker1" 4 spec.param.targetNode: "worker2" 5
대상 네임스페이스에 구성 맵 매니페스트를 적용합니다.
$ oc apply -n <target_namespace> -f <latency_config_map>.yaml
점검을 실행할
작업
매니페스트를 생성합니다.작업 매니페스트 예
apiVersion: batch/v1 kind: Job metadata: name: kubevirt-vm-latency-checkup spec: backoffLimit: 0 template: spec: serviceAccountName: vm-latency-checkup-sa restartPolicy: Never containers: - name: vm-latency-checkup image: registry.redhat.io/container-native-virtualization/vm-network-latency-checkup-rhel9:v4.13.0 securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] runAsNonRoot: true seccompProfile: type: "RuntimeDefault" env: - name: CONFIGMAP_NAMESPACE value: <target_namespace> - name: CONFIGMAP_NAME value: kubevirt-vm-latency-checkup-config - name: POD_UID valueFrom: fieldRef: fieldPath: metadata.uid
작업
매니페스트를 적용합니다.$ oc apply -n <target_namespace> -f <latency_job>.yaml
작업이 완료될 때까지 기다립니다.
$ oc wait job kubevirt-vm-latency-checkup -n <target_namespace> --for condition=complete --timeout 6m
다음 명령을 실행하여 대기 시간 점검 결과를 검토합니다. 측정된 최대 대기 시간이
spec.param.maxDesiredLatencyMilliseconds
특성 값보다 크면 검사에 실패하고 오류를 반환합니다.$ oc get configmap kubevirt-vm-latency-checkup-config -n <target_namespace> -o yaml
출력 구성 맵의 예(success)
apiVersion: v1 kind: ConfigMap metadata: name: kubevirt-vm-latency-checkup-config namespace: <target_namespace> data: spec.timeout: 5m spec.param.networkAttachmentDefinitionNamespace: <target_namespace> spec.param.networkAttachmentDefinitionName: "blue-network" spec.param.maxDesiredLatencyMilliseconds: "10" spec.param.sampleDurationSeconds: "5" spec.param.sourceNode: "worker1" spec.param.targetNode: "worker2" status.succeeded: "true" status.failureReason: "" status.completionTimestamp: "2022-01-01T09:00:00Z" status.startTimestamp: "2022-01-01T09:00:07Z" status.result.avgLatencyNanoSec: "177000" status.result.maxLatencyNanoSec: "244000" 1 status.result.measurementDurationSec: "5" status.result.minLatencyNanoSec: "135000" status.result.sourceNode: "worker1" status.result.targetNode: "worker2"
- 1
- 나노초 단위의 최대 측정 대기 시간입니다.
선택 사항: 검사 실패 시 자세한 작업 로그를 보려면 다음 명령을 사용합니다.
$ oc logs job.batch/kubevirt-vm-latency-checkup -n <target_namespace>
다음 명령을 실행하여 이전에 생성한 작업 및 구성 맵을 삭제합니다.
$ oc delete job -n <target_namespace> kubevirt-vm-latency-checkup
$ oc delete config-map -n <target_namespace> kubevirt-vm-latency-checkup-config
선택 사항: 다른 점검을 실행하지 않으려면 역할 매니페스트를 삭제합니다.
$ oc delete -f <latency_sa_roles_rolebinding>.yaml
14.3.2.3. DPDK 검사
사전 정의된 검사를 사용하여 OpenShift Container Platform 클러스터 노드에서 패킷 손실이 없는 DPDK(Data Plane Development Kit) 워크로드로 VM(가상 머신)을 실행할 수 있는지 확인합니다. DPDK 검사에서는 트래픽 생성기 Pod와 테스트 DPDK 애플리케이션을 실행하는 VM 간에 트래픽을 실행합니다.
다음 단계를 수행하여 DPDK 점검을 실행합니다.
- 트래픽 생성 Pod에 대한 DPDK 검사 및 서비스 계정에 대한 서비스 계정, 역할, 역할 바인딩을 생성합니다.
- 트래픽 생성기 Pod에 대한 보안 컨텍스트 제약 조건 리소스를 생성합니다.
- 구성 맵을 생성하여 점검을 실행하고 결과를 저장할 입력을 제공합니다.
- 점검을 실행하는 작업을 생성합니다.
- 구성 맵에서 결과를 검토합니다.
- 선택 사항: 점검을 다시 실행하려면 기존 구성 맵 및 작업을 삭제한 다음 새 구성 맵 및 작업을 생성합니다.
- 완료되면 DPDK 점검 리소스를 삭제합니다.
사전 요구 사항
-
cluster-admin
권한이 있는 사용자로 클러스터에 액세스할 수 있습니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다. - 패킷 손실이 0인 VM에서 DPDK 애플리케이션을 실행하도록 컴퓨팅 노드를 구성했습니다.
검사로 생성된 트래픽 생성기 Pod에는 높은 권한이 있습니다.
- root로 실행됩니다.
- 노드의 파일 시스템에 바인딩 마운트가 있습니다.
트래픽 생성기의 컨테이너 이미지는 업스트림 프로젝트 Quay 컨테이너 레지스트리에서 가져옵니다.
절차
DPDK 점검 및 트래픽 생성 Pod에 대한
ServiceAccount
,Role
,RoleBinding
매니페스트를 생성합니다.예 14.2. 서비스 계정, 역할, 역할 바인딩 매니페스트 파일의 예
--- apiVersion: v1 kind: ServiceAccount metadata: name: dpdk-checkup-sa --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kiagnose-configmap-access rules: - apiGroups: [ "" ] resources: [ "configmaps" ] verbs: [ "get", "update" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: kiagnose-configmap-access subjects: - kind: ServiceAccount name: dpdk-checkup-sa roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: kiagnose-configmap-access --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: kubevirt-dpdk-checker rules: - apiGroups: [ "kubevirt.io" ] resources: [ "virtualmachineinstances" ] verbs: [ "create", "get", "delete" ] - apiGroups: [ "subresources.kubevirt.io" ] resources: [ "virtualmachineinstances/console" ] verbs: [ "get" ] - apiGroups: [ "" ] resources: [ "pods" ] verbs: [ "create", "get", "delete" ] - apiGroups: [ "" ] resources: [ "pods/exec" ] verbs: [ "create" ] - apiGroups: [ "k8s.cni.cncf.io" ] resources: [ "network-attachment-definitions" ] verbs: [ "get" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: kubevirt-dpdk-checker subjects: - kind: ServiceAccount name: dpdk-checkup-sa roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: kubevirt-dpdk-checker --- apiVersion: v1 kind: ServiceAccount metadata: name: dpdk-checkup-traffic-gen-sa
ServiceAccount
,Role
,RoleBinding
매니페스트를 적용합니다.$ oc apply -n <target_namespace> -f <dpdk_sa_roles_rolebinding>.yaml
트래픽 생성기 Pod에 대한
SecurityContextConstraints
매니페스트를 생성합니다.보안 컨텍스트 제약 조건 매니페스트 예
apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: dpdk-checkup-traffic-gen allowHostDirVolumePlugin: true allowHostIPC: false allowHostNetwork: false allowHostPID: false allowHostPorts: false allowPrivilegeEscalation: false allowPrivilegedContainer: false allowedCapabilities: - IPC_LOCK - NET_ADMIN - NET_RAW - SYS_RESOURCE defaultAddCapabilities: null fsGroup: type: RunAsAny groups: [] readOnlyRootFilesystem: false requiredDropCapabilities: null runAsUser: type: RunAsAny seLinuxContext: type: RunAsAny seccompProfiles: - runtime/default - unconfined supplementalGroups: type: RunAsAny users: - system:serviceaccount:dpdk-checkup-ns:dpdk-checkup-traffic-gen-sa
SecurityContextConstraints
매니페스트를 적용합니다.$ oc apply -f <dpdk_scc>.yaml
검사에 대한 입력 매개변수가 포함된
ConfigMap
매니페스트를 생성합니다.입력 구성 맵의 예
apiVersion: v1 kind: ConfigMap metadata: name: dpdk-checkup-config data: spec.timeout: 10m spec.param.networkAttachmentDefinitionName: <network_name> 1 spec.param.trafficGeneratorRuntimeClassName: <runtimeclass_name> 2 spec.param.trafficGeneratorImage: "quay.io/kiagnose/kubevirt-dpdk-checkup-traffic-gen:v0.1.1" 3 spec.param.vmContainerDiskImage: "quay.io/kiagnose/kubevirt-dpdk-checkup-vm:v0.1.1" 4
대상 네임스페이스에
ConfigMap
매니페스트를 적용합니다.$ oc apply -n <target_namespace> -f <dpdk_config_map>.yaml
점검을 실행할
작업
매니페스트를 생성합니다.작업 매니페스트 예
apiVersion: batch/v1 kind: Job metadata: name: dpdk-checkup spec: backoffLimit: 0 template: spec: serviceAccountName: dpdk-checkup-sa restartPolicy: Never containers: - name: dpdk-checkup image: registry.redhat.io/container-native-virtualization/kubevirt-dpdk-checkup-rhel9:v4.13.0 imagePullPolicy: Always securityContext: allowPrivilegeEscalation: false capabilities: drop: ["ALL"] runAsNonRoot: true seccompProfile: type: "RuntimeDefault" env: - name: CONFIGMAP_NAMESPACE value: <target-namespace> - name: CONFIGMAP_NAME value: dpdk-checkup-config - name: POD_UID valueFrom: fieldRef: fieldPath: metadata.uid
작업
매니페스트를 적용합니다.$ oc apply -n <target_namespace> -f <dpdk_job>.yaml
작업이 완료될 때까지 기다립니다.
$ oc wait job dpdk-checkup -n <target_namespace> --for condition=complete --timeout 10m
다음 명령을 실행하여 검사 결과를 검토합니다.
$ oc get configmap dpdk-checkup-config -n <target_namespace> -o yaml
출력 구성 맵의 예(success)
apiVersion: v1 kind: ConfigMap metadata: name: dpdk-checkup-config data: spec.timeout: 1h2m spec.param.NetworkAttachmentDefinitionName: "mlx-dpdk-network-1" spec.param.trafficGeneratorRuntimeClassName: performance-performance-zeus10 spec.param.trafficGeneratorImage: "quay.io/kiagnose/kubevirt-dpdk-checkup-traffic-gen:v0.1.1" spec.param.vmContainerDiskImage: "quay.io/kiagnose/kubevirt-dpdk-checkup-vm:v0.1.1" status.succeeded: true status.failureReason: " " status.startTimestamp: 2022-12-21T09:33:06+00:00 status.completionTimestamp: 2022-12-21T11:33:06+00:00 status.result.actualTrafficGeneratorTargetNode: worker-dpdk1 status.result.actualDPDKVMTargetNode: worker-dpdk2 status.result.dropRate: 0
다음 명령을 실행하여 이전에 생성한 작업 및 구성 맵을 삭제합니다.
$ oc delete job -n <target_namespace> dpdk-checkup
$ oc delete config-map -n <target_namespace> dpdk-checkup-config
선택 사항: 다른 점검을 실행하지 않으려면
ServiceAccount
,Role
,RoleBinding
매니페스트를 삭제합니다.$ oc delete -f <dpdk_sa_roles_rolebinding>.yaml
14.3.2.3.1. DPDK 검사 구성 맵 매개변수
다음 표는 클러스터 DPDK 준비 상태 점검을 실행할 때 입력 ConfigMap
매니페스트의 data
스탠자에 설정할 수 있는 필수 및 선택적 매개변수를 보여줍니다.
매개변수 | 설명 | 필수 항목 |
---|---|---|
| 검사에 실패하기 전의 시간(분)입니다. | True |
|
SR-IOV NIC의 | True |
| 트래픽 생성기 Pod에서 사용하는 RuntimeClass 리소스입니다. | True |
|
트래픽 생성기의 컨테이너 이미지입니다. 기본값은 | False |
| 트래픽 생성기 Pod를 예약할 노드입니다. 노드는 DPDK 트래픽을 허용하도록 구성해야 합니다. | False |
| 초당 패킷 수(k) 또는 million(m)입니다. 기본값은 14m입니다. | False |
|
트래픽 생성기 Pod 또는 VM에 연결된 NIC의 MAC 주소입니다. 기본값은 | False |
|
트래픽 생성기 Pod 또는 VM에 연결된 NIC의 MAC 주소입니다. 기본값은 | False |
|
VM의 컨테이너 디스크 이미지입니다. 기본값은 | False |
| VM이 실행되는 노드의 레이블입니다. 노드는 DPDK 트래픽을 허용하도록 구성해야 합니다. | False |
|
VM에 연결된 NIC의 MAC 주소입니다. 기본값은 | False |
|
VM에 연결된 NIC의 MAC 주소입니다. 기본값은 | False |
| 트래픽 생성기가 실행되는 기간(분)입니다. 기본값은 5분입니다. | False |
| SR-IOV NIC의 최대 대역폭입니다. 기본값은 10GB입니다. | False |
|
| False |
14.3.2.3.2. RHEL 가상 머신용 컨테이너 디스크 이미지 빌드
qcow2
형식으로 사용자 지정 RHEL(Red Hat Enterprise Linux) 8 OS 이미지를 빌드하고 이를 사용하여 컨테이너 디스크 이미지를 생성할 수 있습니다. 클러스터에서 액세스할 수 있는 레지스트리에 컨테이너 디스크 이미지를 저장하고 DPDK 검사 구성 맵의 spec.param.vmContainerDiskImage
속성에 이미지 위치를 지정할 수 있습니다.
컨테이너 디스크 이미지를 빌드하려면 이미지 빌더 VM(가상 머신)을 생성해야 합니다. 이미지 빌더 VM 은 사용자 지정 RHEL 이미지를 빌드하는 데 사용할 수 있는 RHEL 8 VM입니다.
사전 요구 사항
-
이미지 빌더 VM은 RHEL 8.7을 실행해야 하며,
/var
디렉터리에 최소 2개의 CPU 코어, 4GiB RAM 및 20GB의 여유 공간이 있어야 합니다. -
VM에 이미지 빌더 툴과 해당 CLI(
composer-cli
)를 설치했습니다. virt-customize
툴을 설치했습니다.# dnf install libguestfs-tools
-
Podman CLI 툴(
podman
)을 설치했습니다.
절차
RHEL 8.7 이미지를 빌드할 수 있는지 확인합니다.
# composer-cli distros list
참고composer-cli
명령을 루트로 실행하려면 사용자를weldr
또는root
그룹에 추가합니다.# usermod -a -G weldr user
$ newgrp weldr
다음 명령을 입력하여 설치하려는 패키지가 포함된 TOML 형식으로 이미지 10.0.0.1 파일을 생성하고 부팅 시 비활성화할 서비스를 입력합니다.
$ cat << EOF > dpdk-vm.toml name = "dpdk_image" description = "Image to use with the DPDK checkup" version = "0.0.1" distro = "rhel-87" [[packages]] name = "dpdk" [[packages]] name = "dpdk-tools" [[packages]] name = "driverctl" [[packages]] name = "tuned-profiles-cpu-partitioning" [customizations.kernel] append = "default_hugepagesz=1GB hugepagesz=1G hugepages=8 isolcpus=2-7" [customizations.services] disabled = ["NetworkManager-wait-online", "sshd"] EOF
다음 명령을 실행하여 image 빌더 툴로 청사진 파일을 푸시합니다.
# composer-cli blueprints push dpdk-vm.toml
CloudEvent 이름 및 출력 파일 형식을 지정하여 시스템 이미지를 생성합니다. 쓰기 프로세스를 시작할 때 이미지의 UUID(Universally Unique Identifier)가 표시됩니다.
# composer-cli compose start dpdk_image qcow2
compose 프로세스가 완료될 때까지 기다립니다. 작성 상태는 다음 단계를 계속 진행하기 전에
FINISHED
를 표시해야 합니다.# composer-cli compose status
다음 명령을 입력하여 UUID를 지정하여
qcow2
이미지 파일을 다운로드합니다.# composer-cli compose image <UUID>
다음 명령을 실행하여 사용자 지정 스크립트를 생성합니다.
$ cat <<EOF >customize-vm echo isolated_cores=2-7 > /etc/tuned/cpu-partitioning-variables.conf tuned-adm profile cpu-partitioning echo "options vfio enable_unsafe_noiommu_mode=1" > /etc/modprobe.d/vfio-noiommu.conf EOF
$ cat <<EOF >first-boot driverctl set-override 0000:06:00.0 vfio-pci driverctl set-override 0000:07:00.0 vfio-pci mkdir /mnt/huge mount /mnt/huge --source nodev -t hugetlbfs -o pagesize=1GB EOF
virt-customize
툴을 사용하여 이미지 빌더 툴에서 생성한 이미지를 사용자 지정합니다.$ virt-customize -a <UUID>.qcow2 --run=customize-vm --firstboot=first-boot --selinux-relabel
컨테이너 디스크 이미지를 빌드하는 모든 명령이 포함된 Dockerfile을 생성하려면 다음 명령을 입력합니다.
$ cat << EOF > Dockerfile FROM scratch COPY <uuid>-disk.qcow2 /disk/ EOF
다음과 같습니다.
- <uuid>-disk.qcow2
-
사용자 지정 이미지의 이름을
qcow2
형식으로 지정합니다.
다음 명령을 실행하여 컨테이너를 빌드하고 태그합니다.
$ podman build . -t dpdk-rhel:latest
다음 명령을 실행하여 컨테이너 디스크 이미지를 클러스터에서 액세스할 수 있는 레지스트리로 푸시합니다.
$ podman push dpdk-rhel:latest
-
DPDK 검사 구성 맵의
spec.param.vmContainerDiskImage
속성에 컨테이너 디스크 이미지에 대한 링크를 제공합니다.
14.3.2.4. 추가 리소스
14.3.3. 가상 리소스에 대한 Prometheus 쿼리
OpenShift Virtualization에서는 vCPU, 네트워크, 스토리지, 게스트 메모리 스왑을 포함하여 클러스터 인프라 리소스의 사용을 모니터링하는 데 사용할 수 있는 메트릭을 제공합니다. 메트릭을 사용하여 실시간 마이그레이션 상태를 쿼리할 수도 있습니다.
OpenShift Container Platform 모니터링 대시보드를 사용하여 가상화 메트릭을 쿼리합니다.
14.3.3.1. 사전 요구 사항
-
vCPU 지표를 사용하려면
MachineConfig
오브젝트에schedstats=enable
커널 인수를 적용해야 합니다. 이 커널 인수를 사용하면 디버깅 및 성능 튜닝에 사용되는 스케줄러 통계가 활성화되고 스케줄러에 약간의 부하가 추가됩니다. 자세한 내용은 노드에 커널 인수 추가를 참조하십시오. - 게스트 메모리 스와핑 쿼리가 데이터를 반환하려면 가상 게스트에서 메모리 스와핑을 활성화해야 합니다.
14.3.3.2. 메트릭 쿼리
OpenShift Container Platform 모니터링 대시보드를 사용하면 Pacemaker에서 표시되는 메트릭을 검사하기 위해 Prometheus Query Language(PromQL) 쿼리를 실행할 수 있습니다. 이 기능을 사용하면 클러스터 상태 및 모니터링 중인 모든 사용자 정의 워크로드에 대한 정보가 제공됩니다.
클러스터 관리자는 모든 핵심 OpenShift Container Platform 및 사용자 정의 프로젝트에 대한 메트릭을 쿼리할 수 있습니다.
개발자는 메트릭을 쿼리할 때 프로젝트 이름을 지정해야 합니다. 선택한 프로젝트의 메트릭을 확인하는 데 필요한 권한이 있어야 합니다.
14.3.3.2.1. 클러스터 관리자로서 모든 프로젝트의 메트릭 쿼리
클러스터 관리자 또는 모든 프로젝트에 대한 보기 권한이 있는 사용자로 Metrics UI에서 모든 기본 OpenShift Container Platform 및 사용자 정의 프로젝트에 대한 메트릭에 액세스할 수 있습니다.
사전 요구 사항
-
cluster-admin
클러스터 역할 또는 모든 프로젝트에 대한 보기 권한이 있는 사용자로 클러스터에 액세스할 수 있습니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
절차
-
OpenShift Container Platform 웹 콘솔의 관리자 관점에서 모니터링
메트릭 을 선택합니다. 하나 이상의 쿼리를 추가하려면 다음 중 하나를 수행합니다.
옵션 설명 사용자 지정 쿼리를 생성합니다.
표현식 필드에 PromQL(Prometheus Query Language) 쿼리를 추가합니다.
PromQL 표현식을 입력하면 자동 완성 제안이 드롭다운 목록에 표시됩니다. 이러한 제안에는 함수, 메트릭, 라벨 및 시간 토큰이 포함됩니다. 키보드 화살표를 사용하여 이러한 제안된 항목 중 하나를 선택한 다음 Enter를 눌러 표현식에 항목을 추가할 수 있습니다. 또한 제안된 항목 위로 마우스 포인터를 이동하여 해당 항목에 대한 간략한 설명을 볼 수도 있습니다.
여러 쿼리를 추가합니다.
쿼리 추가를 선택합니다.
기존 쿼리를 복제합니다.
쿼리 옆에 있는 옵션 메뉴 를 선택한 다음 중복 쿼리 를 선택합니다.
쿼리가 실행되지 않도록 비활성화합니다.
쿼리 옆에 있는 옵션 메뉴 를 선택하고 쿼리 비활성화 를 선택합니다.
생성한 쿼리를 실행하려면 쿼리 실행을 선택합니다. 쿼리의 메트릭은 플롯에 시각화됩니다. 쿼리가 유효하지 않으면 UI에 오류 메시지가 표시됩니다.
참고대량의 데이터에서 작동하는 쿼리 시간이 초과되거나 시계열 그래프에 있을 때 브라우저가 과부하될 수 있습니다. 이를 방지하려면 그래프 숨기기를 선택하고 메트릭 테이블만 사용하여 쿼리를 조정합니다. 그런 다음 실행 가능한 쿼리를 검색한 후 플롯을 활성화하여 그래프를 그립니다.
참고기본적으로 쿼리 테이블은 모든 메트릭과 해당 현재 값을 나열하는 확장된 보기를 표시합니다. 쿼리에 대해 확장된 보기를 최소화하려면 ˅를 선택할 수 있습니다.
- 선택 사항: 이제 페이지 URL에 실행한 쿼리가 포함되어 있습니다. 나중에 이 쿼리 세트를 다시 사용하려면 이 URL을 저장합니다.
시각화된 메트릭을 살펴봅니다. 처음에 활성화된 모든 쿼리의 모든 메트릭이 플롯에 표시됩니다. 다음 중 하나를 수행하여 표시되는 메트릭을 선택할 수 있습니다.
옵션 설명 쿼리에서 모든 메트릭을 숨깁니다.
쿼리의 옵션 메뉴 를 클릭하고 모든 시리즈 숨기기 를 클릭합니다.
특정 메트릭을 숨깁니다.
쿼리 테이블로 이동하여 메트릭 이름 옆에 있는 색상이 지정된 사각형을 클릭합니다.
플롯으로 확대하고 시간 범위를 변경합니다.
either:
- 수평으로 플롯을 클릭하고 드래그하여 시간 범위를 시각적으로 선택합니다.
- 왼쪽 상단 코너의 메뉴를 사용하여 시간 범위를 선택합니다.
시간 범위를 재설정합니다.
확대/축소 재설정 을 선택합니다.
특정 시점에서 모든 쿼리에 대한 출력을 표시합니다.
해당 시점에서 플롯에 마우스 커서를 유지합니다. 쿼리 출력이 팝업 상자에 나타납니다.
플롯을 숨깁니다.
그래프 숨기기를 선택합니다.
14.3.3.2.2. 개발자로 사용자 정의 프로젝트의 메트릭 쿼리
사용자 정의 프로젝트의 메트릭에 대해 개발자 또는 프로젝트에 대한 보기 권한이 있는 사용자로 액세스할 수 있습니다.
개발자 관점에서 Metrics UI에는 선택한 프로젝트에 대한 사전 정의된 CPU, 메모리, 대역폭 및 네트워크 패킷 쿼리가 포함되어 있습니다. 프로젝트에 대한 CPU, 메모리, 대역폭, 네트워크 패킷 및 애플리케이션 메트릭에 대해 사용자 정의 Prometheus Query Language(PromQL) 쿼리를 실행할 수도 있습니다.
개발자는 관리자 관점이 아닌 개발자 관점만 사용할 수 있습니다. 개발자는 한 번에 하나의 프로젝트의 메트릭만 쿼리할 수 있습니다.
사전 요구 사항
- 개발자로 또는 메트릭을 확인하는 프로젝트에 대한 보기 권한이 있는 사용자로 클러스터에 액세스할 수 있습니다.
- 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.
- 사용자 정의 프로젝트에 서비스를 배포했습니다.
-
서비스에서 모니터링 방법을 정의하는 데 사용할
ServiceMonitor
CRD(사용자 정의 리소스 정의(Custom Resource Definition))가 생성되었습니다.
절차
-
OpenShift Container Platform 웹 콘솔의 개발자 관점에서 모니터링
메트릭 을 선택합니다. - Project: 목록에서 메트릭을 보려는 프로젝트를 선택합니다.
쿼리 선택 목록에서 쿼리를 선택하거나 PromQL 표시를 선택하여 선택한 쿼리를 기반으로 사용자 정의 PromQL 쿼리를 만듭니다. 쿼리의 메트릭은 플롯에 시각화됩니다.
참고개발자 관점에서는 한 번에 하나의 쿼리만 실행할 수 있습니다.
다음 중 하나를 수행하여 시각화된 메트릭을 살펴봅니다.
옵션 설명 플롯으로 확대하고 시간 범위를 변경합니다.
either:
- 수평으로 플롯을 클릭하고 드래그하여 시간 범위를 시각적으로 선택합니다.
- 왼쪽 상단 코너의 메뉴를 사용하여 시간 범위를 선택합니다.
시간 범위를 재설정합니다.
확대/축소 재설정 을 선택합니다.
특정 시점에서 모든 쿼리에 대한 출력을 표시합니다.
해당 시점에서 플롯에 마우스 커서를 유지합니다. 쿼리 출력이 팝업 상자에 나타납니다.
14.3.3.3. 가상화 메트릭
다음 메트릭 설명에는 예제 Prometheus Query Language(PromQL) 쿼리가 포함됩니다. 이러한 메트릭은 API가 아니며 버전 간에 변경될 수 있습니다.
다음 예제에서는 기간을 지정하는 topk
쿼리를 사용합니다. 해당 기간 동안 가상 머신을 삭제해도 쿼리 출력에 계속 표시될 수 있습니다.
14.3.3.3.1. vCPU 메트릭
다음 쿼리는 I/O(입력/출력) 대기 중인 가상 머신을 식별할 수 있습니다.
kubevirt_vmi_vcpu_wait_seconds
- 가상 시스템의 vCPU에 대해 대기 시간(초)을 반환합니다. 유형:
'0' 이상의 값은 vCPU가 실행하려고 하지만 호스트 스케줄러는 아직 실행할 수 없음을 의미합니다. 이러한 실행 불가능은 I/O에 문제가 있음을 나타냅니다.
vCPU 지표를 쿼리하려면 먼저 MachineConfig
오브젝트에 schedstats=enable
커널 인수를 적용해야 합니다. 이 커널 인수를 사용하면 디버깅 및 성능 튜닝에 사용되는 스케줄러 통계가 활성화되고 스케줄러에 약간의 부하가 추가됩니다.
vCPU 대기 시간 쿼리의 예
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_vcpu_wait_seconds[6m]))) > 0 1
- 1
- 이 쿼리는 6분 동안 매 순간에 I/O를 기다리는 상위 3개의 VM을 반환합니다.
14.3.3.3.2. 네트워크 메트릭
다음 쿼리는 네트워크를 포화 상태로 만드는 가상 머신을 식별할 수 있습니다.
kubevirt_vmi_network_receive_bytes_total
- 가상 시스템의 네트워크에서 수신된 총 트래픽(바이트 단위)을 반환합니다. 유형:
kubevirt_vmi_network_transmit_bytes_total
- 가상 시스템의 네트워크에서 전송된 총 트래픽(바이트 단위)을 반환합니다. 유형:
네트워크 트래픽 쿼리의 예
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_network_receive_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_network_transmit_bytes_total[6m]))) > 0 1
- 1
- 이 쿼리는 6분 동안 매번 가장 많은 네트워크 트래픽을 전송하는 상위 3 개의 VM을 반환합니다.
14.3.3.3.3. 스토리지 메트릭
14.3.3.3.3.1. 스토리지 관련 트래픽
다음 쿼리는 대량의 데이터를 작성하는 VM을 식별할 수 있습니다.
kubevirt_vmi_storage_read_traffic_bytes_total
- 가상 머신의 스토리지 관련 트래픽의 총 양(바이트)을 반환합니다. 유형:
kubevirt_vmi_storage_write_traffic_bytes_total
- 가상 시스템의 스토리지 관련 트래픽의 총 스토리지 쓰기(바이트)를 반환합니다. 유형:
스토리지 관련 트래픽 쿼리의 예
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_storage_read_traffic_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_storage_write_traffic_bytes_total[6m]))) > 0 1
- 1
- 이 쿼리는 6분 동안 매번 가장 많은 스토리지 트래픽을 수행하는 상위 3 개의 VM을 반환합니다.
14.3.3.3.3.2. 스토리지 스냅샷 데이터
kubevirt_vmsnapshot_disks_restored_from_source_total
- 소스 가상 머신에서 복원된 총 가상 머신 디스크 수를 반환합니다. 유형: 게이지.
kubevirt_vmsnapshot_disks_restored_from_source_bytes
- 소스 가상 머신에서 복원된 바이트 단위의 공간 크기를 반환합니다. 유형: 게이지.
스토리지 스냅샷 데이터 쿼리의 예
kubevirt_vmsnapshot_disks_restored_from_source_total{vm_name="simple-vm", vm_namespace="default"} 1
- 1
- 이 쿼리는 소스 가상 머신에서 복원된 총 가상 머신 디스크 수를 반환합니다.
kubevirt_vmsnapshot_disks_restored_from_source_bytes{vm_name="simple-vm", vm_namespace="default"} 1
- 1
- 이 쿼리는 소스 가상 머신에서 복원된 바이트 단위의 공간을 반환합니다.
14.3.3.3.3.3. I/O 성능
다음 쿼리는 스토리지 장치의 I/O 성능을 확인할 수 있습니다.
kubevirt_vmi_storage_iops_read_total
- 가상 시스템이 초당 수행하는 쓰기 I/O 작업 양을 반환합니다. 유형:
kubevirt_vmi_storage_iops_write_total
- 가상 시스템이 초당 수행하는 읽기 I/O 작업의 양을 반환합니다. 유형:
I/O 성능 쿼리의 예
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_storage_iops_read_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_storage_iops_write_total[6m]))) > 0 1
- 1
- 이 쿼리는 6분 동안 매 순간 초당 최대 I/O 작업을 수행하는 상위 3 개의 VM을 반환합니다.
14.3.3.3.4. 게스트 메모리 스왑 메트릭
다음 쿼리는 메모리 스와핑을 가장 많이 수행하는 스왑 사용 게스트를 식별할 수 있습니다.
kubevirt_vmi_memory_swap_in_traffic_bytes_total
- 가상 게스트가 스와핑하는 메모리의 총 양(바이트 단위)을 반환합니다. 유형: 게이지.
kubevirt_vmi_memory_swap_out_traffic_bytes_total
- 가상 게스트가 스왑 아웃하는 메모리의 총 양(바이트 단위)을 반환합니다. 유형: 게이지.
메모리 스와핑 쿼리의 예
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_memory_swap_in_traffic_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_memory_swap_out_traffic_bytes_total[6m]))) > 0 1
- 1
- 이 쿼리는 6분 동안 매 순간 게스트가 가장 많은 메모리 스왑을 수행하는 상위 3개의 VM을 반환합니다.
메모리 스와핑은 가상 시스템이 메모리 부족 상태에 있음을 나타냅니다. 가상 시스템의 메모리 할당을 늘리면 이 문제가 완화될 수 있습니다.
14.3.3.3.5. 실시간 마이그레이션 메트릭
실시간 마이그레이션 상태를 표시하려면 다음 메트릭을 쿼리할 수 있습니다.
kubevirt_migrate_vmi_data_processed_bytes
- 새 VM(가상 머신)으로 마이그레이션된 게스트 운영 체제 데이터의 양입니다. 유형: 게이지.
kubevirt_migrate_vmi_data_remaining_bytes
- 마이그레이션할 게스트 운영 체제 데이터의 양입니다. 유형: 게이지.
kubevirt_migrate_vmi_dirty_memory_rate_bytes
- 게스트 운영 체제에서 메모리가 더러워지고 있는 속도입니다. 더러움 메모리는 변경되었지만 아직 디스크에 기록되지 않은 데이터입니다. 유형: 게이지.
kubevirt_migrate_vmi_pending_count
- 보류 중인 마이그레이션 수입니다. 유형: 게이지.
kubevirt_migrate_vmi_scheduling_count
- 스케줄링 마이그레이션 수입니다. 유형: 게이지.
kubevirt_migrate_vmi_running_count
- 실행 중인 마이그레이션 수입니다. 유형: 게이지.
kubevirt_migrate_vmi_succeeded
- 성공적으로 완료된 마이그레이션 수입니다. 유형: 게이지.
kubevirt_migrate_vmi_failed
- 실패한 마이그레이션 수입니다. 유형: 게이지.
14.3.3.4. 추가 리소스
14.3.4. 가상 머신에 대한 사용자 정의 메트릭 노출
OpenShift Container Platform에는 핵심 플랫폼 구성 요소에 대한 모니터링을 제공하는 사전 구성된 사전 설치된 자체 업데이트 모니터링 스택이 포함되어 있습니다. 이 모니터링 스택은 Prometheus 모니터링 시스템을 기반으로 합니다. Prometheus는 시계열 데이터베이스이며 메트릭에 대한 규칙 평가 엔진입니다.
OpenShift Container Platform 모니터링 스택을 사용하는 것 외에도 CLI를 사용하여 사용자 정의 프로젝트에 대한 모니터링을 활성화하고 node-exporter
서비스를 통해 가상 머신에 노출되는 사용자 정의 메트릭을 쿼리할 수 있습니다.
14.3.4.1. 노드 내보내기 서비스 구성
node-exporter 에이전트는 메트릭을 수집하려는 클러스터의 모든 가상 머신에 배포됩니다. 가상 시스템과 연결된 내부 지표 및 프로세스를 공개하도록 node-exporter 에이전트를 서비스로 구성합니다.
사전 요구 사항
-
OpenShift Container Platform CLI
oc
를 설치합니다. -
cluster-admin
권한이 있는 사용자로 클러스터에 로그인합니다. -
openshift-monitoring
프로젝트에서cluster-monitoring-config
ConfigMap
오브젝트를 생성합니다. -
enableUserWorkload
를true
로 설정하여openshift-user-workload-monitoring
프로젝트에서user-workload-monitoring-config
ConfigMap
오브젝트를 구성합니다.
절차
Service
YAML 파일을 생성합니다. 다음 예에서 파일은node-exporter-service.yaml
이라고 합니다.kind: Service apiVersion: v1 metadata: name: node-exporter-service 1 namespace: dynamation 2 labels: servicetype: metrics 3 spec: ports: - name: exmet 4 protocol: TCP port: 9100 5 targetPort: 9100 6 type: ClusterIP selector: monitor: metrics 7
- 1
- 가상 머신의 지표를 표시하는 node-exporter 서비스입니다.
- 2
- 서비스가 생성된 네임스페이스입니다.
- 3
- 서비스의 레이블입니다.
ServiceMonitor
는 이 서비스와 일치하도록 이 라벨을 사용합니다. - 4
ClusterIP
서비스의 포트 9100에서 지표를 표시하는 포트에 지정된 이름입니다.- 5
node-exporter-service
에서 요청을 수신 대기하는 데 사용하는 대상 포트입니다.- 6
monitor
레이블로 구성된 가상 머신의 TCP 포트 번호입니다.- 7
- 가상 머신의 Pod와 일치하는 데 사용되는 레이블입니다. 이 예에서는 라벨
monitor
가 있는 가상 머신의 Pod와메트릭
값이 일치합니다.
node-exporter 서비스를 생성합니다.
$ oc create -f node-exporter-service.yaml
14.3.4.2. 노드 내보내기 서비스를 사용하여 가상 머신 구성
의 node-exporter
파일을 가상 머신에 다운로드합니다. 그런 다음 가상 머신이 부팅될 때 node-exporter 서비스를 실행하는 systemd
서비스를 생성합니다.
사전 요구 사항
-
구성 요소의 Pod는
openshift-user-workload-monitoring
프로젝트에서 실행됩니다. -
이 사용자 정의 프로젝트를 모니터링해야 하는 사용자에게
monitoring-edit
역할을 부여합니다.
절차
- 가상 머신에 로그인합니다.
node-exporter
파일 버전에 적용되는 디렉터리 경로를 사용하여 의node-exporter
파일을 가상 머신에 다운로드합니다.$ wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
실행 파일을 추출하여
/usr/bin
디렉터리에 배치합니다.$ sudo tar xvf node_exporter-1.3.1.linux-amd64.tar.gz \ --directory /usr/bin --strip 1 "*/node_exporter"
이 디렉터리 경로에
node_exporter.service
파일을 생성합니다./etc/systemd/system
. 이systemd
서비스 파일은 가상 머신이 재부팅되면 node-exporter 서비스를 실행합니다.[Unit] Description=Prometheus Metrics Exporter After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=root ExecStart=/usr/bin/node_exporter [Install] WantedBy=multi-user.target
systemd
서비스를 활성화하고 시작합니다.$ sudo systemctl enable node_exporter.service $ sudo systemctl start node_exporter.service
검증
node-exporter 에이전트에서 가상 시스템의 지표를 보고하는지 확인합니다.
$ curl http://localhost:9100/metrics
출력 예
go_gc_duration_seconds{quantile="0"} 1.5244e-05 go_gc_duration_seconds{quantile="0.25"} 3.0449e-05 go_gc_duration_seconds{quantile="0.5"} 3.7913e-05
14.3.4.3. 가상 머신의 사용자 정의 모니터링 레이블 생성
단일 서비스에서 여러 가상 머신에 대한 쿼리를 활성화하려면 가상 머신의 YAML 파일에 사용자 정의 레이블을 추가합니다.
사전 요구 사항
-
OpenShift Container Platform CLI
oc
를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다. - 웹 콘솔에 액세스하여 가상 머신을 재시작합니다.
절차
가상 머신 구성 파일의
템플릿
사양을 편집합니다. 이 예에서 라벨monitor
에는 값이있습니다
.spec: template: metadata: labels: monitor: metrics
-
가상 머신을 중지하고 다시 시작하여
monitor
라벨에 지정된 라벨 이름으로 새 Pod를 생성합니다.
14.3.4.3.1. node-exporter 서비스에서 메트릭 쿼리
/metrics
표준 이름 아래에 HTTP 서비스 끝점을 통해 가상 머신에 대한 지표가 표시됩니다. 메트릭을 쿼리하면 Prometheus는 가상 머신에서 노출된 지표 끝점에서 메트릭을 직접 스크랩하고 보기 위해 이러한 지표를 표시합니다.
사전 요구 사항
-
cluster-admin
권한 또는monitoring-edit
역할의 사용자로 클러스터에 액세스할 수 있습니다. - node-exporter 서비스를 구성하여 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.
절차
서비스의 네임스페이스를 지정하여 HTTP 서비스 끝점을 가져옵니다.
$ oc get service -n <namespace> <node-exporter-service>
node-exporter 서비스에 사용 가능한 모든 지표를 나열하려면
지표
리소스를 쿼리합니다.$ curl http://<172.30.226.162:9100>/metrics | grep -vE "^#|^$"
출력 예
node_arp_entries{device="eth0"} 1 node_boot_time_seconds 1.643153218e+09 node_context_switches_total 4.4938158e+07 node_cooling_device_cur_state{name="0",type="Processor"} 0 node_cooling_device_max_state{name="0",type="Processor"} 0 node_cpu_guest_seconds_total{cpu="0",mode="nice"} 0 node_cpu_guest_seconds_total{cpu="0",mode="user"} 0 node_cpu_seconds_total{cpu="0",mode="idle"} 1.10586485e+06 node_cpu_seconds_total{cpu="0",mode="iowait"} 37.61 node_cpu_seconds_total{cpu="0",mode="irq"} 233.91 node_cpu_seconds_total{cpu="0",mode="nice"} 551.47 node_cpu_seconds_total{cpu="0",mode="softirq"} 87.3 node_cpu_seconds_total{cpu="0",mode="steal"} 86.12 node_cpu_seconds_total{cpu="0",mode="system"} 464.15 node_cpu_seconds_total{cpu="0",mode="user"} 1075.2 node_disk_discard_time_seconds_total{device="vda"} 0 node_disk_discard_time_seconds_total{device="vdb"} 0 node_disk_discarded_sectors_total{device="vda"} 0 node_disk_discarded_sectors_total{device="vdb"} 0 node_disk_discards_completed_total{device="vda"} 0 node_disk_discards_completed_total{device="vdb"} 0 node_disk_discards_merged_total{device="vda"} 0 node_disk_discards_merged_total{device="vdb"} 0 node_disk_info{device="vda",major="252",minor="0"} 1 node_disk_info{device="vdb",major="252",minor="16"} 1 node_disk_io_now{device="vda"} 0 node_disk_io_now{device="vdb"} 0 node_disk_io_time_seconds_total{device="vda"} 174 node_disk_io_time_seconds_total{device="vdb"} 0.054 node_disk_io_time_weighted_seconds_total{device="vda"} 259.79200000000003 node_disk_io_time_weighted_seconds_total{device="vdb"} 0.039 node_disk_read_bytes_total{device="vda"} 3.71867136e+08 node_disk_read_bytes_total{device="vdb"} 366592 node_disk_read_time_seconds_total{device="vda"} 19.128 node_disk_read_time_seconds_total{device="vdb"} 0.039 node_disk_reads_completed_total{device="vda"} 5619 node_disk_reads_completed_total{device="vdb"} 96 node_disk_reads_merged_total{device="vda"} 5 node_disk_reads_merged_total{device="vdb"} 0 node_disk_write_time_seconds_total{device="vda"} 240.66400000000002 node_disk_write_time_seconds_total{device="vdb"} 0 node_disk_writes_completed_total{device="vda"} 71584 node_disk_writes_completed_total{device="vdb"} 0 node_disk_writes_merged_total{device="vda"} 19761 node_disk_writes_merged_total{device="vdb"} 0 node_disk_written_bytes_total{device="vda"} 2.007924224e+09 node_disk_written_bytes_total{device="vdb"} 0
14.3.4.4. 노드 내보내기 서비스에 대한 ServiceMonitor 리소스 생성
/metrics
끝점에서 Prometheus 클라이언트 라이브러리 및 스크랩 메트릭을 사용하여 node-exporter 서비스에서 노출하는 메트릭에 액세스하고 볼 수 있습니다. ServiceMonitor
CRD(사용자 정의 리소스 정의)를 사용하여 노드 내보내기 서비스를 모니터링합니다.
사전 요구 사항
-
cluster-admin
권한 또는monitoring-edit
역할의 사용자로 클러스터에 액세스할 수 있습니다. - node-exporter 서비스를 구성하여 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.
절차
ServiceMonitor
리소스 구성에 대한 YAML 파일을 생성합니다. 이 예에서 서비스 모니터는 모든 서비스와 라벨메트릭
과 일치하고 30초마다exmet
포트를 쿼리합니다.apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: k8s-app: node-exporter-metrics-monitor name: node-exporter-metrics-monitor 1 namespace: dynamation 2 spec: endpoints: - interval: 30s 3 port: exmet 4 scheme: http selector: matchLabels: servicetype: metrics
node-exporter 서비스에 대한
ServiceMonitor
구성을 생성합니다.$ oc create -f node-exporter-metrics-monitor.yaml
14.3.4.4.1. 클러스터 외부에서 노드 내보내기 서비스에 액세스
클러스터 외부에서 node-exporter 서비스에 액세스하고 노출된 지표를 볼 수 있습니다.
사전 요구 사항
-
cluster-admin
권한 또는monitoring-edit
역할의 사용자로 클러스터에 액세스할 수 있습니다. - node-exporter 서비스를 구성하여 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.
절차
node-exporter 서비스를 노출합니다.
$ oc expose service -n <namespace> <node_exporter_service_name>
경로에 대한 FQDN(전체 정규화된 도메인 이름)을 가져옵니다.
$ oc get route -o=custom-columns=NAME:.metadata.name,DNS:.spec.host
출력 예
NAME DNS node-exporter-service node-exporter-service-dynamation.apps.cluster.example.org
curl
명령을 사용하여 node-exporter 서비스에 대한 지표를 표시합니다.$ curl -s http://node-exporter-service-dynamation.apps.cluster.example.org/metrics
출력 예
go_gc_duration_seconds{quantile="0"} 1.5382e-05 go_gc_duration_seconds{quantile="0.25"} 3.1163e-05 go_gc_duration_seconds{quantile="0.5"} 3.8546e-05 go_gc_duration_seconds{quantile="0.75"} 4.9139e-05 go_gc_duration_seconds{quantile="1"} 0.000189423
14.3.4.5. 추가 리소스
14.3.5. 가상 머신 상태 점검
VirtualMachine
리소스에서 준비 및 활성 프로브를 정의하여 VM(가상 머신) 상태 점검을 구성할 수 있습니다.
14.3.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 게스트 에이전트가 가상 머신에서 실행 중인지 확인합니다.
14.3.5.1.1. HTTP 준비 상태 프로브 정의
VM(가상 머신) 구성의 spec.readinessProbe.httpGet
필드를 설정하여 HTTP 준비 상태 프로브를 정의합니다.
절차
VM 구성 파일에 준비 상태 프로브의 세부 정보를 포함합니다.
HTTP GET 테스트가 있는 샘플 준비 상태 프로브
# ... 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
14.3.5.1.2. TCP 준비 프로브 정의
VM(가상 머신) 구성의 spec.readinessProbe.tcpSocket
필드를 설정하여 TCP 준비 상태 프로브를 정의합니다.
절차
VM 구성 파일에 TCP 준비 상태 프로브의 세부 정보를 포함합니다.
TCP 소켓 테스트를 사용하는 샘플 준비 상태 프로브
# ... spec: readinessProbe: initialDelaySeconds: 120 1 periodSeconds: 20 2 tcpSocket: 3 port: 1500 4 timeoutSeconds: 10 5 # ...
다음 명령을 실행하여 VM을 생성합니다.
$ oc create -f <file_name>.yaml
14.3.5.1.3. HTTP 활성 프로브 정의
VM(가상 머신) 구성의 spec.livenessProbe.httpGet
필드를 설정하여 HTTP 활동성 프로브를 정의합니다. 준비 프로브와 동일한 방식으로 활성 프로브에 대한 HTTP 및 TCP 테스트를 모두 정의할 수 있습니다. 이 절차에서는 HTTP GET 테스트를 사용하여 샘플 활성 프로브를 구성합니다.
절차
VM 구성 파일에 HTTP 활성 프로브의 세부 정보를 포함합니다.
HTTP GET 테스트가 포함된 샘플 활성 프로브
# ... 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
14.3.5.2. 워치독 정의
다음 단계를 수행하여 게스트 운영 체제의 상태를 모니터링하도록 워치독을 정의할 수 있습니다.
- VM(가상 머신)에 대한 워치독 장치를 구성합니다.
- 게스트에 워치독 에이전트를 설치합니다.
워치독 장치는 에이전트를 모니터링하고 게스트 운영 체제가 응답하지 않는 경우 다음 작업 중 하나를 수행합니다.
-
poweroff
: VM의 전원이 즉시 꺼집니다.spec.running
이true
로 설정되었거나spec.runStrategy
가manual
로 설정되지 않은 경우 VM이 재부팅됩니다. reset
: VM이 재부팅되고 게스트 운영 체제가 반응할 수 없습니다.참고재부팅 시간을 사용하면 활성 프로브가 시간 초과될 수 있습니다. 클러스터 수준 보호에서 실패한 활성 상태 프로브를 탐지하는 경우 VM을 강제로 다시 예약하여 재부팅 시간을 늘릴 수 있습니다.
-
shutdown
: 모든 서비스를 중지하여 VM의 전원을 정상적으로 끕니다.
Windows VM에서는 워치독을 사용할 수 없습니다.
14.3.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
14.3.5.2.2. 게스트에 워치독 에이전트 설치
게스트에 워치독 에이전트를 설치하고 워치독
서비스를 시작합니다.
절차
- root 사용자로 가상 시스템에 로그인합니다.
watchdog
패키지 및 해당 종속 항목을 설치합니다.# yum install watchdog
/etc/watchdog.conf
파일에서 다음 줄의 주석을 제거하고 변경 사항을 저장합니다.#watchdog-device = /dev/watchdog
워치독
서비스가 부팅 시 시작되도록 활성화합니다.# systemctl enable --now watchdog.service
14.3.5.3. 게스트 에이전트 ping 프로브 정의
VM(가상 머신) 구성의 spec.readinessProbe.guestAgentPing
필드를 설정하여 게스트 에이전트 ping 프로브를 정의합니다.
게스트 에이전트 ping 프로브는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
사전 요구 사항
- QEMU 게스트 에이전트를 가상 머신에 설치하고 활성화해야 합니다.
절차
VM 구성 파일에 게스트 에이전트 ping 프로브 세부 정보를 포함합니다. 예를 들면 다음과 같습니다.
게스트 에이전트 ping 프로브 샘플
# ... 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