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)