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
    $ oc create sa -n wasp wasp
    $ oc adm policy add-cluster-role-to-user cluster-admin -n wasp -z wasp
    $ oc adm policy add-scc-to-user -n wasp privileged -z wasp
    참고

    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: {}
    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"

      클러스터가 기존 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
    2. 다음 명령을 실행합니다.

      $ oc wait mcp worker --for condition=Updated=True
  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

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

    NODE_SWAP_SPACE = NODE_RAM * (MEMORY_OVER_COMMIT_PERCENT / 100% - 1)

    예제:

    NODE_SWAP_SPACE = 16 GB * (150% / 100% - 1)
                    = 16 GB * (1.5 - 1)
                    = 16 GB * (0.5)
                    =  8 GB
  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
  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
  7. 다음 명령을 입력하여 클러스터의 컴퓨팅 노드에 모든 구성을 적용합니다.

    $ oc patch --type=merge \
      -f <../manifests/hco-set-memory-overcommit.yaml> \
      --patch-file <../manifests/hco-set-memory-overcommit.yaml>
    참고

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

검증

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

    $  oc rollout status ds wasp-agent -n wasp

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

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

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

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

      $ oc debug node/<selected-node> -- free -m

      스왑이 올바르게 프로비저닝되면 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

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

Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2026 Red Hat
맨 위로 이동