Como configuro os nós de processamento do Amazon EKS para limpar o cache de imagem em uma porcentagem específica de uso do disco?

4 minuto de leitura
0

Quero usar os nós de processamento do Amazon Elastic Kubernetes Service (Amazon EKS) para limpar o cache de imagem em uma porcentagem específica de uso do disco.

Breve descrição

Para limpar o cache de imagem com os nós de processamento do Amazon EKS, use os seguintes argumentos de coleta de resíduos do kubelet:

  • O argumento**--image-gc-high-threshold** define a porcentagem de uso do disco que inicia a coleta de resíduos de imagens. O padrão é 85%.
  • O argumento**--image-gc-low-threshold** define o valor LowThresholdPercent. O kubelet exclui imagens até que o uso do disco atinja esse valor. O padrão é 50%.

Observação: na resolução a seguir, os argumentos de coleta de resíduos do kubelet limpam o cache da imagem no nó de processamento quando o uso do disco atinge 70%. O limite --image-gc-high-threshold está definido como 70%. O limite --image-gc-low-threshold está definido como 50%.

Com base no seu caso de uso, siga as etapas de resolução para adicionar a coleta de resíduos do kubelet ao arquivo de configuração padrão ou a um bode existente. Em seguida, verifique se os argumentos existem no endpoint do nó.

Para obter mais informações, consulte Garbage collection of unused containers and images no site do Kubernetes.

Resolução

Observação: a resolução a seguir se aplica às AMIs Linux otimizadas para o Amazon EKS.

Adicione os argumentos de coleta de resíduos do kubelet ao kubelet-config padrão

Use o recurso Custom Launch Template do Amazon EKS para adicionar os argumentos de coleta de resíduos do kubelet ao arquivo kubelet-config padrão na imagem de máquina da Amazon (AMI). Ao criar o modelo de execução, especifique argumentos em UserData.

  1. O comando a seguir atualiza o arquivo KUBELET_CONFIG na AMI. Ele define imageGCHighThresholdPercent=70 e imageGCLowThresholdPercent=60. Para obter mais informações, consulte Configurar detalhes da instância.
    #!/bin/bash
    set -o xtrace
    
    KUBELET_CONFIG=/etc/kubernetes/kubelet/kubelet-config.json
    
    # Inject imageGCHighThresholdPercent value unless it has already been set.
    if ! grep -q imageGCHighThresholdPercent $KUBELET_CONFIG;
    then
    echo "$(jq ".imageGCHighThresholdPercent=70" $KUBELET_CONFIG)" > $KUBELET_CONFIG
    fi
    
    # Inject imageGCLowThresholdPercent value unless it has already been set.
    if ! grep -q imageGCLowThresholdPercent $KUBELET_CONFIG;
    then
    echo "$(jq ".imageGCLowThresholdPercent=60" $KUBELET_CONFIG)" > $KUBELET_CONFIG
    fi
    
    /etc/eks/bootstrap.sh your-cluster-name
    Observação: substitua your-cluster-name pelo nome do seu cluster do Amazon EKS. Se você não usar o arquivo de configuração padrão do kubelet, atualize o nome do arquivo.
  2. Crie um grupo de nós de processamento com o modelo de lançamento.

Adicione os argumentos de coleta de resíduos do kubelet a um nó de processamento existente

Importante: as etapas a seguir exigem que você se conecte a um nó de processamento existente com SSH e tenha acesso ao sudo. Você deve concluir essas etapas em todos os nós de processamento existentes em seu cluster do Amazon EKS.

  1. Conecte-se a um nó de processamento existente usando SSH.

  2. Abra o arquivo ** ** /etc/kubernetes/kubelet/kubelet-config.json em seus nós de processamento. Se você iniciou o nó de processamento com EKSCTL, abra /etc/eksctl/kubelet.yaml:

    sudo vi /etc/kubernetes/kubelet/kubelet-config.json
    #WORKER NODES LAUNCHED USING EKSCTL
    
    sudo vi /etc/eksctl/kubelet.yaml
  3. Com base em como você iniciou seus nós de processamento, adicione os argumentos de coleta de resíduos do kubelet ao arquivo kubelet-config.json ou kubelet.yaml. Em seguida, salve o arquivo:

    {  "kind": "KubeletConfiguration",
      "apiVersion": "kubelet.config.k8s.io/v1beta1",
      .
      .
      .
      "imageGCHighThresholdPercent": 70,         ==> Add the argument under the same alignment as the "kind"
      "imageGCLowThresholdPercent": 60,
      "maxPods": ...
    }
    
    
    #WORKER NODES LAUNCHED USING EKSCTL
    
    kind: KubeletConfiguration
    kubeReserved:
      cpu: 70m
      ephemeral-storage: 1Gi
      memory: 1843Mi
    serverTLSBootstrap: true
    imageGCHighThresholdPercent: 70        ==> Add the arguments under the alignment "Kind" in the yaml file
    imageGCLowThresholdPercent: 60
  4. Para reiniciar o serviço kubelet no nó de processamento, execute o seguinte comando:

    sudo service kubelet restart

Verifique se os novos argumentos de coleta de resíduos do kubelet estão no endpoint configz do nó

  1. Para obter o nome dos seus nós de processamento, execute o seguinte comando:

    kubectl get nodes
  2. Para abrir uma conexão com o servidor da API, execute o seguinte comando:

    kubectl proxy
  3. Para verificar as configurações do nó, abra um novo terminal. Em seguida, execute o seguinte comando:

    curl -sSL "http://localhost:8001/api/v1/nodes/node_name/proxy/configz" | python3 -m json.tool

    Observação: substitua node_name pelo nome do seu nó na lista de nós que você recuperou anteriormente. Se cURL e Python não estiverem disponíveis, abra o URL em um navegador da Web.

    Esse comando retorna a saída de kubeletconfig. Essa saída inclui suas configurações do arquivo bootstrap.sh. Veja o exemplo a seguir:

    {"kubeletconfig": {
      .
      .
      "imageGCHighThresholdPercent": 70,          <=== The new value is set to 70 as given in UserData
      "imageGCLowThresholdPercent": 60,           <=== The new value is set to 50 as given in UserData
      .
      .
    }
    }
AWS OFICIAL
AWS OFICIALAtualizada há 2 meses