Header Ads

Como definir limites de recursos do pod do Kubernetes

Definir limites de recursos em seus pods do Kubernetes evita que um contêiner errático afete outras cargas de trabalho. O Kubernetes permite limitar os recursos, incluindo CPU e consumo de memória. Os pods podem ser encerrados quando seus limites são excedidos, mantendo a estabilidade geral do cluster.

Unidades de recursos

Antes de definir limites, é importante notar como o Kubernetes expressa a disponibilidade de recursos.

O consumo de CPU é medido em termos de vCPUs usadas. Um limite de 0,5 vCPUs indica que o pod pode consumir metade do tempo disponível de uma das vCPUs disponíveis. Uma vCPU é o que você verá anunciado nos provedores de nuvem &’ páginas de hospedagem. Ao usar hardware bare-metal, é um hyperthread no seu processador.

A memória é medida em bytes. Você pode especificá-lo como um número inteiro de bytes ou como uma quantidade mais amigável, como 512 Mi ou 1 Gi.

Criação de um limite de CPU

Para adicionar um limite de CPU a contêineres de pod, inclua o campo resources: limits no manifesto de seu contêiner:

apiVersion: v1 kind: Pod metadata: name: demo namespace: demo spec: containers: - name: my-container image: example / example resources: limits: cpu: " 0,5 "

O exemplo acima limitará seus contêineres a 0,5 vCPUs. Eles serão limitados para que não consumam mais da metade do tempo de CPU disponível em um período de 100 ms.

Criando um limite de memória

Os limites de memória são criados de maneira semelhante. Altere os limites: campo cpu no manifesto para limites: memória:

limites: memória: " 512Mi "

O contêiner será limitado a 512 Mi de RAM. O Kubernetes ainda permitirá que ele acesse mais se o nó que está programado tiver capacidade excedente. Caso contrário, exceder o limite fará com que o contêiner seja marcado como candidato para rescisão.

Limites de armazenamento

Todos os nós do Kubernetes têm uma quantidade de armazenamento efêmero disponível. Esse armazenamento é usado por pods para armazenar caches e logs. O pool de armazenamento efêmero também é onde o cluster Kubernetes mantém as imagens de contêiner.

Você pode definir limites para o uso de armazenamento temporário de um pod. Este é um recurso beta destinado a garantir que o cache de um único pod não consuma todo o pool de armazenamento. Use os limites: campo de manifesto do contêiner de armazenamento efêmero:

Limites de

: armazenamento efêmero: " 1Gi "

Este contêiner agora seria limitado ao uso de 1Gi do armazenamento efêmero disponível. Os pods que tentam usar mais armazenamento serão despejados. Quando há vários contêineres em um pod, o pod é despejado se a soma do uso de armazenamento de todos os contêineres exceder o limite de armazenamento geral.

O Kubernetes geralmente rastreia o uso de armazenamento verificando periodicamente o sistema de arquivos de armazenamento efêmero do nó. Em seguida, ele soma o uso de armazenamento de cada pod e contêiner. Há suporte opcional para cotas de armazenamento de sistema de arquivos no nível do sistema operacional, que permitem um monitoramento mais preciso.

Você precisará de um sistema de arquivos compatível com cotas de projeto, como XFS ou ext4. Certifique-se de que o sistema de arquivos esteja montado com o rastreamento de cota do projeto habilitado e, em seguida, habilite o sinalizador de recurso LocalStorageCapacityIsolationFSQuotaMonitoring no kubelet. A orientação sobre a configuração deste sistema é fornecida na documentação do Kubernetes.

Solicitações de recursos

Além dos limites de recursos, você pode definir solicitações de recursos. Eles estão disponíveis para CPU, memória e armazenamento efêmero — altere o campo de limites para solicitações em cada um dos exemplos mostrados acima.

Definir uma solicitação de recurso indica a quantidade desse recurso que você espera que o contêiner use. O Kubernetes leva essas informações em consideração ao determinar para qual nó agendar o pod.

Usando a memória como exemplo, uma solicitação de 512 Mi resultará no pod sendo agendado para um nó com pelo menos 512 Mi de memória disponível. A disponibilidade é calculada somando as solicitações de memória de todos os pods existentes no nó e subtraindo isso da capacidade total de memória do nó.

Um nó será inelegível para hospedar um novo contêiner se a soma das solicitações de carga de trabalho, incluindo a solicitação do novo contêiner, exceder a capacidade disponível. Este continua sendo o caso mesmo que o uso da memória em tempo real seja realmente muito baixo. A capacidade disponível já foi alocada para os contêineres existentes para garantir que suas solicitações possam ser atendidas.

Ao contrário de um limite, o Kubernetes sempre permite que os contêineres excedam sua solicitação de recurso. Eles podem consumir qualquer quantidade de recursos não utilizados que outros contêineres solicitaram, mas não estão usando atualmente.

Usando solicitações e limites

Os diferentes comportamentos de solicitações e limites significam que você deve considerar cuidadosamente os valores que usa. Normalmente, é melhor manter as solicitações baixas. Em seguida, você define os limites o mais alto possível sem afetar suas cargas de trabalho &’ capacidade de coexistir.

Usar um valor baixo de solicitação de recurso oferece aos seus pods a melhor chance de serem programados para um nó. O agendador tem mais flexibilidade ao tomar decisões de alocação, pois é mais provável que qualquer nó seja capaz de hospedar o contêiner. O contêiner terá acesso imediato a todos os recursos excedentes de que precisar, além da solicitação, até o limite especificado.

Cada solicitação e limite precisa ser equilibrado para obter o melhor efeito. Você deve observar as solicitações e limites dos outros pods em execução no seu cluster. Certifique-se de estar ciente das quantidades totais de recursos fornecidas por seus nós para que você não defina limites que sejam muito altos (arriscando a estabilidade) ou muito baixos (um desperdício de capacidade).

Conclusão

Você deve sempre configurar limites de recursos para suas cargas de trabalho do Kubernetes. O uso eficaz de limites ajuda as cargas de trabalho a coexistirem pacificamente, sem arriscar a saúde do seu cluster.

Isso é particularmente importante no caso da memória. Sem limites, um contêiner com um processo errante pode consumir rapidamente toda a memória oferecida por seu nó. Esse cenário de falta de memória pode derrubar outros pods programados para esse nó, já que o gerenciador de memória no nível do sistema operacional começaria a eliminar processos para reduzir o uso de memória.

Definir um limite de memória permite que o Kubernetes encerre o contêiner antes que ele comece a impactar outras cargas de trabalho no cluster, quanto mais processos externos. Você perde sua carga de trabalho, mas o cluster geral ganha maior estabilidade.

Nenhum comentário