Pollito Blog
April 10, 2024

Spring Cloud: Deployment en GKE

Posted on April 10, 2024  •  3 minutes  • 624 words  • Other languages:  English

Esta es una continuación de Spring Cloud: api-gateway y naming-server .

¡Chequea el código!

Puede verificar el código en los siguientes repositorios (en todos ellos, siga la rama feature/gke. Puede encontrar otras ramas, soy yo experimentando otras soluciones).

Recuerde siempre eliminar tu clúster cuando salga

¡ELIMINAR EL CLUSTER! ¡ELIMINAR EL CLUSTER! No olvides eliminar tu cluster cuando salgas. Los clusters queman dinero simplemente existiendo. No es tan caro, pero es desperdicio.

Al escribir este blog decidí irme a dormir y continuar al día siguiente, dejando un cluster funcionando durante casi 10 horas. spending

Crear un clúster de GKE

Asumo que tienes todo en tu Google Console listo para empezar. Si no, Google es tu mejor amigo aquí.

Un clúster se puede crear de varias maneras. Decidí ir a ChatGPT, expliqué lo que quería implementar para mantenerlo económico y obtuve este comando glocud cli:

gcloud beta container --project "fujiwara-383901" clusters create "pollito-demo-cluster" --no-enable-basic-auth --cluster-version "1.27.8-gke.1067004" --release-channel "regular" --machine-type "e2-medium" --image-type "COS_CONTAINERD" --disk-type "pd-ssd" --disk-size "50" --metadata disable-legacy-endpoints=true --scopes "https://www.googleapis.com/auth/devstorage.read_only","https://www.googleapis.com/auth/logging.write","https://www.googleapis.com/auth/monitoring","https://www.googleapis.com/auth/servicecontrol","https://www.googleapis.com/auth/service.management.readonly","https://www.googleapis.com/auth/trace.append" --num-nodes "3" --logging=SYSTEM,WORKLOAD --monitoring=SYSTEM --enable-ip-alias --network "projects/fujiwara-383901/global/networks/default" --subnetwork "projects/fujiwara-383901/regions/europe-southwest1/subnetworks/default" --no-enable-intra-node-visibility --default-max-pods-per-node "110" --security-posture=standard --workload-vulnerability-scanning=disabled --no-enable-master-authorized-networks --addons HorizontalPodAutoscaling,HttpLoadBalancing,GcePersistentDiskCsiDriver --enable-autoupgrade --enable-autorepair --max-surge-upgrade 1 --max-unavailable-upgrade 0 --enable-autoprovisioning --min-cpu 1 --max-cpu 2 --min-memory 2 --max-memory 6 --enable-autoprovisioning-autorepair --enable-autoprovisioning-autoupgrade --autoprovisioning-max-surge-upgrade 1 --autoprovisioning-max-unavailable-upgrade 0 --autoscaling-profile optimize-utilization --enable-vertical-pod-autoscaling --enable-shielded-nodes --zone "europe-southwest1-a"

Adáptese a su proyecto y región preferida.

Implementar cosas en el clúster

El orden en el que se implementan los microservicios realmente no importa, pero para evitar errores innecesarios en los registros, sigo este orden:

  1. Obtenga gcloud CLI y kubectl en tu máquina.

  2. Haga clic en “Establecer conexión”. Eso nos dará un comando de gcloud.

establish connection

  1. Pegue el comando en su herramienta cmd favorita.

paste

  1. Navegue hasta donde está despliegue.yaml. Decidí poner el archivo en implementación/kubernetes/prod.

  2. Ejecute

kubectl apply -f deployment.yaml

Deberías obtener algo como esto:

E0411 12:36:32.181316   19120 memcache.go:287] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
E0411 12:36:32.280107   19120 memcache.go:121] couldn't get resource list for metrics.k8s.io/v1beta1: the server is currently unable to handle the request
Warning: autopilot-default-resources-mutator:Autopilot updated Deployment default/naming-server: adjusted resources to meet requirements for containers [spring-cloud-v2-naming-server] (see http://g.co/gke/autopilot-resources)
deployment.apps/naming-server created
service/naming-server created

Ahora, repitamos el proceso de implementación para el resto de microservicios.

Después de unos minutos, ejecute:

kubectl get pods

para comprobar que todo funciona correctamente.

NAME                              READY   STATUS    RESTARTS   AGE
api-gateway-85cd954d8-57kp2       1/1     Running   0          10m
microservice-a-6978854d7b-24j45   1/1     Running   0          58m
microservice-b-6f6c5944b4-tgcvb   1/1     Running   0          17m
naming-server-f4795fd84-q9l8x     1/1     Running   0          14m

Probémoslo

Para obtener la URL, ejecute:

kubectl get svc
NAME             TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)          AGE
api-gateway      LoadBalancer   10.111.196.131   34.175.79.29   8765:30836/TCP   114m
kubernetes       ClusterIP      10.111.192.1     <none>         443/TCP          126m
microservice-a   ClusterIP      10.111.196.50    <none>         8081/TCP         63m
microservice-b   ClusterIP      10.111.194.149   <none>         8080/TCP         110m
naming-server    ClusterIP      10.111.193.218   <none>         8761/TCP         116m

Verás que solo uno tiene una EXTERNAL-IP, api-gateway. Tome esa URL, agregue el puerto al final, agregue /microservice-a y deberíamos obtener un resultado.

curl --location '34.175.79.29:8765/microservice-a'

postman

Felicitaciones, ahora implementaste tus cosas en GKE.

No olvides eliminar el clúster cuando hayas terminado.

Recordatorio :D

Próximos pasos

Implementarlo en Cloud Run, ¿por qué no?

Hey, check me out!

You can find me here