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 역할을 사용하여 클러스터에 로그인되어 있습니다.
- 메모리 초과 커밋 비율이 정의됩니다.
- 노드는 작업자 풀에 속합니다.
프로세스
다음 명령을 입력하여 권한 있는 서비스 계정을 생성합니다.
$ 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오브젝트에 권한을 부여해야 합니다.deploy
wasp-agent:다음과 같이
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: {}-
RH 포털에서 최신 URL을 가져오고 생성된
DaemonSet오브젝트에 URL을 입력합니다.
스왑을 허용하도록
kubelet서비스를 구성합니다.예제에 표시된 대로
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다음 명령을 실행합니다.
$ oc wait mcp worker --for condition=Updated=True
다음과 같이
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.servicebest-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다음과 같이 경고 규칙을 배포합니다.
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다음 예와 같이 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다음 명령을 입력하여 클러스터의 컴퓨팅 노드에 모든 구성을 적용합니다.
$ oc patch --type=merge \ -f <../manifests/hco-set-memory-overcommit.yaml> \ --patch-file <../manifests/hco-set-memory-overcommit.yaml>참고모든 구성을 적용한 후에는 모든
MachineConfigPool롤아웃이 완료된 후에만 스왑 기능을 완전히 사용할 수 있습니다.
검증
wasp-agent의 배포를 확인하려면 다음 명령을 실행합니다.$ oc rollout status ds wasp-agent -n wasp배포에 성공하면 다음 메시지가 표시됩니다.
daemon set "wasp-agent" successfully rolled out스왑이 올바르게 프로비저닝되었는지 확인하려면 다음을 수행하십시오.
다음 명령을 실행합니다.
$ oc get nodes -l node-role.kubernetes.io/worker제공된 목록에서 노드를 선택하고 다음 명령을 실행합니다.
$ oc debug node/<selected-node> -- free -m스왑이 올바르게 프로비저닝되면 0보다 큰 양이 표시되고 다음과 유사합니다.
Expand 합계
사용됨
무료
공유됨
buff/cache
사용 가능
mEM:
31846
23155
1044
6014
14483
8690
swap:
8191
2337
5854
다음 명령을 실행하여 OpenShift Virtualization 메모리 과다 할당 구성을 확인합니다.
$ oc get -n openshift-cnv HyperConverged kubevirt-hyperconverged -o jsonpath="{.spec.higherWorkloadDensity.memoryOvercommitPercentage}" 150반환된 값(예:
150)은 이전에 구성한 값과 일치해야 합니다.