Conteúdos

Parte 2 - Aplicações no Kubernetes - Zero to Hero

Preparando o k8s

No processo de preparação do kubernetes, precisamos ter algumas ferramentas em nosso computador como o kubectl para poder acessar o ambiente e o helm para poder gerenciar pacotes e instalações de aplicações dentro de nosso cluster. Há também algumas outras ferramentas, como o k9s e o Lens que nos auxiliam a ter uma visão geral do nosso cluster.

1 Ferramentas de suporte

1.1 kubectl

Quem está utilizando a versão do Docker Desktop não precisa se preocupar com o kubectl pois ele já está instalado no computador. Porém, se você utiliza linux e instalou a versão do Docker CE, que é via terminal, é necessário instalar o kubectl para poder acessar o ambiente.

No site do Kubernetes, temos um –how to– para instalar o kubectl no linux.

1
2
3
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/kubectl

Agora somos capazes de executar o kubectl de nossa máquina linux. Para facilitar a operação no terminal, vamos habilitar o auto-complete do kubectl.

1
2
echo 'source <(kubectl completion bash)' >>~/.bashrc
source <(kubectl completion bash)

1.2 helm

Instalando o Helm para gerenciar pacotes e instalações de aplicações dentro de nosso cluster. Temos processos para Windows, MacOS e Linux.

1.2.1 Instalando o Helm no Windows

Vamos utilizar o Chocolatey para instalar o Helm no Windows.

1
choco install helm -y

1.2.2 Instalando o Helm no MacOS

No MacOS, vamos utilizar o Brew para instalar o Helm.

1
brew install helm

1.2.3 Instalando o Helm no Linux

No Linux, vamos utilizar o curl para instalar o Helm.

1
2
3
4
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod +x get_helm.sh
./get_helm.sh
sudo mv ./helm /usr/local/bin/helm

1.3 k9s e Lens

1.3.1 Instalando o k9s e Lens no Windows

Vamos utilizar o Chocolatey para instalar o Helm no Windows.

1
choco install k9s lens -y

1.3.2 Instalando o k9s e Lens no MacOS

No MacOS, vamos utilizar o Brew para instalar o Helm.

1
2
brew install k9s
brew install --cask lens

1.3.3 Instalando o k9s e Lens no Linux

No Linux, vamos utilizar o snap para instalar o k9s e o Lens.

1
sudo snap install k9s lens

2 Inicializando o Kubernetes em ambiente local

Um grande auxílio no processo de desenvolvimento de aplicações para cloud, é a possibilidade de utilizar o Kubernetes em ambiente local para deploy e testes de nossas aplicações. Nele podemos disponibilizar praticamente uma infra completa, desde banco de dados a brokers para nossa aplicação.

Vamos apresentar algumas formas que você pode subir seu próprio cluster kubernetes em seu próprio computador.

2.1 Via Docker Desktop

Primeiramente, iremos mostrar como habilitar o kubernetes através do Docker Desktop.

Esse procedimento funciona para qualquer sistema operacional com o Docker Desktop instalado.

Ao acessar a tela inicial do Docker Desktop, vamos acessar o menu de configuração clicando na engrenagem no canto superior direito, como sinalizado na imagem abaixo.

/application-on-k8s-zero-to-hero-2/docker-desktop-1.png
Docker Desktop - Tela Inicial

Dentro do menu de configurações, vamos acessar o menu de kubernetes clicando no botão “Kubernetes” do lado esquedo, nele podemos selecionar a opção para habilitar o kuberntes( [X] Enable Kubernetes).

Ao habilitar o kubernetes, devemos clicar no botão “Apply and Restart” para salvar as alterações e subir nosso kubernetes, como mostramos na imagem abaixo.

/application-on-k8s-zero-to-hero-2/docker-desktop-2.png
Docker Desktop - Tela de configuração para habilitar o kubernetes

Toda vez que iniciarmos o Docker Desktop, o kubernetes deve estar habilitado. Você verá no canto inferior esquerdo da tela o status do kubernetes, como sinalizado na imagem abaixo.

/application-on-k8s-zero-to-hero-2/docker-desktop-3.png
Docker Desktop - Tela Inicial, verificando se o kubernetes está habilitado e rodando

Pronto, neste momento temos um kubernetes disponível em nosso computador, podemos então começar a usar ele para deployar nossas aplicações.

