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!
Top comments (0)