Kubernetes

Introdução

Kubernetes é um sistema de código aberto (open-source) desenvolvido inicialmente pela Google em 2014 com intuito de fazer gestão de aplicações em containers e ambientes com múltiplos servidores.

O designer do cluster kubernetes precisa seguir algumas práticas, que são:

  • Seguro: Práticas de segurança avançadas de controle;
  • Operação: Fácil a utilização com alguns comandos;
  • Adaptável: Não poderá favorecer um fornecedor e ser configurável por meio de um arquivo.

Um administrador do Kubernetes tem a liberdade de gerir as suas aplicações sem restrições. O comportamento da aplicação de forma interna ou externa é devidamente configurável. Podendo ser feito o escalonamento, configuração de rede, atualização da aplicação, ou até reverter atualizações. E essas são algumas das possibilidades do que poderia ser feito dentro do kubernetes.

Componentes

Para uma implantação do kubernetes é necessário um maquina, ou várias, a depender da sua configuração, esse recurso é chamado de master. Este servidor tem nas suas funcionalidades uma porta de entrada (gateway) com o propósito de expor as suas APIs para que integradores verifiquem o estado dos servidores. Os integradores podem analisar as informações com a finalidade decidir a melhor forma de atribuir funções dentro do kubernetes. Segue abaixo os seus componentes.

Control panel

O componente control pane é responsável por gerir os nós de forma global. É o componente de maior relevância no kubernetes, pois gerencia as funcionalidades, e executa com perfeição.

Por exemplo, inicia um novo pod, caso ocorra um erro na réplica.

Kube-apiserver

Este componente é responsável por disponibilizar API do tipo REST para que outros recursos possam se cumunicar entre si. Essa comunicação acontece por meio da ferramenta kubectl, com objetivo de administrar o kubernetes. O kube-apiserver foi formulado para escalonar horizontalmente conforme a sua utilização.

etcd

Este componente é responsável por salvar o estado e as configurações do cluster kubernetes em formato de chave e valor, sendo consistente, e com alta disponibilidade. O etcd é manipulado por API de forma simples, com intuito de disponibilizar as configurações dos nós. Por questão de segurança o etcd é executado em nós do tipo master, ou em cluster externos.

kube-scheduler

Esse componente é responsável por atribuir pods recém-criado ao nó. A escolha para atribuição do nó é com base na quantidade de recurso disponível, e o estado do nó. O kube-scheduler entende a capacidade total de todos os nós e clusters nos recurso computacionais. E tem o propósito de garantir a alocação dos pods de forma simples para o recurso disponível. A consideração para alocação de carga leva em conta as políticas definidas pelo administrador, tais como afinidade, definição de “software” e etc.

kube-controller-manager

Esse componente é responsável por executar o cluster enquanto os controladores de gerenciamento do kubernetes executam varias funções de maneira unificada, como forma de garantir o último estado definido no etcd. O componente permiti que o kubernetes faça a interação de diversos provedores, com diferentes capacidades, recurso e APIS, enquanto faz a construção internamente.

Por exemplo: Caso esteja a executar um deploy, e nele ter 10 ReplicaSet em um pod, kube-controller-manager é responsável por verificar se todos subiram ou não.

Temos os seguintes controladores:

  • Controlador do nó: responsável por identificar se o estado do nó está ativos ou não;
  • Controlador de trabalho (job): responsável por observar e criar os pods para executar tarefas até finalização da sua execução;
  • Controlador de endpoints: responsável pelo objeto do endpoints e a sua junção para a comunicação entre serviços e pod;
  • Controlador autenticação: responsável por criar as contas de autenticação usando padrões de tokens para acesso de API e gerência de novos namespaces.

cloud-controller-manager

Esse componente é responsável por gerir a lógica da nuvem, permitindo o vínculo do cluster API no seu provedor de nuvem, com o intuito de separar os componentes de tal forma que possam interagir com a plataforma utilizada. Vale salientar que, caso esteja operando em maquina local esse recurso não estará disponível para uso.

Existem dependências para o provedor, que são:

  • Controlador de nó: responsável pela verificação de nós, caso algum pare de responder;
  • Controlador de rota: responsável pela gerência das rotas de infraestrutura da nuvem;
  • Controlador de serviço: responsável pela gerência e balanceamento de carga no provider de nuvem.

Kubelet

Esse componente é responsável por replicar informações para o control plane e interagir com o etcd para leitura e escrita de novos valores. Em cada nó do cluster deverá existir um agente do kubelet em execução para poder gerir os pods que foram direcionados para o kube-controller-manager com o intuito de manter os containers funcionando conforme esperado. Vale ressaltar que, o kubelet não gerência containers que não são criados pelo kubernetes.

Kube-proxy

Esse componente é executado em todos os nós com a finalidade de gerir as sub-redes dos hosts. Para garantir que os serviços estejam acessíveis e isolados para outros componentes. O kube-proxy se comporta como filtro de pacote interno do sistema( caso exista um), caso contrário, o mesmo tem autonomia para encaminhar os pacotes.

Container runtime

Esse componente é responsável por conduzir e executar containers em ambiente operacional relativamente isolado, e mais leve. O kubernetes administra diversos agentes para execução de containers, que são:

O mesmo também implementa qualquer outro container que siga o CRI (Container Runtime Interface).

Addons

O addons é uma extensão de funcionalidade do kubernetes que utiliza alguns recursos como DaemonSet e Deployment. E tem como propósito implementar novas aplicações ao cluster. Esses recursos criados na namespace pertencem ao kube-system. Segue alguns addons que podem ser úteis para o cluster:

Existe uma lista de addons para administração de cluster disponível aqui.

Ferramentas para estudo

O kubernetes tem no seu modelo vários servidores como master e workers, a junção de ambos se caracteriza como um cluster. Para o funcionamento do mesmo é recomendável que exista três nós, sendo divididos em:

  • Master: responsável por gerenciar o cluster;
  • Worker: responsável por executar as aplicações que alocamos dentro do kubernetes.

Soluções que podemos utilizar para que não seja necessário criar os 3 nós, segue abaixo:

Então é isso galera, espero que tenham gostado, até a próxima!

Referências

https://www.digitalocean.com/community/tutorials/uma-introducao-ao-kubernetes-pt https://www.redhat.com/pt-br/topics/containers/kubernetes-architecture https://kubernetes.io/pt-br/docs/concepts/overview/components/#container-runtime https://kubernetes.io/docs/concepts/cluster-administration/logging/ https://livro.descomplicandokubernetes.com.br/pt/day_one/descomplicando_kubernetes.html