Namespaces do Kubernetes, cota de recursos e limites para QoS no cluster

Kubernetes Logo

Por padrão, todos os recursos no cluster do Kubernetes são criados em um namespace padrão. Um pod será executado com solicitações/limites ilimitados de CPU e memória. A Espaço de nomes do Kubernetes permite particionar os recursos criados em um grupo logicamente nomeado. Cada namespace fornece:

  • um escopo exclusivo para recursos a fim de evitar colisões de nomes
  • políticaspara garantir a autoridade adequada aos usuários confiáveis
  • capacidade de especificar restrições para o consumo de recursos

Isso permite que um cluster Kubernetes compartilhe recursos por vários grupos e forneça diferentes níveis de QoS para cada grupo. Os recursos criados em um namespace ficam ocultos de outros namespaces. Vários namespaces podem ser criados, cada um potencialmente com restrições diferentes.

Namespace padrão do Kubernetes

Por padrão, cada recurso criado pelo usuário no cluster do Kubernetes é executado em um namespace padrão, chamado padrão.

Qualquer pod, serviço ou controlador de replicação será criado nesse namespace. sistema kube é reservado para recursos criados pelo cluster do Kubernetes. Mais detalhes sobre o namespace podem ser vistos:

Essa descrição mostra a cota de recursos (se houver), bem como os intervalos de limites de recursos. Portanto, vamos criar um controlador de replicação do Couchbase como:

Verifique o controlador de replicação existente:

Por padrão, somente os recursos no namespace do usuário são mostrados. Os recursos em todos os namespaces podem ser mostrados usando --todos os espaços de nome opção:

Como você pode ver, o arungupta/couchbase A imagem é executada no padrão namespace. Todos os outros recursos são executados no namespace sistema kube namespace. Vamos verificar o contexto desse controlador de replicação:

Procure por contexts.context.name para ver o contexto existente. Isso será manipulado posteriormente.

Criar um recurso em um novo espaço de nomes do Kubernetes

Primeiro, vamos criar um novo namespace. Isso pode ser feito usando o seguinte arquivo de configuração:

O espaço de nome é criado como:

Em seguida, a consulta de todos os namespaces fornece:

Um novo controlador de replicação pode ser criado nesse novo namespace usando --namespace opção:

A lista de recursos em todos os namespaces é semelhante:

Como visto, há dois controladores de replicação com arungupta/couchbase imagem - uma em padrão e outro no namespace desenvolvimento namespace.

Definir o espaço de nome do Kubernetes para um recurso existente

Se um recurso já tiver sido criado, poderá ser atribuído a ele um namespace. Em um recurso criado anteriormente, um novo contexto pode ser definido no namespace:

A visualização do contexto agora mostra:

O segundo atributo em contextos.contexto mostra que um novo contexto foi criado. Ele também mostra que o contexto atual ainda é couchbase-em-kubernetes_kubernetes. Como nenhum namespace é especificado nesse contexto, ele pertence ao namespace padrão. Altere o contexto:

Consulte a lista de controladores de replicação:

Obviamente, nenhum controlador de replicação está em execução nesse contexto. Vamos criar um novo controlador de replicação nesse novo namespace:

E veja a lista de controladores de replicação em todos os namespaces:

Agora você pode ver dois arungupta/couchbase controladores de replicação em execução em dois namespaces diferentes.

Excluir um recurso do Kubernetes no namespace

Um recurso pode ser excluído por meio da qualificação completa do nome do recurso:

Da mesma forma, o outro controlador de replicação pode ser excluído como:

Por fim, veja a lista de todos os controladores de replicação em todos os namespaces:

Isso confirma que todos os controladores de replicação criados pelo usuário foram excluídos.

Cota e limite de recursos usando o espaço de nomes do Kubernetes

A cada namespace pode ser atribuída uma cota de recursos. Por padrão, um pod será executado com solicitações/limites ilimitados de CPU e memória. Especificar a cota permite restringir a quantidade de recursos do cluster que pode ser consumida por todos os pods em um namespace. A cota de recursos pode ser especificada usando um arquivo de configuração:

Os recursos a seguir são compatíveis com o sistema de cotas:

Recursos Descrição
CPU Uso total da cpu solicitada
memória Uso total da memória solicitada
cápsulas Número total de pods ativos em que a fase está pendente ou ativa.
serviços Número total de serviços
controladores de replicação Número total de controladores de replicação
recursosquotas Número total de cotas de recursos
segredos Número total de segredos
reivindicações de volume persistente Número total de reclamações de volume persistente

Essa cota de recursos pode ser criada em um namespace:

A cota criada pode ser vista como:

Agora, se você tentar criar o controlador de replicação, isso funcionará:

Mas a descrição da cota mostra novamente:

Esperávamos que um novo pod fosse criado como parte desse controlador de replicação, mas ele não está lá. Portanto, vamos descrever nosso controlador de replicação:

Por padrão, o pod consome toda a CPU e a memória disponíveis. Com cotas de recursos aplicadas, um valor explícito deve ser especificado. Como alternativa, um valor padrão para o pod pode ser especificado usando o seguinte arquivo de configuração:

Isso restringe a CPU e a memória que podem ser consumidas por um pod. Vamos aplicar esses limites como:

Agora, quando você descreve o controlador de replicação novamente, ele é exibido:

Isso mostra que a criação do pod foi bem-sucedida. E agora, quando você descreve a cota, ela também mostra os valores corretos:

Cota de recursos fornecem mais detalhes sobre como definir/atualizar esses valores. A criação de outra cota apresenta o seguinte erro:

Especificação de limites durante a criação de pods

Os limites também podem ser especificados durante a criação do pod: Se o limite de memória para cada pod for restrito a 1g, uma definição de pod válida seria:

Isso ocorre porque o pod solicita apenas 0,5 G de memória. E uma definição de pod inválida seria:

Isso ocorre porque o pod solicita 2G de memória. A criação desse pod apresenta o seguinte erro:

Espero que você possa aplicar namespaces, cotas de recursos e limites para compartilhar seus clusters em diferentes ambientes.

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Arun Gupta, vice-presidente de defesa do desenvolvedor, Couchbase

Arun Gupta é o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experiência na liderança de equipes multifuncionais para desenvolver e executar estratégias, planejamento e execução de conteúdo, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e é membro fundador da equipe Java EE. Gupta é autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experiência em palestras em mais de 40 países sobre diversos tópicos e é um JavaOne Rock Star há três anos consecutivos. Gupta também fundou o capítulo Devoxx4Kids nos EUA e continua a promover a educação tecnológica entre as crianças. Autor de vários livros sobre tecnologia, corredor ávido, viajante do mundo inteiro, campeão de Java, líder de JUG, membro do NetBeans Dream Team e capitão do Docker, ele pode ser facilmente acessado em @arungupta.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.