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 리소스를 사용하여 점검을 구성하고 실행합니다.

클러스터 관리자와 개발자는 사전 정의된 점검을 사용하여 클러스터 유지 관리를 개선하고, 예기치 않은 동작을 해결하고, 오류를 최소화하며, 시간을 절약할 수 있습니다. 또한 수표 결과를 검토하여 추가 분석을 위해 전문가에게 공유할 수도 있습니다. 공급 업체에서는 제공하는 기능이나 서비스에 대한 점검을 작성하고 게시하고 고객 환경이 올바르게 구성되었는지 확인할 수 있습니다.

기존 네임스페이스에서 사전 정의된 점검을 실행하려면 점검에 대한 서비스 계정을 설정하고, 서비스 계정에 대한 RoleRoleBinding 오브젝트를 생성하며, 검사에 대한 권한을 활성화하며, 입력 구성 맵 및 검사 작업을 생성해야 합니다. 검사를 여러 번 실행할 수 있습니다.

중요

항상 다음을 수행해야 합니다.

  • 이미지를 적용하기 전에 이미지 점검 소스의 출처가 있는지 확인합니다.
  • RoleRoleBinding 오브젝트를 생성하기 전에 점검 권한을 검토합니다.

14.3.2.2. 가상 머신 대기 시간 검사

사전 정의된 점검을 사용하여 네트워크 연결을 확인하고 보조 네트워크 인터페이스에 연결된 두 가상 머신(VM) 간의 대기 시간을 측정합니다. 대기 시간 검사에서는 ping 유틸리티를 사용합니다.

다음 단계를 수행하여 대기 시간 점검을 실행합니다.

  1. 서비스 계정, 역할, 역할 바인딩을 생성하여 대기 시간 점검에 클러스터 액세스 권한을 제공합니다.
  2. 구성 맵을 생성하여 점검을 실행하고 결과를 저장할 입력을 제공합니다.
  3. 점검을 실행하는 작업을 생성합니다.
  4. 구성 맵에서 결과를 검토합니다.
  5. 선택 사항: 점검을 다시 실행하려면 기존 구성 맵 및 작업을 삭제한 다음 새 구성 맵 및 작업을 생성합니다.
  6. 완료되면 latency checkup 리소스를 삭제합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • 클러스터에는 작업자 노드가 두 개 이상 있습니다.
  • Multus CNI(Container Network Interface) 플러그인이 클러스터에 설치되어 있습니다.
  • 네임스페이스에 대한 네트워크 연결 정의를 구성했습니다.

절차

  1. 대기 시간 확인에 대한 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
  2. ServiceAccount,Role, RoleBinding 매니페스트를 적용합니다.

    $ oc apply -n <target_namespace> -f <latency_sa_roles_rolebinding>.yaml 1
    1
    <target_namespace >는 점검을 실행할 네임스페이스입니다. NetworkAttachmentDefinition 오브젝트가 있는 기존 네임스페이스여야 합니다.
  3. 검사에 대한 입력 매개변수가 포함된 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

    1
    NetworkAttachmentDefinition 오브젝트의 이름입니다.
    2
    선택사항: 가상 머신 간 원하는 최대 대기 시간(밀리초)입니다. 측정된 대기 시간이 이 값을 초과하면 검사에 실패합니다.
    3
    선택 사항: 대기 시간 점검의 기간(초)입니다.
    4
    선택 사항: 지정된 경우 대기 시간이 이 노드에서 대상 노드로 측정됩니다. 소스 노드가 지정된 경우 spec.param.targetNode 필드를 비워 둘 수 없습니다.
    5
    선택 사항: 지정된 경우 소스 노드에서 이 노드로 대기 시간이 측정됩니다.
  4. 대상 네임스페이스에 구성 맵 매니페스트를 적용합니다.

    $ oc apply -n <target_namespace> -f <latency_config_map>.yaml
  5. 점검을 실행할 작업 매니페스트를 생성합니다.

    작업 매니페스트 예

    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

  6. 작업 매니페스트를 적용합니다.

    $ oc apply -n <target_namespace> -f <latency_job>.yaml
  7. 작업이 완료될 때까지 기다립니다.

    $ oc wait job kubevirt-vm-latency-checkup -n <target_namespace> --for condition=complete --timeout 6m
  8. 다음 명령을 실행하여 대기 시간 점검 결과를 검토합니다. 측정된 최대 대기 시간이 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
    나노초 단위의 최대 측정 대기 시간입니다.
  9. 선택 사항: 검사 실패 시 자세한 작업 로그를 보려면 다음 명령을 사용합니다.

    $ oc logs job.batch/kubevirt-vm-latency-checkup -n <target_namespace>
  10. 다음 명령을 실행하여 이전에 생성한 작업 및 구성 맵을 삭제합니다.

    $ oc delete job -n <target_namespace> kubevirt-vm-latency-checkup
    $ oc delete config-map -n <target_namespace> kubevirt-vm-latency-checkup-config
  11. 선택 사항: 다른 점검을 실행하지 않으려면 역할 매니페스트를 삭제합니다.

    $ 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 점검을 실행합니다.

  1. 트래픽 생성 Pod에 대한 DPDK 검사 및 서비스 계정에 대한 서비스 계정, 역할, 역할 바인딩을 생성합니다.
  2. 트래픽 생성기 Pod에 대한 보안 컨텍스트 제약 조건 리소스를 생성합니다.
  3. 구성 맵을 생성하여 점검을 실행하고 결과를 저장할 입력을 제공합니다.
  4. 점검을 실행하는 작업을 생성합니다.
  5. 구성 맵에서 결과를 검토합니다.
  6. 선택 사항: 점검을 다시 실행하려면 기존 구성 맵 및 작업을 삭제한 다음 새 구성 맵 및 작업을 생성합니다.
  7. 완료되면 DPDK 점검 리소스를 삭제합니다.

