Domine o Kubernetes: Guia Completo para Iniciantes

Kubernetes é o software de código aberto predominante que automatiza os processos de desenvolvimento de contêineres.

Um estudo anual da Cloud Native Computing Foundation (CNCF) revela que impressionantes 96% das organizações já adotaram ou estão considerando adotar o K8s. E mais, cerca de 5,8 milhões de desenvolvedores em todo o mundo estão utilizando Kubernetes, representando 31% de todos os desenvolvedores de back-end globalmente.

A sua popularidade deve-se à capacidade de otimizar a tecnologia através de escalabilidade aprimorada, alta disponibilidade e tempos de implantação reduzidos. Enquanto muitos desenvolvedores iniciam a sua jornada com contêineres utilizando o Docker, uma ferramenta abrangente que depende da CLI para interagir com contêineres individualmente, o K8s oferece abstrações de alto nível. Estas abstrações permitem definir aplicações e suas infraestruturas através de esquemas colaborativos.

Se é um iniciante em Kubernetes, este artigo foi cuidadosamente elaborado para o ajudar nas suas primeiras incursões, fornecendo insights valiosos para começar. Aprenderá como o K8s pode ser uma ferramenta poderosa para turbinar os seus produtos digitais como desenvolvedor.

O que é o Kubernetes e qual a sua importância?

Kubernetes é um framework de orquestração de código aberto, usado para automatizar a implementação, o escalonamento e a gestão de aplicações em contêineres, garantindo a sua previsibilidade e disponibilidade.

Simplificando, imagine uma aplicação que foi colocada em contêineres. Para atender aos utilizadores da sua aplicação, é preciso executar múltiplos contêineres. O desafio surge quando é preciso gerir esses contêineres, que podem não estar na mesma máquina, complicando a situação. Qual a solução?

É aqui que o Kubernetes entra em ação, oferecendo uma forma eficiente de lidar com todos esses processos de forma integrada. Embora o K8s possa ser comparado a um motor de contêiner como o Docker, na verdade é um orquestrador de contêineres. Como desenvolvedor iniciante, não precisa se preocupar com a forma como o K8s realiza a orquestração. Provavelmente, não configurará um cluster K8s para sua aplicação, mas abordaremos isso em breve.

No entanto, irá interagir com clusters que foram configurados pela sua equipa de infraestrutura. Familiarizar-se com os objetos com os quais irá interagir é fundamental. Mas, antes disso, é necessário ter uma compreensão geral da sua arquitetura para entender o que acontece nos bastidores.

Funcionalidades do Kubernetes

O Kubernetes possui diversas funcionalidades com um vasto leque de capacidades para executar contêineres e outras infraestruturas associadas. Aqui está uma lista:

  • Implementações, escalonamentos e reversões automatizadas – o K8s automatiza a criação do número especificado de réplicas, distribuindo-as pelo hardware apropriado e reagendando os contêineres se um nó ficar inativo. Pode dimensionar instantaneamente as suas réplicas com base na procura ou em necessidades de mudança, como a utilização da CPU.
  • Descoberta de serviços, balanceamento de carga e entrada em rede – O Kubernetes oferece uma solução de rede abrangente, incluindo a descoberta de serviços internos e a exposição de contêineres públicos.
  • Aplicações com e sem estado – Inicialmente, o K8s focava-se sobretudo em contêineres sem estado. Com a evolução da tecnologia, ele agora suporta objetos integrados que representam aplicações com estado. Resumindo, qualquer aplicação pode ser executada no Kubernetes.
  • Gestão de armazenamento – Quer utilize um sistema de ficheiros local, um compartilhamento de rede ou a nuvem, o Kubernetes fornece (abstrai) armazenamento persistente para aplicações executadas em contêineres. A abstração permite definir requisitos de armazenamento independentemente da infraestrutura subjacente. Embora isso esteja além do escopo deste artigo, ele funciona através de princípios como volume persistente (PV), solicitação de volume persistente (PVC), classes de armazenamento e plugins de volume.
  • Estado declarativo – O K8s usa ficheiros Yet Ain’t Markup Language (YAML), chamados manifestos de objeto, para especificar os estados desejados para seu cluster. Os manifestos determinam a aparência do seu cluster, incluindo instâncias de aplicações e regras de rede, entre outras configurações. Quando aplica manifestos, o K8s lida automaticamente com todas as transições de estado – não precisa escrever scripts para o fazer.
  • Múltiplos ambientes de trabalho – Não está limitado a usar o Kubernetes na nuvem ou na sua estação de trabalho. Quase todas as distribuições estão disponíveis para corresponder ao seu caso de uso específico. Os principais provedores de tecnologia de nuvem, como a Amazon Web Services, o Google Cloud e a Microsoft Azure, oferecem serviços Kubernetes geridos, enquanto distribuições de nó único, como o Minikube e o K3s, estão disponíveis para uso local.
  • Super extensibilidade – O K8s é uma coleção de muitas funcionalidades. E pode expandir ainda mais as suas capacidades com extensões. É possível criar tipos de objetos, operadores e controladores personalizados para simplificar suas cargas de trabalho.

