Configuração de especificações do contêiner
Cenário
O CCE permite que você defina requisitos e limites de recursos, como CPU e RAM, para contêineres adicionados durante a criação da carga de trabalho. O Kubernetes também permite o uso do YAML para definir requisitos de outros tipos de recursos.
Solicitação e limite
- Request: o sistema programa um pod para o nó que atende aos requisitos de implementação de carga de trabalho com base no valor da solicitação.
- Limit: o sistema limita os recursos utilizados pela carga de trabalho com base no valor de limite.
Se um nó tiver recursos suficientes, o pod nesse nó poderá usar mais recursos do que o solicitado, mas não mais do que limitado.
Por exemplo, se você definir a solicitação de memória de um contêiner para 1 GiB e o valor de limite para 2 GiB, um pod será programado para um nó com CPUs de 8 GiB sem nenhum outro pod em execução. Nesse caso, o pod pode usar mais de 1 GiB de memória quando a carga é pesada, mas o uso da memória não pode exceder 2 GiB. Se um processo em um contêiner tentar usar mais de 2 GiB de recursos, o kernel do sistema tentará encerrar o processo. Como resultado, ocorre um erro de falta de memória (OOM).
Ao criar uma carga de trabalho, é aconselhável definir os limites superior e inferior dos recursos de CPU e memória. Se os limites de recursos superior e inferior não estiverem definidos para uma carga de trabalho, um vazamento de recursos dessa carga de trabalho tornará os recursos indisponíveis para outras cargas de trabalho implementadas no mesmo nó. Além disso, as cargas de trabalho que não possuem limites de recursos superiores e inferiores não podem ser monitoradas com precisão.
Descrição da configuração
Em cenários do mundo real, a proporção recomendada de Request para Limit é de cerca de 1:1,5. Para alguns serviços sensíveis, a proporção recomendada é de 1:1. Se a Request for muito pequena e o Limit for muito grande, os recursos de nó serão inscritos em excesso. Durante os picos de serviço, a memória ou a CPU de um nó podem ser usadas. Como resultado, o nó está indisponível.
- CPU quota: a unidade de recursos da CPU é o núcleo, que pode ser expresso por quantidade ou um inteiro com sufixo com a unidade (m). Por exemplo, 0,1 núcleo na expressão de quantidade é equivalente a 100m na expressão. No entanto, o Kubernetes não permite recursos de CPU cuja precisão seja inferior a 1m.
Tabela 1 Descrição das cotas de CPU Parâmetro
Descrição
CPU request
Número mínimo de núcleos de CPU exigidos por um contêiner. Os recursos são agendados para o contêiner com base nesse valor. O contêiner pode ser programado para esse nó somente quando a CPU total disponível no nó for maior ou igual ao número de aplicações de CPU em contêiner.
CPU limit
Número máximo de núcleos de CPU disponíveis para um contêiner.
Configuração recomendada
CPU atual disponível de um nó ≥ soma dos limites de CPU de todos os contêineres no nó atual ≥ soma das solicitações de CPU de todos os contêineres no nó atual. Você pode ver as CPUs disponíveis reais de um nó no console do CCE (Resource Management > Nodes > Allocatable).
- Memory quota: a unidade padrão de recursos de memória é byte. Você também pode usar um inteiro com o sufixo unitário, por exemplo, 100 Mi. Observe que a unidade faz distinção entre maiúsculas e minúsculas.
Tabela 2 Descrição das cotas de memória Parâmetro
Descrição
Memory request
Quantidade mínima de memória exigida por um contêiner. Os recursos são agendados para o contêiner com base nesse valor. O contêiner pode ser agendado para esse nó somente quando a memória total disponível no nó for maior ou igual ao número de aplicativos de memória em contêiner.
Memory Limit
Quantidade máxima de memória disponível para um contêiner. Quando o uso de memória excede o limite de memória configurado, a instância pode ser reiniciada, o que afeta o uso normal da carga de trabalho.
Configuração recomendada
Memória disponível real de um nó ≥ soma dos limites de memória de todos os contêineres no nó atual ≥ soma das solicitações de memória de todos os contêineres no nó atual. Você pode ver a memória disponível real de um nó no console do CCE (Resource Management > Nodes > Allocatable).
Os recursos alocáveis são calculados com base no valor da solicitação de recurso (Request), que indica o limite superior de recursos que podem ser solicitados por pods neste nó, mas não indica os recursos reais disponíveis do nó (para obter detalhes, consulte Exemplo de uso de cota de CPU e memória). A fórmula de cálculo é a seguinte:
- CPU alocável = CPU total – CPU solicitada de todos os pods – CPU reservada para outros recursos
- Memória alocável = memória total – memória solicitada de todos os pods – memória reservada para outros recursos
Exemplo de uso de cota de CPU e memória
Suponha que um cluster contém um nó com 4 núcleos de CPU e 8 GiB de memória. Dois pods (pod 1 e pod 2) foram implementados no cluster. O pod 1 com excesso de assinaturas de recursos (ou seja, Limit > Request). As especificações dos dois pods são as seguintes.
Pod |
Solicitação de CPU |
Limite de CPU |
Solicitação de memória |
Limite de memória |
---|---|---|---|---|
Pod 1 |
1 núcleo |
2 núcleos |
1 GiB |
4 GiB |
Pod 2 |
2 núcleos |
2 núcleos |
2 GiB |
2 GiB |
O uso de CPU e memória do nó é o seguinte:
- CPUs alocáveis = 4 núcleos – (1 núcleo solicitado pelo pod 1 + 2 núcleos solicitados pelo pod 2) = 1 núcleo
- Memória alocável = 8 GiB – (1 GiB solicitado pelo pod 1 + 2 GiB solicitado pelo pod 2) = 5 GiB
Nesse caso, o 1 núcleo restante de 5 GiB pode ser usado pelo próximo novo pod.
Se o pod 1 estiver sob carga pesada durante as horas de pico, ele usará mais CPUs e memória dentro do limite. Portanto, os recursos reais alocáveis são menos de 1 núcleo de 5 GiB.