• Kubernetes! O sistema operacional dos containers

    Kubernetes é a buzzword do momento. Se você esteve envolvido em TI nos últimos dois anos já ouviu falar desta plataforma......

  • Porque devo ir já para Cloud?

    A computação em nuvem (Cloud Computing) já é um requisito fundamental para sucesso na definição de estratégias empresarial. Anteriormente bastante discutida......

  • Elasticidade AWS

     O Elastic Cloud Computing  é um conceito criado pela Amazon para sua nuvem AWS.  Na Computação em Nuvem Elástica,  uma série de......

  • Porque migrar para a AWS ?

    A Amazon é o maior site de comércio eletrônico mundial, e a infraestrutura de serviços que ela usa é a mesma......

Kubernetes! O sistema operacional dos containers

Kubernetes! O sistema operacional dos containers

Kubernetes é a buzzword do momento. Se você esteve envolvido em TI nos últimos dois anos já ouviu falar desta plataforma usada na orquestração de containers.

Por que de repente esse projeto da Google virou a sensação do verão? A resposta passa por entender porque containers e microsserviços são a grande novidade do gerenciamento de recursos de TI da atualidade.

Quem já participou de algum projeto de tecnologia, vivenciou problemas de manutenção de aplicativos. Para a operação, em projetos curtos, pode não sobrar tempo para pensar em todos os padrões de segurança ou boas práticas de configuração.

Nos projetos  já estabelecidos existe a dificuldade de manutenção do legado em face às novas versões de sistemas operacionais, bibliotecas, etc. Cada atualização de segurança ou de boas práticas requer atenção redobrada para garantia de que tudo vai funcionar em conjunto.

Do lado dos desenvolvedores há pressão para  lançar novas funcionalidades cada vez mais rápido e com menor número de pessoas. Nesse ambiente, manter a suíte de desenvolvimento atualizado com as mais recentes bibliotecas,  iniciar ambientes de novas tecnologias e seguir com as boas práticas de configuração são trabalhos que levam UM tempo precioso que poderia estar sendo usado para codificar.

Com o advento das aplicações em microsserviços esse dilema se tornou maior. Se antes era necessário manter duas ou três aplicações, agora elas podem chegar a centenas, escritas nas mais variadas linguagens, diferentes frameworks e protocolos.

Containers em cena

Os containers nasceram da necessidade de padronização e portabilidade de aplicações. Apesar de utilizar estruturas dos sistemas que em alguns casos remetem a década de 80, foi agora que a necessidade e a possibilidade do uso da nuvem tornou essa alternativa possível e interessante.

O desenvolvimento dos containers teve foco não só no gerenciamento do ciclo de vida do aplicativo, mas também com entregas rápidas, garantia de configuração padronizada. Tudo isso para facilitar a vida do operacional, e também com forte apelo de simplicidade para o desenvolvedor.

A entrega de aplicativos vem evoluindo com intuito de diminuir o trabalho manual e consequentemente o tempo total. 

Com o apoio dos manuais de instalação, vários passos tendem a ser executados por humanos, passamos por instaladores que guiam o usuário entre opções pré-configuradas, scripts que permitem automação da aplicação sem intervenções e gerenciadores de configuração que controlam o ciclo de vida dos aplicativos até chegarmos aos containers.

manual de instalação kubernetes

Passo a passo de instalação do kubernetes.

Containers encapsulam toda a inteligência de instalação, integração de bibliotecas, inicialização, monitoramento, e atualizações de um aplicativo em um pacote único, portável e de fácil entrega nos sistemas a serem executados.

Com o simples comando docker run é possível baixar, instalar e executar um aplicativo sem se preocupar com dependências, configurações ou compatibilidade com o sistema corrente.

São perfeitos para aplicações em microsserviço, pois como todo o ciclo de gerência de pequenos softwares autocontidos de uma forma padronizada, os desenvolvedores podem se focar em produzir código e contar com um sistema de integração que garanta a compatibilidade do software desenvolvido em seus desktops com os servidores.

As características citadas levaram a uma proliferação dos containers, mas para gerenciar esses pacotes tornaram-se uma questão a ser resolvida. Containers são diferentes das aplicações tradicionais que se instalam, se configuram nos sistemas operacionais e contam com formas maduras de gerenciamento do ciclo de vida. Para gerenciar esses blocos de software autocontidos utilizamos softwares chamados orquestradores.

Afinal, o que é Kubernetes?

Kubernetes é a plataforma de código aberto para orquestração de container desenvolvida pelo Google. Entre as opções de orquestração que se apresentaram no mercado, o K8S (abreviação de Kubernetes K 8, letras S) se tornou a mais difundida e possui uma das mais vibrantes comunidades de desenvolvimento de software código aberto da atualidade.

Desenvolvido para resolver problemas de disponibilidade, escalabilidade e também economia na escala do Google, o Kubernetes tem os seguintes atrativos:

  • Gerenciamento completo do ciclo de vida: realiza o acompanhamento dos containers desde sua obtenção dos repositórios, implantação nos nós do cluster, monitoramento da saúde, reinício em caso de falhas  e término em caso de necessidade;
  • Portável: o Kubernetes cria uma camada que isola a infraestrutura computacional de onde quer que ele esteja sendo utilizado. Dessa forma, permite que aplicações sejam portáveis entre ambientes on-premises e diferentes nuvens como GCP, AWS, e Azure, implementando o tão sonhado write once run anyware;
  • Forte integração com os serviços de nuvem: o Kubernetes permite isolar a complexidade das infraestruturas dos provedores permitindo o gerenciamento padronizado através dele;
  • Padrão de fato: disponível como serviço nos maiores provedores de nuvem, é possível iniciar a execução de um cluster em pouco tempo e acelerar a adoção de um modelo moderno de desenvolvimento;
  • Boa relação custo-benefício: com controle fino dos recursos computacionais de memória de CPU e disco, o Kubernetes consegue aumentar o adensamento das cargas de trabalho, garantindo sempre que o mínimo de máquinas esteja em execução de forma automática;
  • Comunidade ativa: milhares de aplicações já estão sendo pensadas para o ambiente Kubernetes e novas funcionalidades são adicionadas a cada momento.

Arquitetura do Kubernetes

Construído para operar sobre um grupo de máquinas trabalhando em conjunto, o Kubernetes possui duas categorias de nós,  os Controllers e os Workers.

Os Controllers,  responsáveis pelo plano de controle do cluster, são compostos pelos seguintes componentes:

  • ETCD: banco de dados chave de valor distribuído, responsável pela persistência de toda base do cluster;
  • API Server: API central do sistema, responsável por integrar todos os componentes
  • Controllers Manager: gerenciadores responsáveis por garantir que o estado do cluster seja mantido;
  • Scheduler: agendador responsável por definir em qual nó os containers devem ser executados.

Os workers são responsáveis por efetivamente executar os containers de aplicação. São compostos pelos seguintes componentes:

  • Kubelet: faz a comunicação com a API, informa os recursos disponíveis e os em execução e iniciação de containers;
  • Container Runtime: camada de execução dos containers;
  • Kube-Proxy: responsável pela rede do Kubernetes.

A unidade mínima de execução no Kubernetes é o pod. Ele é um conjunto de containers que deve executar uma única função conjunta, como, por exemplo, uma aplicação e seu proxy http. O cluster K8S é responsável por alocar, iniciar e desligar os pods, garantindo que a aplicação esteja em execução mesmo com problemas nas máquinas ou falhas dos próprios programas, reenviando as cargas de trabalho de um nó para o outro em caso de queda ou reiniciando as aplicações em lapso.

Todo gerenciamento do cluster é feita através da API Kubernetes, um ponto único de gerência e informação do estado do cluster.

Gerenciamento de aplicações

O K8S foi desenhado com suporte nativo a disponibilidade e escalabilidade das aplicações.  Utilizando uma estrutura chamada Deployment é possível instalar, atualizar e escalar os containers de forma fácil e rápida, implementando entregas do tipo Canary, rollback em caso de parada e reinício em caso de falhas com simplicidade.

Cada Deployment é responsável por controlar um replicaset de um pod. O replicaset mantém um conjunto de cópias de um mesmo pod em execução garantindo que o número desejado esteja sempre disponível, recriando ou terminando os pods para atingir esse objetivo.

Utilizando os replicasets, um deployment pode atualizar uma aplicação de uma versão para outra mantendo um conjunto com cada ponto de vista fazendo a migração em partes até que todos estejam atualizados. Da mesma forma, o Deployment guarda histórico das versões utilizadas permitindo um rollback para um estado anterior em caso de falhas.

Outro uso dos replicasets é o auto escalonamento utilizando um hpa (horizontal pod autoscaler). Essa funcionalidade do K8S monitora o uso de recursos nos pods de um deployment e altera o número de cópias desejadas em um replicaset garantindo o desempenho da aplicação em momento de maior demanda.

Colocando em prática

Se você se interessou por esta plataforma, curtiu nosso briefing e quiser aprender de fato como funciona um cluster Kubernetes gostaríamos de sugerir alguns labs interessantes. O primeiro deles, um dos mais conhecidos e cujos passos de instalação e uso são encontrados na documentação oficial do Kubernetes, é o Minikube. O Minikube é um cluster K8S localhost composto por um único node. Como recursos você vai precisar apenas de uma máquina virtual e da kubectl, a linha de comando do Kubernetes, instalados em seu notebook ou desktop. É possível executá-lo no Linux, no MacOS e no Windows. Outra opção de single-node cluster é o Microk8s, porém este desenvolvido exclusivamente para sistema Linux.

Fernando Silva
No Comments

Sorry, the comment form is closed at this time.