7.13. 더 높은 VM 워크로드 밀도 구성


VM(가상 머신) 수를 늘리려면 RAM(메모리) 양을 과다 할당하여 클러스터에서 더 높은 VM 워크로드 밀도를 구성할 수 있습니다.

중요

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

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

다음 워크로드는 특히 높은 워크로드 밀도에 적합합니다.

  • 많은 유사한 워크로드
  • 사용되지 않는 워크로드
참고

오버 커밋된 메모리는 워크로드 밀도가 높을 수 있지만 고도로 사용되는 시스템의 워크로드 성능을 저하시킬 수 있습니다.

7.13.1. wasp-agent 를 사용하여 더 높은 VM 워크로드 밀도 구성

wasp-agent 구성 요소를 사용하면 OpenShift Container Platform 클러스터에서 스왑 리소스를 VM(가상 머신) 워크로드에 할당할 수 있습니다. 스왑 사용은 작업자 노드에서만 지원됩니다.

중요

스왑 리소스는 Burstable Quality of Service(QoS) 클래스의 VM(가상 머신 워크로드)에만 할당할 수 있습니다. 보장된 QoS 클래스의 VM Pod 및 VM에 속하지 않는 QoS 클래스의 Pod는 리소스를 스왑할 수 없습니다.

QoS 클래스에 대한 설명은 Pod용 서비스 품질 구성 (Kubernetes 문서)을 참조하십시오.

사전 요구 사항

  • oc 도구를 사용할 수 있습니다.
  • cluster-admin 역할을 사용하여 클러스터에 로그인되어 있습니다.
  • 메모리 초과 커밋 비율이 정의됩니다.
  • 노드는 작업자 풀에 속합니다.

