Namespace Kubernetes

O que é e como criar Namespace no Kubernetes

Dando continuidade aos nossos posts sobre Kubernetes, vamos falar sobre Namespace.

Esse recurso do Kubernetes pode ser utilizado de diversas formas. Algumas pessoas criam namespaces para separar ambientes dentro de um mesmo cluster, enquanto outras preferem criar namespaces para cada time ou produto que a empresa tem.

Definindo Namespace

Independente do propósito, a finalidade dos namespaces sempre será a mesma, particionar o cluster em subdivisões lógicas.

Para ajudar com a imagem mental, imagine que namespaces são como pastas do seu computador, onde você pode definir qualquer divisão que quiser. No entanto, diferente de pastas, onde você consegue colocar uma dentro da outra, no caso dos namespaces, não existem “sub-namespaces”.

A primeira vez que li sobre namespaces, imaginei que pudesse utilizá-los para separar as aplicações “fisicamente” em nodes específicos. Acontece que eu estava MUITO ENGANADO! Namespaces não tem essa função. Para isso existem outras estratégias, como por exemplo NodeAffinity, mas vamos deixar esse assunto para outro post.

De volta aos namespaces, embora a primeira vista eles possam parecer um tanto quanto desnecessários, eu posso te assegurar que não são.

Vamos ver o motivo.

Exemplo de aplicação

Vamos pegar o primeiro exemplo, onde utilizamos os namespaces para separar ambientes dentro de um mesmo cluster.

Sem namespaces, para ter duas versões da mesma aplicação sendo executada no mesmo cluster, você precisaria colocar nomes diferentes em cada uma das versões, como por exemplo, um prefixo que identifica se uma versão é de homologação ou de produção.

Essa “nomenclatura especial” teria que ser feita não só na aplicação, mas também no Service, Ingress, Secret, ConfigMap… ou seja, em todos os recursos que a aplicação necessita para existir.

Complexo não?!

Agora, ao utilizar Namespace, nada disso precisa ser feito. Isso por que, voltando ao comparativo das pastas, cada versão da sua aplicação “mora” em uma pasta diferente, ou seja, não há conflitos de nomes, portas, recursos e etc.

Dependendo do tamanho da empresa, faz mais sentido ter um cluster por ambiente e utilizar namespaces para criar uma separação entre os produtos.

Embora essa separação não vá isolar recursos, ela dá a liberdade para os times na hora de nomear suas aplicações, além de facilitar o entendimento de algumas dependências da aplicação, assim como implementar um controle de acesso aos recursos através de RBAC (sim, tema para outro post também).

Como criar um Namespace

Para criar um namespace, basta executar o comando kubectl create ns NOME_DO_NAMESPACE, ou aplicar o manifesto abaixo com um kubectl apply -f NOME-DO-ARQUIVO.yaml.

apiVersion: v1
kind: Namespace
metadata:
	name: NOME_DO_NAMESPACE

Num próximo post sobre namespaces, vou explicar como podemos limitar quantidade de pods, cpu e memória por Namespace.

Enquanto isso, convido você a ler o primeiro post dessa série sobre Kubernetes. Nele, explico a diferença entre Deployment, StatefulSet e DaemonSet.

Não deixe de assinar nossa newsletter para receber posts sobre Kubernetes e Go.

Até a próxima!


Se inscreva na nossa newsletter

* indicates required

Deixe uma resposta