Intervalos de limite
Por padrão, os cointêineres são executados com recursos computacionais ilimitados em um cluster Kubernetes. Com cotas de recursos, os administradores de cluster podem restringir o consumo e a criação de recursos baseado no namespace. Dentro de um namespace, pod ou contêiner pode haver o consumo de quantidade de CPU e memória definidos de acordo com a cota de recursos do namespace. Existe a preocupação de que um Pod ou contêiner possa monopolizar todos os recursos disponíveis, justamente por conta disso existe o conceito de Limit Range, ou intervalos de limite, que pode ser definido como uma política utilizada para a restrição de alocação de recursos (para pods ou contêineres) em um namespace.
Um LimitRange fornece restrições que podem:
- Aplicar o uso mínimo e máximo de recursos computacionais por pod ou contêiner em um namespace.
- Impor a solicitação de armazenamento mínimo e máximo por PersistentVolumeClaim em um namespace.
- Impor a proporção entre solicitação e limite para um recurso em um namespace.
- Definir a solicitação/limite padrão para recursos computacionais em um namespace e utilizá-los automaticamente nos contêineres em tempo de execução.
Ativando o LimitRange
O suporte ao LimitRange foi ativado por padrão desde o Kubernetes 1.10.
Um LimitRange é aplicado em um namespace específico quando há um objeto LimitRange nesse namespace.
O nome de um objeto LimitRange deve ser um nome de subdomínio DNS válido.
Visão geral do Limit Range
- O administrador cria um LimitRange em um namespace.
- Os usuários criam recursos como pods, contêineres e PersistentVolumeClaims no namespace.
- O controlador de admissão
LimitRanger
impõe padrões e limites para todos os pods e contêineres que não definem os requisitos de recursos computacionais e rastreia o uso para garantir que não exceda o mínimo, o máximo e a proporção de recursos definidos em qualquer LimitRange presente no namespace. - Se estiver criando ou atualizando um recurso (Pod, Container, PersistentVolumeClaim) que viola uma restrição LimitRange, a solicitação ao servidor da API falhará com um código de status HTTP
403 FORBIDDEN
e uma mensagem explicando a restrição violada. - Se um LimitRange for ativado em um namespace para recursos computacionais como
cpu
ememória
, os usuários deverão especificar solicitações ou limites para esses valores. Caso contrário, o sistema pode rejeitar a criação do pod. - As validações de LimitRange ocorrem apenas no estágio de Admissão de Pod, não em Pods em Execução.
Alguns exemplos de políticas que podem ser criadas utilizando os intervalos de limite são:
- Em um cluster de 2 nós com capacidade de 8 GiB de RAM e 16 núcleos, restrinja os Pods em um namespace para solicitar 100m de CPU com um limite máximo de 500m para CPU e solicitar 200Mi para memória com um limite máximo de 600Mi para memória.
- Defina o limite e a solicitação de CPU padrão para 150m e a solicitação padrão de memória para 300Mi para contêineres iniciados sem solicitações de CPU e memória em suas especificações.
Caso os limites totais do namespace sejam menores que a soma dos limites dos Pods/Contêineres, pode haver contenção por recursos. Nesse caso, os contêineres ou Pods não serão criados.
Nem a contenção nem as alterações em um LimitRange afetarão os recursos já criados.
Próximos passos
Consulte o documento de design LimitRanger para obter mais informações.
Para exemplos de uso de limites, leia:
- Como configurar restrições mínimas e máximas de CPU por namespace.
- Como configurar restrições de memória mínima e máxima por namespace.
- como configurar solicitações e limites de CPU padrão por namespace.
- como configurar solicitações e limites de memória padrão por namespace.
- como configurar o consumo mínimo e máximo de armazenamento por namespace.
- Um exemplo detalhado de configuração de cota por namespace.