프로세스

  1. 다음 명령을 입력하여 권한 있는 서비스 계정을 생성합니다.

    $ oc adm new-project wasp
    Copy to Clipboard Toggle word wrap
    $ oc create sa -n wasp wasp
    Copy to Clipboard Toggle word wrap
    $ oc adm policy add-cluster-role-to-user cluster-admin -n wasp -z wasp
    Copy to Clipboard Toggle word wrap
    $ oc adm policy add-scc-to-user -n wasp privileged -z wasp
    Copy to Clipboard Toggle word wrap
    참고

    wasp-agent 구성 요소는 OCI 후크를 배포하여 노드 수준에서 컨테이너의 스왑 사용을 활성화합니다. 낮은 수준의 특성을 사용하려면 DaemonSet 오브젝트에 권한을 부여해야 합니다.

  2. deploy wasp-agent:

    1. 다음과 같이 DaemonSet 오브젝트를 생성합니다.

      apiVersion: machineconfiguration.openshift.io/v1
      kind: DaemonSet
      apiVersion: apps/v1
      metadata:
        name: wasp-agent
        namespace: wasp
        labels:
          app: wasp
          tier: node
      spec:
        selector:
          matchLabels:
            name: wasp
        template:
          metadata:
            annotations:
              description: >-
                Configures swap for workloads
            labels:
                name: wasp
          spec:
            serviceAccountName: wasp
            hostPID: true
            hostUsers: true
            terminationGracePeriodSeconds: 5
            containers:
              - name: wasp-agent
                image: >-
                  registry.redhat.io/container-native-virtualization/wasp-agent-rhel9:latest
                imagePullPolicy: Always
                env:
                - name: "FSROOT"
                  value: "/host"
                resources:
                  requests:
                    cpu: 100m
                    memory: 50M
                securityContext:
                  privileged: true
                volumeMounts:
                - name: host
                  mountPath: "/host"
            volumes:
            - name: host
              hostPath:
                path: "/"
            priorityClassName: system-node-critical
        updateStrategy:
          type: RollingUpdate
          rollingUpdate:
            maxUnavailable: 10%
            maxSurge: 0
      status: {}
      Copy to Clipboard Toggle word wrap
    2. RH 포털에서 최신 URL을 가져오고 생성된 DaemonSet 오브젝트에 URL을 입력합니다.
  3. 스왑을 허용하도록 kubelet 서비스를 구성합니다.

    1. 예제에 표시된 대로 KubeletConfiguration 파일을 생성합니다.

      KubeletConfiguration 파일 예

      apiVersion: machineconfiguration.openshift.io/v1
      kind: KubeletConfig
      metadata:
        name: custom-config
      spec:
        machineConfigPoolSelector:
          matchLabels:
            pools.operator.machineconfiguration.openshift.io/worker: ''  # MCP
            #machine.openshift.io/cluster-api-machine-role: worker # machine
            #node-role.kubernetes.io/worker: '' # node
        kubeletConfig:
          failSwapOn: false
          evictionSoft:
            memory.available: "1Gi"
          evictionSoftGracePeriod:
            memory.available: "10s"
      Copy to Clipboard Toggle word wrap

      클러스터가 기존 KubeletConfiguration 파일을 이미 사용하고 있는 경우 spec 섹션에 다음을 추가합니다.

      apiVersion: machineconfiguration.openshift.io/v1
      kind: KubeletConfig
      metadata:
        name: custom-config
      # ...
      spec
      # ...
          kubeletConfig:
            evictionSoft:
              memory.available: 1Gi
            evictionSoftGracePeriod:
              memory.available: 1m30s
            failSwapOn: false
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행합니다.

      $ oc wait mcp worker --for condition=Updated=True
      Copy to Clipboard Toggle word wrap
  4. 다음과 같이 MachineConfig 오브젝트를 생성하여 스왑을 프로비저닝합니다.

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: 90-worker-swap
    spec:
      config:
        ignition:
          version: 3.4.0
        systemd:
          units:
          - contents: |
              [Unit]
              Description=Provision and enable swap
              ConditionFirstBoot=no
    
              [Service]
              Type=oneshot
              Environment=SWAP_SIZE_MB=5000
              ExecStart=/bin/sh -c "sudo dd if=/dev/zero of=/var/tmp/swapfile count=$SWAP_SIZE_MB bs=1MiB && sudo chmod 600 /var/tmp/swapfile && sudo mkswap /var/tmp/swapfile && sudo swapon /var/tmp/swapfile && free -h"
    
              [Install]
              RequiredBy=kubelet-dependencies.target
            enabled: true
            name: swap-provision.service
    Copy to Clipboard Toggle word wrap

    best-case 시나리오를 위한 스왑 공간이 충분한 경우 오버 커밋된 RAM으로 프로비저닝된 스왑 공간이 있는지 확인하십시오. 다음 공식을 사용하여 노드에서 프로비저닝할 스왑 공간의 양을 계산합니다.

    NODE_SWAP_SPACE = NODE_RAM * (MEMORY_OVER_COMMIT_PERCENT / 100% - 1)
    Copy to Clipboard Toggle word wrap

    예제:

    NODE_SWAP_SPACE = 16 GB * (150% / 100% - 1)
                    = 16 GB * (1.5 - 1)
                    = 16 GB * (0.5)
                    =  8 GB
    Copy to Clipboard Toggle word wrap
  5. 다음과 같이 경고 규칙을 배포합니다.

    apiVersion: monitoring.openshift.io/v1
    kind: AlertingRule
    metadata:
      name: wasp-alerts
      namespace: openshift-monitoring
    spec:
      groups:
      - name: wasp.rules
        rules:
        - alert: NodeSwapping
          annotations:
            description: Node {{ $labels.instance }} is swapping at a rate of {{ printf "%.2f" $value }} MB/s
            runbook_url: https://github.com/openshift-virtualization/wasp-agent/tree/main/runbooks/alerts/NodeSwapping.md
            summary: A node is swapping memory pages
          expr: |
            # In MB/s
            irate(node_memory_SwapFree_bytes{job="node-exporter"}[5m]) / 1024^2 > 0
          for: 1m
          labels:
            severity: critical
    Copy to Clipboard Toggle word wrap
  6. 다음 예와 같이 OpenShift Container Platform 웹 콘솔을 사용하거나 HyperConverged CR(사용자 정의 리소스) 파일을 편집하여 메모리 과다 할당을 사용하도록 OpenShift Virtualization을 구성합니다.

    예제:

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
      namespace: openshift-cnv
    spec:
      higherWorkloadDensity:
        memoryOvercommitPercentage: 150
    Copy to Clipboard Toggle word wrap
  7. 다음 명령을 입력하여 클러스터의 컴퓨팅 노드에 모든 구성을 적용합니다.

    $ oc patch --type=merge \
      -f <../manifests/hco-set-memory-overcommit.yaml> \
      --patch-file <../manifests/hco-set-memory-overcommit.yaml>
    Copy to Clipboard Toggle word wrap
    참고

    모든 구성을 적용한 후에는 모든 MachineConfigPool 롤아웃이 완료된 후에만 스왑 기능을 완전히 사용할 수 있습니다.

검증

  1. wasp-agent 의 배포를 확인하려면 다음 명령을 실행합니다.

    $  oc rollout status ds wasp-agent -n wasp
    Copy to Clipboard Toggle word wrap

    배포에 성공하면 다음 메시지가 표시됩니다.

    daemon set "wasp-agent" successfully rolled out
    Copy to Clipboard Toggle word wrap
  2. 스왑이 올바르게 프로비저닝되었는지 확인하려면 다음을 수행하십시오.

    1. 다음 명령을 실행합니다.

      $ oc get nodes -l node-role.kubernetes.io/worker
      Copy to Clipboard Toggle word wrap
    2. 제공된 목록에서 노드를 선택하고 다음 명령을 실행합니다.

      $ oc debug node/<selected-node> -- free -m
      Copy to Clipboard Toggle word wrap

      스왑이 올바르게 프로비저닝되면 0보다 큰 양이 표시되고 다음과 유사합니다.

      Expand
       

      합계

      사용됨

      무료

      공유됨

      buff/cache

      사용 가능

      mEM:

      31846

      23155

      1044

      6014

      14483

      8690

      swap:

      8191

      2337

      5854

         
  3. 다음 명령을 실행하여 OpenShift Virtualization 메모리 과다 할당 구성을 확인합니다.

    $ oc get -n openshift-cnv HyperConverged kubevirt-hyperconverged -o jsonpath="{.spec.higherWorkloadDensity.memoryOvercommitPercentage}"
    150
    Copy to Clipboard Toggle word wrap

    반환된 값(예: 150 )은 이전에 구성한 값과 일치해야 합니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat