Ir para o conteúdo

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?

5 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:

  • \ --image-gc-high-threshold define a porcentagem de uso do disco em que o kubelet começa a executar a coleta de resíduos de imagem.
    Observação: o padrão para esse argumento é 85%.
  • \ --image-gc-low-threshold define a menor porcentagem de uso do disco em que o kubelet executa a coleta de resíduos de imagem do kubelet.
    Observação: o padrão para esse argumento é 80%.

Com base no seu caso de uso, adicione a coleta de resíduos do kubelet ao arquivo de configuração padrão ou a um nó 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 Imagens de Máquina da Amazon (Amazon Machine Images, AMIs) do Linux que são otimizadas para o Amazon EKS.

Adicione os argumentos de coleta de resíduos do kubelet à configuração padrão do kubelet

Conclua as seguintes etapas:

  1. Para atualizar o arquivo kubelet-config na AMI, execute o seguinte comando:
    #!/bin/bashset -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, substitua kubelet-config.json pelo nome do seu arquivo. O comando anterior define imageGCHighThresholdPercent como 70% e imageGCLowThresholdPercent como 60%. Como resultado, o kubelet limpa o cache de imagem no nó de processamento quando o uso do disco atinge 70%. Se o uso do disco for inferior a 60%, o kubelet não limpará o cache da imagem.
  2. Crie um grupo de nós de processamento com o modelo de inicialização.

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

Pré-requisitos: Você deve ter acesso à conexão SSH a um nó de processamento existente e ter acesso ao sudo.

Para adicionar argumentos de coleta de resíduos do kubelet a um nó de processamento existente, conclua as seguintes etapas:

  1. Use SSH para se conectar a um nó de processamento existente.

  2. Para abrir o arquivo /etc/kubernetes/kubelet/kubelet-config.json em seus nós de processamento, execute o seguinte comando:

    sudo vi /etc/kubernetes/kubelet/kubelet-config.json

    Se você iniciou o nó de processamento com eksctl, execute o seguinte comando para abrir /etc/eksctl/kubelet.yaml:

    sudo vi /etc/eksctl/kubelet.yaml
  3. Adicione os argumentos de coleta de resíduos do kubelet ao arquivo kubelet-config.json e salve o arquivo. Arquivo de exemplo:

    {  "kind": "KubeletConfiguration",  "apiVersion": "kubelet.config.k8s.io/v1beta1",
      .
      .
      .
      "imageGCHighThresholdPercent": 70,         ==> Add the argument under the same alignment as the "kind"
      "imageGCLowThresholdPercent": 60,
      "maxPods": ...
    }

    Observação: o comando anterior define imageGCHighThresholdPercent como 70% e imageGCLowThresholdPercent como 60%.
    Se você iniciou o nó de processamento com eksctl, adicione os argumentos de coleta de resíduos do kubelet ao arquivo kubelet.yaml e salve o arquivo. Arquivo de exemplo:

    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

    Observação: o comando anterior define imageGCHighThresholdPercent como 70% e imageGCLowThresholdPercent como 60%.

  4. Para reiniciar o serviço kubelet no nó de processamento, execute o seguinte comando:

    sudo service kubelet restart
  5. Repita as etapas de resolução anteriores para cada nó de processamento existente em seu cluster Amazon EKS.

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

Conclua as seguintes etapas:

  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 o nó configz, abra um novo terminal e 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ó. Se você não conseguir usar curl ou Python, abra o URL http://localhost:8001/api/v1/nodes/node_name/proxy/configz em um navegador da web.
    Exemplo de saída:

    {"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
      .
      .
    }
    }

    Observação: a saída do comando anterior mostra suas configurações para o arquivo bootstrap.sh do kubeletconfig.

AWS OFICIALAtualizada há 5 meses