症状
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"
リソース制限が正しく適用されたかどうかを検証する
ポッドの YAML 構成のリソース制限を確認します。
kubectl get pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name" -o yaml出力で、
resourcesセクションに制限が含まれていることを確認します。resources: limits: cpu: 250m memory: 250Mi requests: cpu: 10m memory: 20Mi