Os namespaces dividem um cluster compartilhado do Container Service for Kubernetes (ACK) em espaços de trabalho isolados, o que permite definir cotas de recursos, gerencie permissões e rastrear custos por equipe ou ambiente.
Namespaces
Em um cluster do ACK, os namespaces dividem os recursos do cluster em grupos isolados. Quando várias equipes compartilham um cluster, crie namespaces para classificar os recursos por equipe ou ambiente e, em seguida, use cotas de recursos para limitar o consumo de cada namespace.
Por padrão, os pods em execução podem consumir recursos ilimitados de CPU e memória nos nós. Os pods de um único namespace podem esgotar todos os recursos do cluster. Para evitar isso, configure cotas de recursos por namespace, incluindo CPU, memória e contagem de pods.
Exemplos de alocação: em um cluster com 32 GiB de RAM e 16 núcleos de CPU, aloque 20 GiB e 10 núcleos para a equipe A, 10 GiB e 4 núcleos para a equipe B e mantenha 2 GiB e 2 núcleos em reserva. Como alternativa, destine 1 núcleo e 1 GiB de RAM ao namespace testing e permita que o production use o restante.
Crie um namespace
Use o console do ACK
Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Namespaces and Quotas.
Clique em Create. Na caixa de diálogo exibida, configure o nome e o rótulo do namespace e clique em OK.
Use o kubectl
-
Crie um namespace.
kubectl create namespace test -
Verifique se o namespace foi criado.
kubectl get namespacesSaída esperada:
NAME STATUS AGE default Active 46h kube-node-lease Active 46h kube-public Active 46h kube-system Active 46h test Active 9sO namespace
testagora está ativo na lista.
Configure cotas e limites de recursos
Após configurar as cotas de CPU e memória (ResourceQuota) para um namespace, especifique limites de CPU e memória para os pods criados nesse namespace, a menos que os limites padrão de recursos (LimitRange) estejam configurados para o namespace.
Use o console do ACK
Na página Namespace, clique em Resource Quotas and Limits na coluna Actions do namespace de destino.
Na caixa de diálogo Resource Quotas and Limits, configure as cotas de recursos e os limites padrão de recursos. Para mais detalhes, consulte Cotas de recursos e Configurar solicitações e limites padrão de memória para um namespace.
Melhores práticas para modificar cotas
Modifique as cotas fora dos horários de pico. Verifique o uso de recursos das cargas de trabalho existentes antes de fazer alterações.
Reserve recursos suficientes para o dimensionamento automático do Horizontal Pod Autoscaler (HPA).
Monitore o cluster por pelo menos 30 minutos após ajustar as cotas para confirmar se o HPA executa conforme o esperado.
Exclua um namespace
Os namespaces integrados (default, kube-system, kube-public, kube-node-lease) não podem ser excluídos. Limpe todos os recursos no namespace antes de exclua. Se o namespace permanecer no status Terminating por muito tempo, consulte What do I do if the namespace is stuck in Terminating status?.
Use o console do ACK
Na página Namespace, localize o namespace de destino e clique em
> Delete na coluna Actions. Para desativar a proteção contra exclusão primeiro, clique em
> Disable Deletion Protection na coluna Actions.Na caixa de diálogo Confirm, confirme os recursos associados no namespace e clique em Confirm.
Use o kubectl
kubectl delete namespace test
Perguntas frequentes
O que fazer se o namespace ficar travado no status Terminating?
Quando um namespace que ainda contém recursos é excluído, a exclusão permanece no status Terminating por muito tempo. A solução é limpar o array finalizers na especificação do namespace — o Kubernetes então remove o namespace automaticamente. Note que isso pode deixar recursos órfãos no cluster, portanto, limpe as cargas de trabalho no namespace antes de continuar.
Use as etapas a seguir para forçar a exclusão de um namespace. Este exemplo usa o namespace istio-system:
-
Abra um terminal e inicie um proxy reverso para o cluster.
kubectl proxySaída esperada:
Starting to serve on 127.0.0.1:8001 -
Abra um segundo terminal. Exporte um token e verifique a conectividade com o servidor de API.
export TOKEN=$(kubectl describe secret $(kubectl get secrets | grep default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d '\t') curl http://localhost:8001/api/v1/namespaces --header "Authorization: Bearer $TOKEN" --insecure -
Exporte a configuração do namespace para um arquivo JSON.
kubectl get namespace istio-system -o json > istio-system.json -
Abra o
istio-system.jsone limpe o arrayfinalizersna seçãospec."spec": { "finalizers": [] } -
Aplique a configuração atualizada para remover os finalizers.
curl -X PUT --data-binary @istio-system.json http://localhost:8001/api/v1/namespaces/istio-system/finalize -H "Content-Type: application/json" --header "Authorization: Bearer $TOKEN" --insecure
Documentos relacionados
Para cotas e limites de cluster, incluindo limites de configuração, limites de capacidade e cotas de service de cloud dependentes, consulte Quotas and limits.
Para configuração de cotas em tipos específicos de objetos de API, consulte Configurar cotas para objetos de API.
Para gerenciamento de permissões granular de clusters ou namespaces com RAM e RBAC, consulte Use RAM to authorize access to clusters and cloud resources e Authorize operations on in-cluster resources with RBAC.