Envoy-sidecar の使用メモリが制限値に達した時、vCenter Server を再起動するまでは vAPI endpoint サービスの機能低下が起こり、vCenter Server が応答しなくなる
search cancel

Envoy-sidecar の使用メモリが制限値に達した時、vCenter Server を再起動するまでは vAPI endpoint サービスの機能低下が起こり、vCenter Server が応答しなくなる

book

Article ID: 392948

calendar_today

Updated On:

Products

VMware vCenter Server VMware vCenter Server 8.0

Issue/Introduction

免責事項:これは英文の記事「vCenter is unresponsive, vAPI endpoint service degraded, and logins fail until a reboot when envoy-sidecar hits memory limit.」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。

vCenter Server 上のワークロードが失敗するか、vCenter Server にログインできなくなる可能性があります。
サービスは稼働しており、core ダンプも生成されません。再起動により解消できますが、事象の原因は判明していません。

 

Symptoms

  • ユーザは vCenter Server を再起動するまで、ログインができなくなります。この問題は繰り返し生じます。
  • いくつかのサービスは警告を伴う健全性のレポートをします。以下はその例です。
    • vAPI Endpoint
      • Failed to retrieve SSO settings
      • Failed to login in SSO
      • Failed to retrieve VIM service URI from Lookup Service
  • License, vApi Endopoint, VMware vSphere Profile-Driven Storage の各サービスは、機能低下状態となります。[健全性の状態は警告です]
  • websso.log に、下記の envoy overloaded のメッセージが出力します。
    <date && time> INFO websso[71:tomcat-http--33] [CorId=487fd2f5-e5c1-4592-b292-12345677890] [com.vmware.identity.samlservice.impl.ExternalIdpProvider] Got exception (sleeping before retry)
       com.vmware.vapi.client.exception.TransportProtocolException: HTTP response with status code 503 (enable debug logging for details): envoy overloaded

Environment

vSphere 8.X 
VCF 5.X 

Cause

envoy-sidecar はメモリの使用を 1GB までに制限されています。これは /etc/vmware-envoy-sidecar/config.yaml より確認できます。

# cat ./etc/vmware-envoy-sidecar/config.yaml | grep -C2 1073741824
      typed_config:
        "@type": type.googleapis.com/envoy.extensions.resource_monitors.fixed_heap.v3.FixedHeapConfig
        max_heap_size_bytes: 1073741824 # 1GB
  actions:
    - name: "envoy.overload_actions.disable_http_keepalive"


メモリ使用量が 98% に達すると過負荷であることを示すエラーを送信し、vCenter Server の内部ワークロードの失敗を起こす可能性があります。

この問題は下記のコマンドにて特定できます。

zgrep "503 overload" /var/log/vmware/envoy-sidecar/envoy-access-* | wc -l

実行結果が0と異なる場合は、次のコマンドを実行してください:

vCenter Server 8.0U3、VCF 5.x の場合: 

