5.5. より高い仮想マシンワークロード密度の設定


仮想マシンの数を増やすには、メモリー (RAM) の量をオーバーコミットして、クラスター内の仮想マシンワークロード密度を高く設定します。

重要

より高いワークロード密度を設定する機能は、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

次のワークロードは、高いワークロード密度に特に適しています。

  • 多数の類似ワークロード
  • 過少使用されたワークロード
注記

メモリーがオーバーコミットされると、ワークロード密度が高くなりますが、使用率の高いシステムのワークロードパフォーマンスが低下する可能性もあります。

5.5.1. wasp-agent を使用して仮想マシンワークロード密度を高く設定する

wasp-agent コンポーネントにより、OpenShift Container Platform クラスターはスワップリソースを仮想マシンワークロードに割り当てることができます。スワップの使用は、ワーカーノードでのみサポートされます。

重要

スワップリソースは、Burstable Quality of Service (QoS) クラスの仮想マシンワークロード (VM Pod) にのみ割り当てることができます。Guaranteed QoS クラスの仮想マシン Pod と、仮想マシンに属していない任意の QoS クラスの Pod は、リソースをスワップできません。

QoS クラスの説明は、Configure Quality of Service for Pods (Kubernetes ドキュメント) を参照してください。

前提条件

  • oc ツールが利用できる。
  • cluster-admin ロールでクラスターにログイン済みである。
  • メモリーのオーバーコミット率が定義済みである。
  • ノードはワーカープールに属している。

手順

  1. 次のコマンドを入力して、特権サービスアカウントを作成します。

    $ oc adm new-project wasp
    $ oc create sa -n wasp wasp
    $ oc create clusterrolebinding wasp --clusterrole=cluster-admin --serviceaccount=wasp:wasp
    $ oc adm policy add-scc-to-user -n wasp privileged -z wasp
    注記

    wasp-agent コンポーネントは、OCI フックをデプロイして、ノードレベルでコンテナーのスワップ使用を有効にします。低レベルの性質上、DaemonSet オブジェクトには特権が必要です。

  2. 次のように DaemonSet オブジェクトを作成して wasp-agent をデプロイします。

    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:v4.16
              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: {}
  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=1M && \
              sudo chmod 600 /var/tmp/swapfile && \
              sudo mkswap /var/tmp/swapfile && \
              sudo swapon /var/tmp/swapfile && \
              free -h && \
              sudo systemctl set-property --runtime system.slice MemorySwapMax=0 IODeviceLatencyTargetSec=\"/ 50ms\""
    
              [Install]
              RequiredBy=kubelet-dependencies.target
            enabled: true
            name: swap-provision.service

    最悪のシナリオに備えて十分なスワップ領域を確保するには、オーバーコミットされた 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 Web コンソールを使用するか、次の例のとおり 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

      スワップが正しくプロビジョニングされている場合、次のようにゼロより大きい値が表示されます。

       

      total

      used

      free

      shared

      buff/cache

      available

      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 では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.