사전 요구 사항

  • cluster-admin 권한이 있는 사용자로 클러스터에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • 패킷 손실이 0인 VM에서 DPDK 애플리케이션을 실행하도록 컴퓨팅 노드를 구성했습니다.
중요

검사로 생성된 트래픽 생성기 Pod에는 높은 권한이 있습니다.

  • root로 실행됩니다.
  • 노드의 파일 시스템에 바인딩 마운트가 있습니다.

트래픽 생성기의 컨테이너 이미지는 업스트림 프로젝트 Quay 컨테이너 레지스트리에서 가져옵니다.

절차

  1. 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
  2. ServiceAccount,Role, RoleBinding 매니페스트를 적용합니다.

    $ oc apply -n <target_namespace> -f <dpdk_sa_roles_rolebinding>.yaml
  3. 트래픽 생성기 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

  4. SecurityContextConstraints 매니페스트를 적용합니다.

    $ oc apply -f <dpdk_scc>.yaml
  5. 검사에 대한 입력 매개변수가 포함된 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

    1
    NetworkAttachmentDefinition 오브젝트의 이름입니다.
    2
    트래픽 생성기 Pod에서 사용하는 RuntimeClass 리소스입니다.
    3
    트래픽 생성기의 컨테이너 이미지입니다. 이 예에서 이미지는 업스트림 프로젝트 Quay 컨테이너 레지스트리에서 가져옵니다.
    4
    VM의 컨테이너 디스크 이미지입니다. 이 예에서 이미지는 업스트림 프로젝트 Quay 컨테이너 레지스트리에서 가져옵니다.
  6. 대상 네임스페이스에 ConfigMap 매니페스트를 적용합니다.

    $ oc apply -n <target_namespace> -f <dpdk_config_map>.yaml
  7. 점검을 실행할 작업 매니페스트를 생성합니다.

    작업 매니페스트 예

    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

  8. 작업 매니페스트를 적용합니다.

    $ oc apply -n <target_namespace> -f <dpdk_job>.yaml
  9. 작업이 완료될 때까지 기다립니다.

    $ oc wait job dpdk-checkup -n <target_namespace> --for condition=complete --timeout 10m
  10. 다음 명령을 실행하여 검사 결과를 검토합니다.

    $ 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

  11. 다음 명령을 실행하여 이전에 생성한 작업 및 구성 맵을 삭제합니다.

    $ oc delete job -n <target_namespace> dpdk-checkup
    $ oc delete config-map -n <target_namespace> dpdk-checkup-config
  12. 선택 사항: 다른 점검을 실행하지 않으려면 ServiceAccount,Role, RoleBinding 매니페스트를 삭제합니다.

    $ oc delete -f <dpdk_sa_roles_rolebinding>.yaml