Arquitetura do Kubernetes

Fundamentalmente, a arquitetura do Kubernetes é constituída por um nó mestre e vários nós de trabalho. O nó mestre dá as ordens no cluster, enquanto os nós de trabalho executam as aplicações conforme decidido pelo mestre.

Fonte: kubernetes.io

Aqui está uma análise mais detalhada:

O(s) nó(s) mestre(s)

O nó mestre determina os estados do cluster e define as ações de cada nó específico. Vários processos são necessários para configurar o nó mestre.

  • Servidor de API
    Todas as comunicações do cluster são baseadas aqui. É o gateway que permite que todos os componentes do cluster troquem informações. Expõe a API do Kubernetes. Desempenha dois papéis principais. O primeiro é um ponto de entrada que permite que os utilizadores interajam com o cluster, por exemplo, enviar solicitações ao usar o Kubectl. Segundo, atua como um guarda, autenticando e validando as solicitações, garantindo que apenas utilizadores autorizados executem ações.
  • Agendador
    O agendador designa aplicações ou objetos de carga de trabalho do Kubernetes para um nó de trabalho. Aloca os pods em nós com base nos requisitos de recursos. Os pods são a menor unidade de implementação no Kubernetes.
  • Gestor de Controladoria
    Esta unidade mantém os clusters, como falhas de nó, para garantir o número correto de pods. Deteta mudanças no estado do cluster, como pods em falha, e tenta restaurar o pod ao seu estado original. Por exemplo, se um pod falhar, o gestor da controladora solicita ao agendador que escolha um nó para iniciar um novo pod como substituto, e o kubelet o ativa.
  • etcd
    Conhecido como o cérebro do cluster. É um armazenamento de chave-valor para a configuração do cluster. Todas as mudanças do cluster são efetuadas aqui. É possível fazer um backup do cluster salvando este armazenamento distribuído de chave-valor. No entanto, apenas os dados de estado do cluster são armazenados aqui, não os dados da aplicação. Esta unidade é específica para manter as informações de estado do cluster e disponibilizá-las para os processos anteriores, fornecendo-lhes informações sobre o cluster.

O(s) nó(s) escravo(s)

