Compartilhar via


Solucionar problemas em que o pod de telemetria AKS Arc consome muita memória e CPU

Sintomas

O pod de telemetria akshci num cluster AKS Arc pode, com o tempo, consumir uma quantidade significativa de recursos de CPU e memória. Se as métricas estiverem habilitadas, você poderá verificar o uso da CPU e da memória usando o seguinte kubectl comando:

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

Você pode ver uma saída semelhante a esta:

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

Atenuação

Esse problema foi corrigido no AKS no Azure Local, versão 2507. Atualize sua implantação do Azure Local para a compilação 2507.

Solução para versões anteriores à 2506 do Azure Local

Para resolver esse problema, defina limites de recursos padrão para os pods no kube-system namespace.

Observações importantes

  • Verifique se tem alguns pods no namespace kube-system que possam exigir mais memória do que o limite padrão. Em caso afirmativo, poderão ser necessários ajustamentos.
  • O LimitRange é aplicado ao namespace; nesse caso, o kube-system namespace. Os limites de recursos padrão também se aplicam a novos pods que não especificam seus próprios limites.
  • Os pods existentes, incluindo aqueles que já têm limites de recursos, não são afetados.
  • Novos pods que não especificam seus próprios limites de recursos são limitados pelos limites definidos na próxima seção.
  • Depois de definir os limites de recursos e excluir o pod de telemetria, o novo pod pode eventualmente atingir o limite de memória e gerar erros OOM (Out-Of-Memory ). Trata-se de uma atenuação temporária.

Para continuar com a definição dos limites de recursos, você pode executar o script a seguir. Enquanto o script usa az aksarc get-credentials, você também pode usar az connectedk8s proxy para obter o proxy kubeconfig e acessar o cluster Kubernetes.

Defina o LimitRange YAML para definir limites padrão de CPU e memória

# 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"

Validar se os limites de recursos foram aplicados corretamente

  1. Verifique os limites de recursos na configuração YAML do pod:

    kubectl get pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name" -o yaml
    
  2. Na saída, verifique se a resources seção inclui os limites:

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

Próximos passos

Problemas conhecidos no AKS ativado pelo Azure Arc