14.3.2.3.1. DPDK 검사 구성 맵 매개변수

다음 표는 클러스터 DPDK 준비 상태 점검을 실행할 때 입력 ConfigMap 매니페스트의 data 스탠자에 설정할 수 있는 필수 및 선택적 매개변수를 보여줍니다.

표 14.3. DPDK 검사 구성 맵 매개변수
매개변수설명필수 항목

spec.timeout

검사에 실패하기 전의 시간(분)입니다.

True

spec.param.networkAttachmentDefinitionName

SR-IOV NIC의 NetworkAttachmentDefinition 오브젝트의 이름입니다.

True

spec.param.trafficGeneratorRuntimeClassName

트래픽 생성기 Pod에서 사용하는 RuntimeClass 리소스입니다.

True

spec.param.trafficGeneratorImage

트래픽 생성기의 컨테이너 이미지입니다. 기본값은 quay.io/kiagnose/kubevirt-dpdk-checkup-traffic-gen:main 입니다.

False

spec.param.trafficGeneratorNodeSelector

트래픽 생성기 Pod를 예약할 노드입니다. 노드는 DPDK 트래픽을 허용하도록 구성해야 합니다.

False

spec.param.trafficGeneratorPacketsPerSecond

초당 패킷 수(k) 또는 million(m)입니다. 기본값은 14m입니다.

False

spec.param.trafficGeneratorEastMacAddress

트래픽 생성기 Pod 또는 VM에 연결된 NIC의 MAC 주소입니다. 기본값은 50:xx:xx:xx:xx:01 형식의 임의의 MAC 주소입니다.

False

spec.param.trafficGeneratorWestMacAddress

트래픽 생성기 Pod 또는 VM에 연결된 NIC의 MAC 주소입니다. 기본값은 50:xx:xx:xx:xx:02 형식의 임의의 MAC 주소입니다.

False

spec.param.vmContainerDiskImage

VM의 컨테이너 디스크 이미지입니다. 기본값은 quay.io/kiagnose/kubevirt-dpdk-checkup-vm:main 입니다.

False

spec.param.DPDKLabelSelector

VM이 실행되는 노드의 레이블입니다. 노드는 DPDK 트래픽을 허용하도록 구성해야 합니다.

False

spec.param.DPDKEastMacAddress

VM에 연결된 NIC의 MAC 주소입니다. 기본값은 60:xx:xx:xx:xx:01 형식의 임의의 MAC 주소입니다.

False

spec.param.DPDKWestMacAddress

VM에 연결된 NIC의 MAC 주소입니다. 기본값은 60:xx:xx:xx:xx:02 형식의 임의의 MAC 주소입니다.

False

spec.param.testDuration

트래픽 생성기가 실행되는 기간(분)입니다. 기본값은 5분입니다.

False

spec.param.portBandwidthGB

SR-IOV NIC의 최대 대역폭입니다. 기본값은 10GB입니다.

False

spec.param.verbose

true 로 설정하면 검사 로그의 상세 수준이 높아집니다. 기본값은 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)을 설치했습니다.