zgrep envoy_server_memory_heap_size{} /var/cache/vmware-rhttpproxy/envoy-sidecar-stats/* | cut -d ' ' -f2|  sort -n | uniq | tail -1 | awk '{print $1 >= 1052266987}'

vCenter Server 9.0, VCF 9.x の場合:

zgrep envoy_overload_envoy_resource_monitors_fixed_heap_pressure /var/log/vmware/vstats/metrics/ENVOY_SIDECAR* | grep -v "# TYPE" | cut -d ' ' -f2|  sort -n | uniq | tail -1 | awk '{print $1 >= 98}'

上記のコマンドが 1 を返す場合、envoy-sidecarのメモリ制限に達しています。

Resolution

この問題は vCenter Server 8.0 および 9.0 の将来のリリースで軽減するよう取り組んでいます。
最新の vCenter Server へアップデートしてください。それでも問題が再発する場合は、以下の回避策を適用してください:

回避策:

  1. vCenter Server もしくは拡張リンクモード (ELM) を構成している vCenter Server グループのスナップショットを取得します。( ELM 構成でのスナップショットの取得方法は VMware vCenter in Enhanced Linked Mode pre-changes snapshot (online or offline) best practice を参照してください)

  2. SSH にて vCenter Server にログインします。
  3. envoy sidecar 構成ファイルのバックアップを作成します:
    # cp /etc/vmware-envoy-sidecar/config.yaml /etc/vmware-envoy-sidecar/config.yaml.back
  4. sed コマンドを使用して、Envoy のメモリ制限を 1073741824 (1 GB) から 2147483648 (2 GB) に変更します:
    # sed -i 's/max_heap_size_bytes: 1073741824/max_heap_size_bytes: 2147483648/g' /etc/vmware-envoy-sidecar/config.yaml
  5. envoy-sidecar を再起動します:
    # service-control --restart envoy-sidecar
  6. 2 GB の制限値でも十分な結果を得られないケースがあります。その場合は制限値を 2 GB から 4GB とすることを推奨します:
    # sed -i 's/max_heap_size_bytes: 2147483648/max_heap_size_bytes: 4294967296/g' /etc/vmware-envoy-sidecar/config.yaml
    # service-control --restart envoy-sidecar
  7. 稀に 4 GB でも十分でないことがあります。その場合は下記の 2 つのアクションを消去することを推奨します:
       - name: "envoy.overload_actions.stop_accepting_requests"
          triggers:
            - name: "envoy.resource_monitors.global_downstream_max_connections"
              threshold:
                value: 0.99
            - name: "envoy.resource_monitors.fixed_heap"
              threshold:
                value: 0.98
     
      - name: "envoy.overload_actions.reject_incoming_connections"

          triggers:
            - name: "envoy.resource_monitors.fixed_heap"
              threshold:
                value: 1.00

    消去には vim を使用します:
    # vim /etc/vmware-envoy-sidecar/config.yaml

    2 つのアクションを削除したあとの、yaml ファイル内の overload manager のセクションは下記のようになります:

    overload_manager:
      refresh_interval: 1s
      resource_monitors:
        - name: "envoy.resource_monitors.global_downstream_max_connections"
          typed_config:
            "@type": type.googleapis.com/envoy.extensions.resource_monitors.downstream_connections.v3.DownstreamConnectionsConfig
            max_active_downstream_connections: 8000
        - name: "envoy.resource_monitors.fixed_heap"
          typed_config:
            "@type": type.googleapis.com/envoy.extensions.resource_monitors.fixed_heap.v3.FixedHeapConfig
            max_heap_size_bytes: 4294967296 # 4GB
      actions:
        - name: "envoy.overload_actions.shrink_heap"
          triggers:
            - name: "envoy.resource_monitors.fixed_heap"
              threshold:
                value: 0.75
        - name: "envoy.overload_actions.disable_http_keepalive"
          triggers:
            - name: "envoy.resource_monitors.global_downstream_max_connections"
              threshold:
                value: 0.8
            - name: "envoy.resource_monitors.fixed_heap"
              threshold:
                value: 0.95
        - name: "envoy.overload_actions.reduce_timeouts"
          triggers:
            - name: "envoy.resource_monitors.global_downstream_max_connections"
              scaled:
                scaling_threshold: 0.25
                saturation_threshold: 0.97
            - name: "envoy.resource_monitors.fixed_heap"
              scaled:
                scaling_threshold: 0.85
                saturation_threshold: 0.97
          typed_config:
            "@type": type.googleapis.com/envoy.config.overload.v3.ScaleTimersOverloadActionConfig
            timer_scale_factors:
              - timer: HTTP_DOWNSTREAM_CONNECTION_IDLE
                min_timeout: 2s

    編集した設定の保存後は envoy-sidecar サービスを再起動してください:
    # service-control --restart envoy-sidecar

  8. この問題は将来のリリースでの修正に向けて取り組んでいます。