DevSecOps

5 jul, 2017

Kubernetes – Namespaces

Publicidade

Fala galera!

Hoje, vamos fazer mais um artigo referente a Kubernetes e vamos falar um pouco mais sobre Namespaces e como ele nos beneficia em nosso dia a dia. Para isso, vamos entender um pouco mais o que é e como funciona o Namespace.

O Kubernetes, diferente do Docker, suporta que, a partir de um único cluster, sejam criados diversos clusters virtuais dentro desse cluster e isso é chamado de Namespaces, possibilitando que seja possível criar uma estrutura macro no qual futuramente possa ser dividia em vários Namespaces. O Namespace foi projetado para suprir a demanda de equipes compostas por diversos usuários e projetos, nos quais cada equipe possui um ambiente diferente da outra, fornecendo assim recursos que facilitam muito o seu dia a dia, como a limitação de recursos que veremos mais a frente.

Para listar os namespaces atuais em um cluster de Kubernetes, basta executar:

kubectl get namespaces

Por padrão, já existem dois namespaces criados no Kubernetes. São eles:

  • default: onde todos os objetos que não possuem Namespace especificado são criados;
  • kube-system: todos os objetos que o Kubernetes cria para gerenciar o cluster estão nesse Namespace.

Para criar um Namespace, você precisa criar um arquivo .yml como o abaixo:

apiVersion: v1
kind: Namespace
metadata:
  name: nomenamespace

kubectl -f arquivo.yml

Ou você também pode executar comando kubectl create namespace mundodocker.

Quando o Kubernetes criar um serviço, ele vai criar junto uma entrada DNS dentro do seu cluster e essa entrada DNS possui a seguinte nomeclatura: service-name.namespace-name.svc.cluster.local, o qual pode ser utilizado pela sua aplicação para conectar em seu serviço. Geralmente, os Namespaces criados possuem nomeclaturas como: Produção, Homologação, Teste…

É possível realizar a criação de um Pod dentro de um determinado Namespace executando:

kubectl --namespace=mundodocker run nginx --image=nginx

Limitação de recursos ou objetos

Quando se utiliza um ambiente compartilhado, sempre existe uma preocupação com as questões de recursos, e dentro dele Kubernetes existe a possibilidade de resolver isso utilizando “Resource Quota”, que fornece uma limitação de recursos por Namespace. Essa limitação pode ser desde de Hardware (Memória,Cpu….), até a quantidade de objetos que podem ser criados por tipo dentro do Namespace.

Quando o Kubernetes verifica se é possível criar um “Pod, Service, Replication Controller” dentro do Namespace, ele verifica se existe alguma limitação de recursos no Namespace. Caso exista, o Kubernetes já notifica o usuário sobre não ser possível realizar a criação do componente desejado. Um exemplo de política de recursos que pode ser criado é o seguinte:

  • Namespace Teste: possui 20GB de memória e 20 núcleos;
  • Namespace Producao: possui 40GB de memória e 20 núcleos.

Porém, se seu ambiente possui um total de 50GB de memória, o Kubernetes irá alocar a memória do CPU para o componente que realizar o pedido primeiro, não tendo, assim, como colocar a prioridade para determinado Namespace. Além de fazer limitações de CPU e memória, é possível também realizar a limitação de disco e também limitação de objetos.

Um exemplo de criação de “Resource quota” você pode ver abaixo:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: limitacao-recursos
spec:
  hard:
    pods: "10"
    limits.cpu: "10"
    limits.memory: 20Gi

Após criar o seu arquivo .yaml, basta você executar kubectl create -f ./limitacao-recursos.yaml –namespace=teste e você terá criado o seu Resource Quota. Caso queira verificar se tudo ocorreu da forma certa, você pode executar kubectl get quota –namespace=teste e você irá visualizar o retorno bem parecido com esse:

NAME                    AGE
limitacao-recursos       5s

Também é possível verificar de uma forma mais detalhada sobre o seu Resource Quota utilizando kubectl describe quota limitacao-recursos –namespace=teste. Isso irá mostrar de forma detalhada como está configurado a sua quota.

Pessoal, nos próximos artigos sobre Kubernetes, vamos demonstrar na prática como é possível colocar algumas aplicações dentro do Kubernetes e como utilizamos os componentes mostrados até aqui na prática. Por hoje, é isso.

Fiquem ligados em nossos próximos artigos, um grande abraço e até a próxima!