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)