Aula 11 – K8S – Deploy na Digital Ocean com Terraform

Aula 11 – K8S – Deploy na Digital Ocean com Terraform

Voltar para página principal do blog

Todas as aulas desse curso

Aula 10                                           Aula 12

Redes Sociais do Código Fluente:

facebook

 


Scarlett Finch

Scarlett Finch é uma influenciadora virtual criada com IA.

Ela é 🎤 cantora e 🎶compositora pop britânica , 24 anos de idade, adora o Brasil e em especial o Rio de Janeiro.

Siga a Scarlett Finch no Instagram:

facebook

 


Conecte-se comigo!

LinkedIn: Fique à vontade para me adicionar no LinkedIn.

Ao conectar-se comigo, você terá acesso a atualizações regulares sobre desenvolvimento web, insights profissionais e oportunidades de networking no setor de tecnologia.

GitHub: Siga-me no GitHub para ficar por dentro dos meus projetos mais recentes, colaborar em código aberto ou simplesmente explorar os repositórios que eu contribuo, o que pode ajudar você a aprender mais sobre programação e desenvolvimento de software.

Recursos e Afiliados

Explorando os recursos abaixo, você ajuda a apoiar nosso site.

Somos parceiros afiliados das seguintes plataformas:

  • https://heygen.com/ – Eleve a produção de seus vídeos com HeyGen! Com esta plataforma inovadora, você pode criar vídeos envolventes utilizando avatares personalizados, ideal para quem busca impactar e conectar com audiências em todo o mundo. HeyGen transforma a maneira como você cria conteúdo, oferecendo ferramentas fáceis de usar para produzir vídeos educativos, demonstrações de produtos e muito mais. Descubra o poder de comunicar através de avatares interativos e traga uma nova dimensão para seus projetos. Experimente HeyGen agora e revolucione sua forma de criar vídeos!
  • letsrecast.ai – Redefina a maneira como você consome artigos com Recast. Esta plataforma transforma artigos longos em diálogos de áudio que são informativos, divertidos e fáceis de entender. Ideal para quem está sempre em movimento ou busca uma forma mais conveniente de se manter informado. Experimente Recast agora.
  • dupdub.com – Explore o universo do marketing digital com DupDub. Esta plataforma oferece ferramentas inovadoras e soluções personalizadas para elevar a sua estratégia de marketing online. Ideal para empresas que buscam aumentar sua visibilidade e eficiência em campanhas digitais. Descubra mais sobre DupDub.
  • DeepBrain AI Studios – Revolucione a criação de conteúdo com a tecnologia de inteligência artificial da DeepBrain AI Studios. Esta plataforma avançada permite que você crie vídeos interativos e apresentações utilizando avatares digitais gerados por IA, que podem simular conversas reais e interações humanas. Perfeito para educadores, criadores de conteúdo e empresas que querem inovar em suas comunicações digitais. Explore DeepBrain AI Studios.
  • Audyo.ai – Transforme a maneira como você interage com conteúdo auditivo com Audyo.ai. Esta plataforma inovadora utiliza inteligência artificial para criar experiências de áudio personalizadas, melhorando a acessibilidade e a compreensão de informações através de podcasts, transcrições automáticas e síntese de voz avançada. Ideal para profissionais de mídia, educadores e qualquer pessoa que deseje acessar informações auditivas de maneira mais eficiente e envolvente. Descubra Audyo.ai e suas possibilidades.
  • Acoust.io – Transforme sua produção de áudio com Acoust.io. Esta plataforma inovadora fornece uma suite completa de ferramentas para criação, edição e distribuição de áudio, ideal para artistas, produtores e empresas de mídia em busca de excelência e inovação sonora. Acoust.io simplifica o processo de levar suas ideias à realidade, oferecendo soluções de alta qualidade que elevam seus projetos de áudio. Experimente Acoust.io agora e descubra um novo patamar de possibilidades para seu conteúdo sonoro.
  • Hostinger – Hospedagem web acessível e confiável. Ideal para quem busca soluções de hospedagem de sites com excelente custo-benefício e suporte ao cliente robusto. Saiba mais sobre a Hostinger.
  • Digital Ocean – Infraestrutura de nuvem para desenvolvedores. Oferece uma plataforma de nuvem confiável e escalável projetada especificamente para desenvolvedores que precisam de servidores virtuais, armazenamento e networking. Explore a Digital Ocean.
  • One.com – Soluções simples e poderosas para o seu site. Uma escolha ideal para quem busca registrar domínios, hospedar sites ou criar presença online com facilidade e eficiência. Visite One.com.

Educação e Networking

Amplie suas habilidades e sua rede participando de cursos gratuitos e comunidades de desenvolvedores:

Canais do Youtube

Explore nossos canais no YouTube para uma variedade de conteúdos educativos e de entretenimento, cada um com um foco único para enriquecer sua experiência de aprendizado e lazer.