절차

  1. RHEL 8.7 이미지를 빌드할 수 있는지 확인합니다.

    # composer-cli distros list
    참고

    composer-cli 명령을 루트로 실행하려면 사용자를 weldr 또는 root 그룹에 추가합니다.

    # usermod -a -G weldr user
    $ newgrp weldr
  2. 다음 명령을 입력하여 설치하려는 패키지가 포함된 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
  3. 다음 명령을 실행하여 image 빌더 툴로 청사진 파일을 푸시합니다.

    # composer-cli blueprints push dpdk-vm.toml
  4. CloudEvent 이름 및 출력 파일 형식을 지정하여 시스템 이미지를 생성합니다. 쓰기 프로세스를 시작할 때 이미지의 UUID(Universally Unique Identifier)가 표시됩니다.

    # composer-cli compose start dpdk_image qcow2
  5. compose 프로세스가 완료될 때까지 기다립니다. 작성 상태는 다음 단계를 계속 진행하기 전에 FINISHED 를 표시해야 합니다.

    # composer-cli compose status
  6. 다음 명령을 입력하여 UUID를 지정하여 qcow2 이미지 파일을 다운로드합니다.

    # composer-cli compose image <UUID>
  7. 다음 명령을 실행하여 사용자 지정 스크립트를 생성합니다.

    $ 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
  8. virt-customize 툴을 사용하여 이미지 빌더 툴에서 생성한 이미지를 사용자 지정합니다.

    $ virt-customize -a <UUID>.qcow2 --run=customize-vm --firstboot=first-boot --selinux-relabel
  9. 컨테이너 디스크 이미지를 빌드하는 모든 명령이 포함된 Dockerfile을 생성하려면 다음 명령을 입력합니다.

    $ cat << EOF > Dockerfile
    FROM scratch
    COPY <uuid>-disk.qcow2 /disk/
    EOF

    다음과 같습니다.

    <uuid>-disk.qcow2
    사용자 지정 이미지의 이름을 qcow2 형식으로 지정합니다.
  10. 다음 명령을 실행하여 컨테이너를 빌드하고 태그합니다.

    $ podman build . -t dpdk-rhel:latest
  11. 다음 명령을 실행하여 컨테이너 디스크 이미지를 클러스터에서 액세스할 수 있는 레지스트리로 푸시합니다.

    $ podman push dpdk-rhel:latest
  12. 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)가 설치되어 있습니다.

절차

  1. OpenShift Container Platform 웹 콘솔의 관리자 관점에서 모니터링 메트릭 선택합니다.
  2. 하나 이상의 쿼리를 추가하려면 다음 중 하나를 수행합니다.

    옵션설명

    사용자 지정 쿼리를 생성합니다.

    표현식 필드에 PromQL(Prometheus Query Language) 쿼리를 추가합니다.

    PromQL 표현식을 입력하면 자동 완성 제안이 드롭다운 목록에 표시됩니다. 이러한 제안에는 함수, 메트릭, 라벨 및 시간 토큰이 포함됩니다. 키보드 화살표를 사용하여 이러한 제안된 항목 중 하나를 선택한 다음 Enter를 눌러 표현식에 항목을 추가할 수 있습니다. 또한 제안된 항목 위로 마우스 포인터를 이동하여 해당 항목에 대한 간략한 설명을 볼 수도 있습니다.

    여러 쿼리를 추가합니다.

    쿼리 추가를 선택합니다.

    기존 쿼리를 복제합니다.

    쿼리 옆에 있는 옵션 메뉴 kebab 를 선택한 다음 중복 쿼리 를 선택합니다.

    쿼리가 실행되지 않도록 비활성화합니다.

    쿼리 옆에 있는 옵션 메뉴 kebab 를 선택하고 쿼리 비활성화 를 선택합니다.

  3. 생성한 쿼리를 실행하려면 쿼리 실행을 선택합니다. 쿼리의 메트릭은 플롯에 시각화됩니다. 쿼리가 유효하지 않으면 UI에 오류 메시지가 표시됩니다.

    참고

    대량의 데이터에서 작동하는 쿼리 시간이 초과되거나 시계열 그래프에 있을 때 브라우저가 과부하될 수 있습니다. 이를 방지하려면 그래프 숨기기를 선택하고 메트릭 테이블만 사용하여 쿼리를 조정합니다. 그런 다음 실행 가능한 쿼리를 검색한 후 플롯을 활성화하여 그래프를 그립니다.

    참고

    기본적으로 쿼리 테이블은 모든 메트릭과 해당 현재 값을 나열하는 확장된 보기를 표시합니다. 쿼리에 대해 확장된 보기를 최소화하려면 ˅를 선택할 수 있습니다.

  4. 선택 사항: 이제 페이지 URL에 실행한 쿼리가 포함되어 있습니다. 나중에 이 쿼리 세트를 다시 사용하려면 이 URL을 저장합니다.
  5. 시각화된 메트릭을 살펴봅니다. 처음에 활성화된 모든 쿼리의 모든 메트릭이 플롯에 표시됩니다. 다음 중 하나를 수행하여 표시되는 메트릭을 선택할 수 있습니다.

    옵션설명

    쿼리에서 모든 메트릭을 숨깁니다.

    쿼리의 옵션 메뉴 kebab 를 클릭하고 모든 시리즈 숨기기 를 클릭합니다.

    특정 메트릭을 숨깁니다.

    쿼리 테이블로 이동하여 메트릭 이름 옆에 있는 색상이 지정된 사각형을 클릭합니다.

    플롯으로 확대하고 시간 범위를 변경합니다.

    either:

    • 수평으로 플롯을 클릭하고 드래그하여 시간 범위를 시각적으로 선택합니다.
    • 왼쪽 상단 코너의 메뉴를 사용하여 시간 범위를 선택합니다.

    시간 범위를 재설정합니다.

    확대/축소 재설정 을 선택합니다.

    특정 시점에서 모든 쿼리에 대한 출력을 표시합니다.

    해당 시점에서 플롯에 마우스 커서를 유지합니다. 쿼리 출력이 팝업 상자에 나타납니다.

    플롯을 숨깁니다.

    그래프 숨기기를 선택합니다.