Cada nó escravo tem três processos que permitem que o K8s interaja com ele e gere pods separadamente em cada nó. Os processos necessários são:

  • KubeletGenericName
    Este é o serviço principal do Kubernetes que executa as ações para a camada de execução do contêiner. Sem esta unidade, o Kubernetes é apenas uma API REST com um armazenamento de chave-valor. O K8s executa a aplicação em contêineres por padrão. Os contêineres são sempre isolados entre si e do sistema host subjacente. Isto é importante para separar a gestão de aplicações individuais entre si e a infraestrutura física ou virtual.

    Embora o controle de admissão da API possa rejeitar pods ou adicionar restrições, o kubelet é o validador final de quais pods são executados num nó específico. Resumindo, os kubelets interagem com o nó e o contêiner. Utiliza ficheiros de configuração e ativa pods usando o tempo de execução do contêiner.

  • Tempo de execução do contêiner
    Esta seção executa contêineres. Por exemplo, pode utilizar o Docker, o rkt ou o containerd.
  • Kube-proxy
    Esta unidade oferece uma camada de abstração para grupos de pods de nós em políticas comuns, como no caso do balanceamento de carga. Todos os nós aplicam o Kube-proxy para fornecer um endereço IP virtual para clientes que acedem aos pods dinâmicos. Esta estrutura é a solução para o balanceamento de carga, mantendo uma sobrecarga de baixo desempenho.

Como funciona a conteinerização

A conteinerização envolve a virtualização de todos os componentes necessários de uma aplicação de software numa única unidade. Os contêineres incluem bibliotecas, binários e todas as configurações de aplicações necessárias, mas não incluem recursos de kernel ou hardware virtualizado.

Os tempos de execução de contêineres são executados ‘por cima’, descrevendo os recursos. Uma vez que os contêineres incluem apenas os componentes básicos e as dependências de aplicação, são leves e mais rápidos do que outras máquinas virtuais.

Leia também: Contêineres vs. Máquinas Virtuais: Explicando as Diferenças

Como instalar e configurar o Kubernetes

Após tanta teoria, esta seção será mais prática e envolverá alguma experiência com contêineres. Este tutorial aborda especificamente a instalação no sistema operacional Windows.

Existem várias formas de realizar a instalação no Windows: através da linha de comando ou da interface gráfica. No entanto, deve garantir que cumpre as seguintes especificações:

O seu hardware precisa de um nó mestre com pelo menos 2 GB de memória e 700 MB para o nó de trabalho. Para os requisitos de software, precisa do Hype-v, Docker para desktop, um endereço Mac exclusivo e um UUID de produto exclusivo para cada nó. Aqui está a abordagem passo a passo.

Instalar e Configurar o Hyper-V

O Hyper-V é o software de virtualização padrão do Windows. É como um VirtualBox melhorado. Permite gerenciar máquinas virtuais na interface gráfica do Windows ou na linha de comando. Para ativar o Hyper-V, siga estes passos:

  1. Abra o Painel de Controle.
  2. Clique em “Programas” no painel esquerdo.
  3. Na página de programas e recursos, clique em “Ativar ou desativar recursos do Windows”.
  4. Selecione os recursos “Hyper-V” e “Hypervisor para Windows”.
  5. Clique em “OK”. O seu computador deverá reiniciar para ativar as novas configurações.

O seu PC poderá reiniciar várias vezes para garantir que tudo está configurado corretamente. Pode verificar se a instalação foi bem-sucedida ao digitar o seguinte comando no Power Shell.

Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V

Confirme se vê o estado “ativado” no resultado.

Instalar o Docker

Como já aprendeu, o K8s é uma ferramenta de orquestração de contêineres que se baseia em contêineres. Neste caso, o Docker é uma boa escolha. O K8s comunica-se com o Docker e gere tudo em nível empresarial. Transfira o Docker para Windows. O Docker Desktop é a opção preferida para simplificar o desenvolvimento, envio e execução de aplicações dockerizadas.

Também é a maneira mais rápida de criar aplicações Docker no Windows usando o Hyper-V e a rede. Após uma instalação bem-sucedida, o Docker estará acessível em qualquer terminal, desde que esteja em execução. Para obter um guia detalhado sobre a instalação, consulte a documentação oficial do Docker. Se encontrar problemas como ícones ocultos após a instalação, reiniciar o computador deverá resolver o problema.

Instalar o Kubernetes

