Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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-systemnamespace. 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
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 yamlNa saída, verifique se a
resourcesseção inclui os limites:resources: limits: cpu: 250m memory: 250Mi requests: cpu: 10m memory: 20Mi