Como usar namespaces do Kubernetes
Para ter uma separação lógica para diferentes grupos de recursos, o Kubernetes nos oferece o recurso de namespaces. Também é conveniente quando você tem um grande ambiente gerenciado por vários usuários ou equipes, e cada um precisa de seu próprio “espaço” para os recursos que lhes são atribuídos para gerenciar e administrar. Esta é uma solução muito melhor do que criar vários clusters Kubernetes apenas para facilitar diferentes grupos de serviços ou implantações e para isolar as equipes em seu próprio espaço.
Cada namespace é um cluster virtual separado e, por padrão, os recursos em diferentes namespaces estão bem isolados uns dos outros e não podem se comunicar entre si, mas isso pode ser alterado editando várias políticas de rede. Em geral, é recomendado manter a comunicação entre namespaces desabilitada, para que os recursos fiquem isolados e mais seguros, reduzindo a superfície de ataque.
Neste tutorial, abordaremos várias maneiras de gerenciar namespaces no Kubernetes em um sistema Linux. Você aprenderá sobre os comandos kubectl que podem ser usados para gerenciar namespaces e ver informações pertinentes sobre namespaces. Vamos começar!
Neste tutorial você aprenderá:
Para que são usados os namespaces no Kubernetes?
-
Como visualizar informações sobre namespaces configurados
Sintaxe YAML para criar um namespace Kubernetes
Como criar ou excluir um namespace
Como adicionar um recurso a um namespace no Kubernetes
Use o comando Scale no Kubernetes
VOCÊ SABIA?
A menos que você tenha um ambiente Kubernetes relativamente grande que seja gerenciado por pessoas separadas, ou a menos que você tenha um ambiente muito diversificado que exija algum tipo de isolamento de outros recursos, ele deveria não será necessário criar nenhum namespace extra. O Kubernetes oferece rótulos se você precisar agrupar seus recursos sem a necessidade de criar novos namespaces.
Os exemplos abaixo pressupõem que você já tenha seu cluster Kubernetes instalado e funcionando e tenha acesso ao comando kubectl
.
Para visualizar todos os namespaces configurados em seu cluster Kubernetes, execute este comando:
$ kubectl get namespaces NAME STATUS AGE default Active 22s kube-node-lease Active 24s kube-public Active 24s kube-system Active 24s
Como ainda não configuramos nenhum namespace extra, a saída mostra apenas os quatro namespaces padrão do Kubernetes:
default
é o namespace no qual seus recursos irão por padrão, a menos que especificado de outra forma.kube-node-lease
é o namespace para objetos de locação de cada nó, que enviam uma pulsação de volta ao plano de controle.kube-system
é o namespace para quaisquer objetos que foram criados pelo próprio Kubernetes.kube-public
é o namespace para recursos que precisam estar acessíveis para todos os usuários, independentemente de serem autenticados ou não.-
Para ver informações sobre um namespace específico, você pode executar:
$ kubectl get namespaces [name of namespace]
O argumento
describe
fornecerá informações e detalhes extras sobre um namespace que você deseja investigar:$ kubectl describe namespaces [name of namespace]
Para criar um novo namespace, podemos usar a seguinte sintaxe YAML como modelo:
apiVersion: v1 kind: Namespace metadata: name: [name of namespace]
Em seguida, execute o seguinte comando para adicioná-lo ao Kubernetes:
$ kubectl create -f ./my-new-namespace.yaml
Outra maneira é criar o namespace imperativamente usando a seguinte sintaxe de comando
kubectl
:$ kubectl create namespace [name of namespace]
Para excluir um namespace, podemos emitir o seguinte comando.
$ kubectl delete namespaces [name of namespace]
Lembre-se de que o comando anterior também excluirá todos os recursos existentes no namespace.
A seguir, vamos ver como adicionar um objeto a um namespace. Como exemplo, criaremos uma nova instância do Nginx e a adicionaremos ao namespace
my-servers
:$ kubectl run --image=nginx nginx-server --port=80 -n=my-servers
Considerações finais
Neste tutorial, vimos como usar namespaces no Kubernetes em um sistema Linux. Namespaces são um recurso interessante que podemos usar para isolar recursos no Kubernetes, sem a necessidade de criar clusters completamente separados. Isso é útil para equipes grandes designadas para gerenciar diferentes partes do cluster ou quando temos uma grande quantidade de recursos diversos que devem ser isolados e separados logicamente uns dos outros.