Publicando uma api GO no Digital Ocean Kubernetes
Vinícius Boscardin
Posted on April 18, 2022
Fala galerinha, veremos aqui como realizar um deploy de uma api go no cluster de Kubernetes da Digital Ocean.
Kubernetes (K8s) é um produto Open Source utilizado para automatizar a implantação, o dimensionamento e o gerenciamento de aplicativos em contêiner.
Bora lá
Primeiramente precisamos ter uma api funcional com Dockerfile configurado, né? rsrs Se você não sabe como criar uma api Go acompanha a série de Clean Architecture com Golang no dev.to.
Container Registry
Com sua api pronta bora colocar ela em um Container Registry privado. Usaremos também o serviço da Digital Ocean.
Crie uma conta na Digital Ocean e vá ao menu de Container Registry.
Depois criaremos um token de acesso para utilizarmos na autenticação do command line.
Gere o token e guarde ele em um local seguro!
Feito isso, baixo o command line interface da Digital Ocean (doctl) aqui: https://docs.digitalocean.com/reference/doctl/how-to/install/
Com o doctl instalado bem bonitinho. Vamos logar no nosso container registry.
doctl auth init -t <access_token>
doctl registry login
De volta na página do container registry, copie o endereço disponibilizado do repositório.
No terminal, na pasta da aplicação com o Dockerfile configurado rode:
docker build -t registry.digitalocean.com/booscaaa/clean-go .
docker push registry.digitalocean.com/booscaaa/clean-go
E pronto! Sua imagem está disponível no container registry da Digital Ocean.
Kubernetes
Vamos criar nosso primeiro cluster de Kubernetes, para isso vamos em:
Siga as instruções do Getting Started:
E por fim aguarde o cluster terminar de ser criado.
Com o cluster criado, vamos autenticar nosso registry para que o kubectl consiga baixar a imagem sem nenhum problema.
doctl registry kubernetes-manifest | kubectl apply -f -
kubectl create secret generic do-registry --from-file=.dockerconfigjson=docker-config.json --type=kubernetes.io/dockerconfigjson
Vamos criar um arquivo em kubernetes/api.yaml
apiVersion: v1
kind: Service
metadata:
name: api
spec:
ports:
- protocol: TCP
port: 80
targetPort: 3000
selector:
app: api
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
spec:
replicas: 4
selector:
matchLabels:
app: api
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: registry.digitalocean.com/booscaaa/clean-go
resources:
limits:
memory: "128Mi"
cpu: "100m"
ports:
- containerPort: 3000
Para aplicar a alteração vamos rodar.
kubectl apply -f kubernetes/api.yaml
Para ver o pod e os services rodando:
kubectl get pods
kubectl get services
Instalando o Nginx Ingress
Nossa api ainda não tem acesso externo, para isso vamos configurar o Nginx ingress para kubernetes no arquivo kubernetes/ingress.yaml
.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
spec:
ingressClassName: nginx
rules:
- http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: api
port:
number: 80
Para aplicar as alterações basta rodar:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.2/deploy/static/provider/cloud/deploy.yaml
kubectl apply -f kubernetes/ingress.yaml
O que isso faz?
Isso acabou de criar um load balancer na Digital Ocean e expôs nossos services internos para a porta 80 do ip externo do load balancer.
Lembrando que os recursos a serem explorados com o Nginx Ingress são diversos. Um deles e muito útil é configurar o domínio/subdomínio da aplicação e, com o cert manager, gerar os certificados de SSL automaticamente.
E pronto. Api funcionado com o kubernetes!
Posted on April 18, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.