14.3.3.2.2. 개발자로 사용자 정의 프로젝트의 메트릭 쿼리

사용자 정의 프로젝트의 메트릭에 대해 개발자 또는 프로젝트에 대한 보기 권한이 있는 사용자로 액세스할 수 있습니다.

개발자 관점에서 Metrics UI에는 선택한 프로젝트에 대한 사전 정의된 CPU, 메모리, 대역폭 및 네트워크 패킷 쿼리가 포함되어 있습니다. 프로젝트에 대한 CPU, 메모리, 대역폭, 네트워크 패킷 및 애플리케이션 메트릭에 대해 사용자 정의 Prometheus Query Language(PromQL) 쿼리를 실행할 수도 있습니다.

참고

개발자는 관리자 관점이 아닌 개발자 관점만 사용할 수 있습니다. 개발자는 한 번에 하나의 프로젝트의 메트릭만 쿼리할 수 있습니다.

사전 요구 사항

  • 개발자로 또는 메트릭을 확인하는 프로젝트에 대한 보기 권한이 있는 사용자로 클러스터에 액세스할 수 있습니다.
  • 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.
  • 사용자 정의 프로젝트에 서비스를 배포했습니다.
  • 서비스에서 모니터링 방법을 정의하는 데 사용할 ServiceMonitor CRD(사용자 정의 리소스 정의(Custom Resource Definition))가 생성되었습니다.

절차

  1. OpenShift Container Platform 웹 콘솔의 개발자 관점에서 모니터링 메트릭 선택합니다.
  2. Project: 목록에서 메트릭을 보려는 프로젝트를 선택합니다.
  3. 쿼리 선택 목록에서 쿼리를 선택하거나 PromQL 표시를 선택하여 선택한 쿼리를 기반으로 사용자 정의 PromQL 쿼리를 만듭니다. 쿼리의 메트릭은 플롯에 시각화됩니다.

    참고

    개발자 관점에서는 한 번에 하나의 쿼리만 실행할 수 있습니다.

  4. 다음 중 하나를 수행하여 시각화된 메트릭을 살펴봅니다.

    옵션설명

    플롯으로 확대하고 시간 범위를 변경합니다.

    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 오브젝트를 생성합니다.
  • enableUserWorkloadtrue 로 설정하여 openshift-user-workload-monitoring 프로젝트에서 user-workload-monitoring-config ConfigMap 오브젝트를 구성합니다.

절차

  1. 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와 메트릭 값이 일치합니다.
  2. 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 역할을 부여합니다.

절차

  1. 가상 머신에 로그인합니다.
  2. 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
  3. 실행 파일을 추출하여 /usr/bin 디렉터리에 배치합니다.

    $ sudo tar xvf node_exporter-1.3.1.linux-amd64.tar.gz \
        --directory /usr/bin --strip 1 "*/node_exporter"
  4. 이 디렉터리 경로에 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
  5. 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 권한이 있는 사용자로 로그인합니다.
  • 웹 콘솔에 액세스하여 가상 머신을 재시작합니다.

절차

  1. 가상 머신 구성 파일의 템플릿 사양을 편집합니다. 이 예에서 라벨 monitor 에는 값이 있습니다.

    spec:
      template:
        metadata:
          labels:
            monitor: metrics
  2. 가상 머신을 중지하고 다시 시작하여 monitor 라벨에 지정된 라벨 이름으로 새 Pod를 생성합니다.