Toti

Toti: Meu canal pessoal, onde posto clips artesanais de músicas que curto tocar, dicas de teoria musical, entre outras coisas.

Lofi Music Zone Beats

Lofi Music Zone Beats: O melhor da música Lofi para estudo, trabalho e relaxamento, criando o ambiente perfeito para sua concentração.

Backing Track / Play-Along

Backing Track / Play-Along: Acompanhe faixas instrumentais para prática musical, ideal para músicos que desejam aprimorar suas habilidades.

Código Fluente

Código Fluente: Aulas gratuitas de programação, devops, IA, entre outras coisas.

Putz!

Putz!: Canal da banda Putz!, uma banda virtual, criada durante a pandemia com mais 3 amigos, Fábio, Tatá e Lula.

Scarlett Finch

Scarlett Finch: Cantora e influenciadora criada com IA.

PIX para doações

PIX Nubank

PIX Nubank

Download do Terraform


Aula 11 – K8S – Deploy na Digital Ocean com Terraform

Código da Aula no Github: Link

Introdução

Nessa aula criaremos um cluster K8S na Digital Ocean e colocaremos a aplicação FlappyBird que usamos na aula 09, para rodar no cluster, usando o Terraform, que começamos a ver na aula passada.

Crie sua conta na Digital Ocean

Faça seu cadastro através desse link: Digital Ocean para ganhar $200.00 dólares de crédito para usar na plataforma.

Configurar o ambiente DigitalOcean

  1. Obter o Token da API DigitalOcean:
    • Acesse o Painel DigitalOcean.
    • Gere um novo token de acesso pessoal (Personal Access Token) e copie-o.
  2. Instalar a CLI do DigitalOcean (doctl):
    • Siga as instruções para instalar a CLI da DigitalOcean no seu sistema conforme necessário.

Por exemplo, para fazer download da versão mais recente do doctl no windows, execute:

Invoke-WebRequest https://github.com/digitalocean/doctl/releases/download/v1.104.0/doctl-1.104.0-windows-amd64.zip -OutFile ~\doctl-1.104.0-windows-amd64.zip

Em seguida, extraia o binário executando:

Expand-Archive -Path ~\doctl-1.104.0-windows-amd64.zip

Por fim, em um terminal do PowerShell aberto como administrador, mova o binário doctl para um diretório dedicado e adicione-o ao caminho do seu sistema executando:

New-Item -ItemType Directory $env:ProgramFiles\doctl\
Move-Item -Path ~\doctl-1.104.0-windows-amd64\doctl.exe -Destination $env:ProgramFiles\doctl\
[Environment]::SetEnvironmentVariable(
    "Path",
    [Environment]::GetEnvironmentVariable("Path",
    [EnvironmentVariableTarget]::Machine) + ";$env:ProgramFiles\doctl\",
    [EnvironmentVariableTarget]::Machine)
$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine")

As instruções para instalação em outros sistemas operacionais estão aqui.

Verifique a versão


# Verificar se o doctl foi instalado corretamente
doctl version

Autenticar usando seu token de API


doctl auth init --access-token your_digitalocean_api_token_here

Criando o Cluster na Digital Ocean

Configurar os arquivos Terraform

Arquivo main.tf

O main.tf é o principal arquivo de configuração do Terraform onde você define os recursos que deseja criar. Neste caso, estamos criando um cluster Kubernetes na DigitalOcean.

./main.tf


resource "digitalocean_kubernetes_cluster" "example" {
  name    = var.cluster_name
  region  = var.region
  version = "latest"

  node_pool {
    name       = "default-pool"
    size       = var.node_size
    node_count = var.node_count
  }
}

output "cluster_name" {
  value = digitalocean_kubernetes_cluster.example.name
}

output "cluster_id" {
  value = digitalocean_kubernetes_cluster.example.id
}

output "cluster_endpoint" {
  value = digitalocean_kubernetes_cluster.example.endpoint
}

output "cluster_kubeconfig" {
  value     = digitalocean_kubernetes_cluster.example.kube_config
  sensitive = true
}

Explicação:

  • resource "digitalocean_kubernetes_cluster" "example": Define um recurso de cluster Kubernetes na DigitalOcean.
  • name, region, version: Especificam o nome, região e versão do cluster.
  • node_pool: Configura um pool de nós com nome, tamanho e contagem de nós.
  • output: Define as saídas que exportam informações sobre o cluster criado, como o nome, ID, endpoint e kubeconfig.

Arquivo provider.tf

O provider.tf especifica os provedores que o Terraform deve usar. No caso, estamos usando o provedor DigitalOcean.

./provider.tf 


terraform {
  required_providers {
    digitalocean = {
      source  = "digitalocean/digitalocean"
      version = "~> 2.0"
    }
  }
}

