次の方法で共有


AKS Arc テレメトリ ポッドで消費されるメモリと CPU が多すぎる問題のトラブルシューティング

症状

AKS Arc クラスター内 の akshci テレメトリ ポッドは、時間の経過と同時に多くの CPU リソースとメモリ リソースを消費する可能性があります。 メトリックが有効になっている場合は、次の kubectl コマンドを使用して CPU とメモリの使用量を確認できます。

kubectl -n kube-system top pod -l app=akshci-telemetry

次のような出力が表示される場合があります。

NAME                              CPU(cores)   MEMORY(bytes)
akshci-telemetry-5df56fd5-rjqk4   996m         152Mi

緩和

この問題は 、AKS on Azure Local バージョン 2507 で修正されました。 Azure ローカル デプロイを 2507 ビルドにアップグレードします。

Azure Local バージョン 2506 以前の回避策

この問題を解決するには、名前空間のポッドの既定のkube-systemを設定します。

重要な注意事項

  • kube-system 名前空間に、既定の制限設定よりも多くのメモリが必要なポッドがあるかどうかを確認します。 その場合は、調整が必要になる場合があります。
  • LimitRange名前空間に適用されます。この場合は、kube-system名前空間です。 既定のリソース制限は、独自の制限を指定しない新しいポッドにも適用されます。
  • 既存のポッド (リソース制限が既にあるポッドを含む) は影響を受けません。
  • 独自のリソース制限を指定しない新しいポッドは、次のセクションで設定した制限によって制限されます。
  • リソース制限を設定してテレメトリ ポッドを削除すると、最終的に新しいポッドがメモリ制限に達し、 OOM (Out-Of-Memory) エラーが生成される可能性があります。 これは一時的な軽減策です。

リソース制限の設定を続行するには、次のスクリプトを実行します。 スクリプトでは az aksarc get-credentialsを使用しますが、 az connectedk8s proxy を使用してプロキシ kubeconfig を取得し、Kubernetes クラスターにアクセスすることもできます。

LimitRange YAML を定義して、既定の CPU とメモリの制限を設定する

# Set the $cluster_name and $resource_group of the aksarc cluster
$cluster_name = ""
$resource_group = ""

# Connect to the aksarc cluster
az aksarc get-credentials -n $cluster_name -g $resource_group --admin -f "./kubeconfig-$cluster_name"

$limitRangeYaml = @'
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-mem-resource-constraint
  namespace: kube-system
spec:
  limits:
  - default: # this section defines default limits for containers that haven't specified any limits
      cpu: 250m
      memory: 250Mi
    defaultRequest: # this section defines default requests for containers that haven't specified any requests
      cpu: 10m
      memory: 20Mi
    type: Container
'@

$limitRangeYaml | kubectl apply --kubeconfig "./kubeconfig-$cluster_name" -f -

kubectl get pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name"
kubectl delete pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name"

sleep 5
kubectl get pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name"

リソース制限が正しく適用されたかどうかを検証する

  1. ポッドの YAML 構成のリソース制限を確認します。

    kubectl get pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name" -o yaml
    
  2. 出力で、 resources セクションに制限が含まれていることを確認します。

    resources:
      limits:
        cpu: 250m
        memory: 250Mi
      requests:
        cpu: 10m
        memory: 20Mi
    

次のステップ

Azure Arc で有効になっている AKS の既知の問題