Dica
Para Windows, a melhor opção para se usar um kubernetes local e habilitar recursos como ingress de forma fácil, liberando apenas uma regra de firewall é o Docker Desktop. Outras opções mostradas aqui, como o kind, possuem um problema com regras de acesso ao ingress criado no ambiente.

2.2 Via Kind

A instalação do Kind é bem simples e pode ser realizada pelo gerenciador de pacotes de cada sistema operacional.

2.2.1 Instalando o Kind no Windows

Utilizando o Chocolatey para instalar o Kind no Windows.

1
choco install kind -y

2.2.2 Instalando o Kind no MacOS

Utilizando o Brew para instalar o Kind no MacOS.

1
brew install kind

2.2.3 Instalando o Kind no Linux

Abrindo o terminal e executando o comando:

1
2
3
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.14.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

2.3 Via Microk8s

Apesar do MicroK8S ser possível instalar em qualquer sistema operacional, o ideal é instalar ele somente no Ubuntu, onde sua performance é melhor, para instalar o MicrK8S vamos abrir o terminal e instalá-lo via snap.

1
sudo snap install microk8s --classic

Após a instalação do microK8S, vamos habilitar alguns plugins com o comando abaixo para um correto comportamento do kubernetes:

1
microk8s enable dns storage

3 Preparando o cluster Kubernetes

Vamos instalar agora no kubernetes algumas aplicações importantes que nos auxiliam a realizar o correto funcionamento de funções que o Kubernetes nos oferece como por exemplo o Auto Scale de aplicações.

3.1 Instalando Metrics Server

Instalando o Metrics Server no Docker Desktop kubernetes e no Kind. Realize o download do seguinte arquivo:

https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Na linha 135, vamos adicionar a seguinte opção:

1
2
3
4
5
6
7
      - args:
        - --kubelet-insecure-tls
        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --metric-resolution=15s

Já para o MicroK8S, vamos habilitar o mesmo recurso através de plugins::

1
microk8s enable metrics-server

3.2 Instalando MetalLB

O MetalLB é um serviço de balanceamento de carga que permite que a aplicação seja balanceada de forma eficiente entre os nós do cluster. Ele é um serviço que cria um Load Balancer virtual dentro do nosso cluster e que é acessível externamente, facilitando assim a exposição de serviços do kubernetes.

Para o Docker Desktop não precisamos nos preocupar, pois ele já trás uma ferramenta interna que nos auxilia a expor serviços no localhost, precisando apenas liberar acesso a porta desejada no firewall do windows, mac ou linux se for preciso.

Para o windows, o Kind apresenta um problema, não liberando o acesso ao IP do MetalLB para utilização do ingress. Ele pode ser instalado, mas o principal meio de acesso seria feito por port forwarding.

Vamos instalar o MetalLB no Kind, faça o download do metallb.yaml, depois basta executar o comando abaixo:

1
kubectl apply -f metallb.yaml

Agora se você está usando o MicroK8S, vamos habilitar o mesmo recurso através de plugins:

1
microk8s enable metallb
Dica

Para o windows, o Kind apresenta um problema, não liberando o acesso ao IP do MetalLB para utilização do ingress. Ele pode ser instalado, mas o principal meio de acesso seria feito por port forwarding.

1
kubectl port forward -n NAMESPACE svc/NOME_SERVICO PORTA_LOCAL:PORTA_SERVICO

3.3 Instalando Nginx Ingress Controller

Agora chegou a hora de habilitar o ingress controller, para isso vamos instalar o nginx ingress controller em nosso kubernetes. Vamos utilizar agora o gerenciador de pacotes Helm para instalar o nginx ingress controller. Basta seguir os seguintes passos:

1
2
3
4
5
6
7
8
# Adicionar o repositório do nginx ingress controller
helm repo add nginx-ingress https://kubernetes.github.io/ingress-nginx

# Atualizar o Repositório
helm repo update

# Instalar o nginx ingress controller
helm upgrade --install --create-namespace -n nginx-ingress nginx-ingress nginx-ingress/ingress-nginx
Dica

Caso você esteja em um ambiente onde não possui acesso direto ao Docker Hub ou outras fontes, ou também queira uma instalação mais personalizada, você pode baixar do pacote seu arquivo de Values, identificar o que você precisa alterar e realizar as alterações necessárias.

1
helm get values nginx-ingress/nginx-ingress