14.3.4.3.1. node-exporter 서비스에서 메트릭 쿼리

/metrics 표준 이름 아래에 HTTP 서비스 끝점을 통해 가상 머신에 대한 지표가 표시됩니다. 메트릭을 쿼리하면 Prometheus는 가상 머신에서 노출된 지표 끝점에서 메트릭을 직접 스크랩하고 보기 위해 이러한 지표를 표시합니다.

사전 요구 사항

  • cluster-admin 권한 또는 monitoring-edit 역할의 사용자로 클러스터에 액세스할 수 있습니다.
  • node-exporter 서비스를 구성하여 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.

절차

  1. 서비스의 네임스페이스를 지정하여 HTTP 서비스 끝점을 가져옵니다.

    $ oc get service -n <namespace> <node-exporter-service>
  2. 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 서비스를 구성하여 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.

절차

  1. 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
    1
    ServiceMonitor 의 이름입니다.
    2
    ServiceMonitor 가 생성된 네임스페이스입니다.
    3
    포트를 쿼리할 간격입니다.
    4
    30초마다 쿼리되는 포트의 이름입니다.
  2. node-exporter 서비스에 대한 ServiceMonitor 구성을 생성합니다.

    $ oc create -f node-exporter-metrics-monitor.yaml
14.3.4.4.1. 클러스터 외부에서 노드 내보내기 서비스에 액세스

클러스터 외부에서 node-exporter 서비스에 액세스하고 노출된 지표를 볼 수 있습니다.

사전 요구 사항

  • cluster-admin 권한 또는 monitoring-edit 역할의 사용자로 클러스터에 액세스할 수 있습니다.
  • node-exporter 서비스를 구성하여 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.

절차

  1. node-exporter 서비스를 노출합니다.

    $ oc expose service -n <namespace> <node_exporter_service_name>
  2. 경로에 대한 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

  3. 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.readinessProbespec.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 준비 상태 프로브를 정의합니다.

절차

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

    $ oc create -f <file_name>.yaml
14.3.5.1.2. TCP 준비 프로브 정의

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

절차

  1. VM 구성 파일에 TCP 준비 상태 프로브의 세부 정보를 포함합니다.

    TCP 소켓 테스트를 사용하는 샘플 준비 상태 프로브

    # ...
    spec:
      readinessProbe:
        initialDelaySeconds: 120 1
        periodSeconds: 20 2
        tcpSocket: 3
          port: 1500 4
        timeoutSeconds: 10 5
    # ...

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

    $ oc create -f <file_name>.yaml
14.3.5.1.3. HTTP 활성 프로브 정의

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

절차

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

    $ oc create -f <file_name>.yaml

14.3.5.2. 워치독 정의

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

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

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

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

    참고

    재부팅 시간을 사용하면 활성 프로브가 시간 초과될 수 있습니다. 클러스터 수준 보호에서 실패한 활성 상태 프로브를 탐지하는 경우 VM을 강제로 다시 예약하여 재부팅 시간을 늘릴 수 있습니다.

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

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

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

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

사전 요구 사항

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

절차

  1. 다음 콘텐츠를 사용하여 YAML 파일을 생성합니다.

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      labels:
        kubevirt.io/vm: vm2-rhel84-watchdog
      name: <vm-name>
    spec:
      running: false
      template:
        metadata:
          labels:
            kubevirt.io/vm: vm2-rhel84-watchdog
        spec:
          domain:
            devices:
              watchdog:
                name: <watchdog>
                i6300esb:
                  action: "poweroff" 1
    # ...
    1
    poweroff,reset, shutdown 을 지정합니다.

    위의 예제에서는 poweroff 작업을 사용하여 RHEL8 VM에서 i6300esb 워치독 장치를 구성하고 장치를 /dev/watchdog로 노출합니다.

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

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

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

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

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

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

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

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

      # pkill -9 watchdog
14.3.5.2.2. 게스트에 워치독 에이전트 설치

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

절차

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

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

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

    # systemctl enable --now watchdog.service

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

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

중요

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

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

사전 요구 사항

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

절차

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

    $ oc create -f <file_name>.yaml

14.3.5.4. 추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.