provider "digitalocean" {
  token = var.do_token
}
  • terraform { required_providers { ... } }: Especifica que o Terraform deve usar o provedor DigitalOcean.
  • provider "digitalocean": Configura o provedor DigitalOcean com um token de acesso (do_token), que é usado para autenticação.

Arquivo variables.tf

O variables.tf define variáveis que são usadas nos arquivos de configuração do Terraform. Essas variáveis tornam o código mais reutilizável e fácil de modificar.

./variables.tf


variable "do_token" {
  type        = string
  description = "API token for DigitalOcean"
  sensitive = true
}

variable "region" {
  type        = string
  description = "The region to deploy resources in"
  default     = "nyc1"
}

variable "cluster_name" {
  type        = string
  description = "The name of the Kubernetes cluster"
  default     = "example-cluster"
}

variable "node_size" {
  type        = string
  description = "The size of the nodes in the Kubernetes cluster"
  default     = "s-2vcpu-2gb"
}

variable "node_count" {
  type        = number
  description = "The number of nodes in the Kubernetes cluster"
  default     = 3
}
  • variable "do_token": Define a variável do_token para o token de acesso da API DigitalOcean.
  • variable "region": Define a variável region para especificar a região onde os recursos serão implantados.
  • variable "cluster_name": Define a variável cluster_name para o nome do cluster Kubernetes.
  • variable "node_size": Define a variável node_size para o tamanho dos nós do cluster.
  • variable "node_count": Define a variável node_count para a quantidade de nós no cluster.

Arquivo terraform.tfvars

  • do_token: O token de acesso da API DigitalOcean que você gerou.
  • region: A região onde os recursos serão implantados (por exemplo, “nyc1”).
  • cluster_name: O nome do cluster Kubernetes (por exemplo, “example-cluster”).
  • node_size: O tamanho dos nós no cluster (por exemplo, “s-2vcpu-2gb”).
  • node_count: O número de nós no cluster (por exemplo, 3).

./terraform.tfvars 


do_token = "your_digitalocean_api_token_here"
region       = "nyc1"
cluster_name = "example-cluster"
node_size    = "s-2vcpu-2gb"
node_count   = 3

Inicializar o Terraform


terraform init

Planejar a Aplicação


terraform plan

Aplicar as Configurações (Cria O cluster Efetivamente)


terraform apply

Do you want to perform these actions?
Terraform will perform the actions described above.
Only ‘yes‘ will be accepted to approve.

Enter a value: yes

Criação do kubeconfig.yaml no Windows/Powershell

Depois do cluster completamente criado, vamos gerar o kubeconfig.yaml:


terraform output -json cluster_kubeconfig | ConvertFrom-Json | ForEach-Object { $_.raw_config } > kubeconfig.yaml

Defina a variável de ambiente KUBECONFIG no Windows/PowerShell.

$env:KUBECONFIG = (Resolve-Path .\kubeconfig.yaml).Path

Criação do kubeconfig.yaml no Linux ou Mac


terraform output -json cluster_kubeconfig > kubeconfig.json
cat kubeconfig.json | awk -F'"raw_config":' '{print $2}' | sed 's/}]},//;s/^"//;s/"$//' > kubeconfig.yaml

Defina a variável de ambiente KUBECONFIG no Mac/Linux.

export KUBECONFIG=$(pwd)/kubeconfig.yaml

Cluster Criado

Execute o comando get nodes.

kubectl get nodes

Implantar o app Flappy Bird

Arquivos YAML Kubernetes para Implantação e Serviço.

./deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: flappy-bird
spec:
  replicas: 3
  selector:
    matchLabels:
      app: flappy-bird
  template:
    metadata:
      labels:
        app: flappy-bird
    spec:
      containers:
      - name: flappy-bird
        image: toticavalcanti/flappy-bird:latest
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"

./service.yaml

apiVersion: v1
kind: Service
metadata:
  name: flappy-bird-service
spec:
  selector:
    app: flappy-bird
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

Aplique os arquivos de configuração no cluster Kubernetes.


kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

Verifique o deployments, pods e services.


kubectl get pods
kubectl get deployments
kubectl get services

Use o comando abaixo para obter o endereço IP externo.

kubectl get services flappy-bird-service

Acesse o IP e veja se o Flappy Bird vai rodar certinho!

Destruindo o Cluster

Para destruir o cluster é só usar:

terraform destroy

Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only ‘yes‘ will be accepted to confirm.

Enter a value: yes

Saída:

digitalocean_kubernetes_cluster.example: Destroying… [id=994e0c55-fadc-41b7-bf4a-dcd4d8c2a324]
digitalocean_kubernetes_cluster.example: Destruction complete after 2s

Destroy complete! Resources: 1 destroyed.

Por essa aula é só.

Até a próxima!

Aula 10                                           Aula 12

Category: DevOps, Kubernates
About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>