Skip to main content

Namespaces | Kubernetes

  • Namespaces | Kubernetes

O que é um Namespace?

Um namespace no Kubernetes é uma forma de organizar e isolar recursos dentro de um cluster. Ele funciona como um "espaço lógico" onde objetos como pods, serviços e deployments são agrupados.

Namespaces permitem separar ambientes, equipes, projetos e garantir boas práticas de segurança e governança.


Por que usar Namespaces?

Namespaces são especialmente úteis em cenários como:

  • ✔️ Múltiplas equipes usando o mesmo cluster
  • ✔️ Separação entre ambientes (dev, stage, prod)
  • ✔️ Aplicação de políticas diferentes via RBAC e NetworkPolicies
  • ✔️ Evitar conflitos de nomes entre aplicações

Em resumo: namespaces trazem organização, controle e segurança.


Namespaces padrão do Kubernetes

Ao instalar um cluster, estes namespaces já existem:

default

Onde recursos são criados caso nenhum namespace seja especificado.

kube-system

Componentes internos do Kubernetes (kube-dns, kube-proxy, etc).

kube-public

Recursos públicos para todos os usuários.

kube-node-lease

Usado para heartbeats dos nodes.


Principais Comandos

🔍 Listar namespaces

kubectl get namespaces

Criar um namespace

kubectl create namespace <nome>

Ou via YAML:

apiVersion: v1
kind: Namespace
metadata:
name: meu-namespace

🗑️ Excluir um namespace

kubectl delete namespace <nome>

📌 Definir um namespace em um comando kubectl

kubectl get pods -n <namespace>

Definir namespace padrão para o contexto atual

kubectl config set-context --current --namespace=<nome>

Trabalhando com Namespaces

➜ Criar um deployment dentro de um namespace específico

kubectl create deployment web --image=nginx -n dev

➜ Ver todos os recursos de um namespace

kubectl get all -n observability

➜ Descrever um namespace

kubectl describe namespace <nome>

Isolamento com Namespaces

Além da organização, namespaces também ajudam a implementar:

RBAC (controle de acesso)

Permite definir quais usuários podem atuar em quais namespaces.

Network Policies

Controlam o tráfego entre pods em namespaces distintos.

Quotas e Limits

Permitem limitar CPU, memória e quantidade de recursos usados em um namespace.

Exemplo:

apiVersion: v1
kind: ResourceQuota
metadata:
name: quota-padrao
namespace: dev
spec:
hard:
pods: "10"
requests.cpu: "4"
limits.cpu: "8"

Boas Práticas

  • Nomeie namespaces de forma clara: dev, stage, prod, security, observability.
  • Aplique quotas para evitar uso exagerado de recursos.
  • Use namespaces para separar workloads sensíveis.
  • Combine namespaces com contextos para ganhar agilidade.
  • Evite criar muitos namespaces sem necessidade (cada namespace tem overhead).

Referência Rápida

kubectl get ns
kubectl create ns <name>
kubectl delete ns <name>
kubectl get all -n <ns>
kubectl config set-context --current --namespace=<ns>