A interface gráfica do Docker permite definir configurações, instalar e ativar o Kubernetes. Para instalar o K8s, siga estes passos:

  1. Clique com o botão direito do rato no ícone da bandeja do Docker e selecione “Propriedades”.
  2. Selecione “Definições” no menu suspenso depois de clicar em “Propriedades”.
  3. No painel esquerdo, escolha “Kubernetes” e clique em “Aplicar”.

O Docker instalará alguns pacotes e dependências adicionais. O processo leva cerca de cinco a dez minutos, dependendo da sua velocidade de internet. Pode usar a aplicação Docker para garantir que tudo está a funcionar corretamente.

Uma vez que as aplicações Kubernetes podem ser implementadas usando a CLI, poderá ser necessário instalar o painel do K8s, pois ele não é instalado por padrão. Instale o painel seguindo os passos seguintes:

  1. Transfira a configuração YAML.
  2. Implemente a aplicação usando este código: Kubectl apply -f .recommended.yaml.
  3. Confirme se tudo está bem definido através do comando kubectl.exe get -f .recommended.yaml.txt.

Para aceder ao painel, execute o seguinte comando no Power Shell (não no CMD)

  1. Execute o seguinte código ((kubectl -n kube-system describe secret default | select-string “token:”) – split “+”)[1]
    • Copie o token gerado e execute kubectl proxy.
  2. No seu navegador, abra este link.
  3. Clique em “Token” e cole o seu token.
  4. Clique em “Entrar”.

Se chegou até aqui, parabéns! O painel do K8s deverá estar visível. Agora pode gerenciar as suas aplicações sem utilizar a CLI.

Leia também: Como instalar o Kubernetes no Ubuntu 18

Como criar e gerenciar um cluster Kubernetes

Se seguiu até aqui, deverá ter instalado o Kubernetes com sucesso. Em seguida, siga estes passos para criar e executar uma gestão simples do seu cluster:

  • Configurar rede – Configure a rede entre os nós do cluster, permitindo a comunicação entre eles.
  • Configurar a autenticação do cluster – Crie mecanismos de autenticação e autorização para o acesso ao cluster.
  • Instalar componentes mestre – O processo envolve o servidor de API, o agendador e o gestor de controladores.
  • Juntar nós de trabalho – Conecte os nós de trabalho ao cluster usando os ficheiros de configuração fornecidos pelo processo de configuração do cluster.
  • Implementar complementos – Instale extensões para melhorar a funcionalidade do cluster.
  • Gerenciar cargas de trabalho – É hora de implementar as suas aplicações.

Esta é apenas uma visão geral do processo de criação do cluster, que envolve muitas etapas e comandos. Consulte o guia de documentação oficial sobre como criar clusters antes da implementação. Será um guia útil.

Como implementar a sua primeira aplicação usando o Kubernetes

O comando mais comum ao usar o K8s é kubectl action resource, que permite executar ações específicas, como criar ou excluir um recurso específico.

Se tiver dificuldades, pode usar --help após um subcomando específico para obter mais informações.

Por exemplo: Kubernetes get nodes –help. Para implementar a sua primeira aplicação K8s, use o comando: kubectl create deployment Kubernetes-bootcamp --image=gcr.io/google-samples/Kubernetes-bootcamp:v1.

Considerações Finais

Este guia foi um ponto de partida para o mundo da tecnologia Kubernetes. Aprendeu sobre os benefícios, as funcionalidades e a arquitetura do Kubernetes. Esperamos que tenha que consultar alguns recursos externos para prosseguir, pois aqui explicamos o funcionamento do sistema de forma abrangente.

Embora possa parecer difícil entender toda a pilha tecnológica no início, esta publicação foi uma orientação suave para o ajudar a começar a usar o K8s. Precisará de um pouco de prática para se sentir confiante ao utilizar esta tecnologia, por isso aconselhamos a usar a documentação oficial do Kubernetes como referência. Quanto mais praticar, mais rapidamente se tornará um especialista em K8s.

Depois, consulte os tutoriais do Kubernetes para iniciantes para dominar este tema.