Tu cluster de Kubernetes en la nube en minutos con CIVO
Desde hace un tiempo que vengo mirando el desarrollo de un proveedor de servicios administrados en la nube, que su oferta principal se basa en Kubernetes, más precisamente en K3s.
Este proveedor se llama CIVO y recientemente tuvo como novedad el lanzamiento de una región en USA, cosa que, a mi particularmente, me resultaba sumamente importante y clave para considerarlos como plataforma para desarrollar ya que la latencia contra Londres (Su primera región) no resultaba para nada atractiva.
En este artículo, te quiero mostrar el proceso de creación de un nodo de K3s en CIVO, para esto, primero es necesario que creen una cuenta. La misma la pueden crear desde este enlace:
Atención, como la plataforma esta en periodo beta aún, la aceptación de la cuenta para poder probar el servicio sin cargo, pasa por un proceso de aprobación, en mi caso no tomo más que un par de días.
Comencemos a jugar
Cómo crear un cluster de K3s en CIVO
Una vez que tenemos nuestra cuenta, nos autenticamos desde acá:
Una vez que estamos adentro, veremos lo siguiente. Si nos fijamos, en este caso no tengo creado ningún cluster y si estás aceptado en el programa Beta, vas a tener un crédito de U$S70 por mes para probar el servicio.
Algo importante sobre el crédito es que es solo para usar para probar el servicio de K3s Administrado, no sirve para los recursos de IaaS que creemos (Cómo maquinas virtuales, storage, etc).
Lo siguiente que vamos a hacer es crear un Cluster, para eso, haremos un click en Launch my first cluster.
Lo que veremos aquí es lo siguiente:
Primero, debemos especificar un nombre para nuestro cluster, luego elegimos la cantidad de nodos que va a tener, en mi caso elegí tres, también debemos elegir una red, si buscas aislar diferentes clusters, podés crear redes adicionales. Para mi caso lo voy a dejar así.
Ahora viene lo importante, debemos elegir el tamaño de nuestros nodos. Con los U$S70 que viene de parte del programa Beta, podríamos desplegar tres nodos de 4GB de RAM, 2 vCPU, 50 GB SSD y 2 TB de transferencia. ¿Nada mal, verdad?
Si queremos algo más potente, podríamos armar un cluster de dos nodos de 8GB de RAM, ahí serían U$S80 dólares, con lo cual, lo que tendríamos que pagar serían U$S10, también, ¿nada mal, verdad?.
Una vez seleccionado el tamaño de los nodos, podemos bajar y vamos a ver algo que a mí particularmente me gusta mucho y son diferentes soluciones que podemos desplegar junto con nuestro cluster. Esto nos ahorrará un montón de tiempo y tal vez prueba y error al configurar estos servicios.
Redis, Traefik, MariaDB, MinIO, Prometheus, Longhorn, OpenFaas y la lista sigue. Si es que te interesa, seleccionas las soluciones que quieres y haces un click en Create Cluster.
En mi caso, solamente voy a seleccionar a Traefik y Metrics Server.
Mientras el nodo se crea, veremos algo como esto:
Cuando esta todo listo, se verá algo parecido a esto:
Lo que ven ofuscado es la dirección IP del master del cluster, el endpoint de la API y el nombre de DNS, pero podemos ver nuestros nodos listos para comenzar a trabajar.
A manejar este cluster se ha dicho
Una vez que nuestro cluster esta listo, debemos descargar nuestro Kubeconfig, con este archivo, es que vamos a poder manejar nuestro cluster desde nuestra maquina, no hay necesidad de acceder por SSH, aunque, para serles honestos, me gustaría tener un acceso para cuando el Cluster, eventualmente, deje de funcionar, sea por la razón que sea.
Antes de avanzar, déjenme mostrarles el ping que tengo desde Uruguay hasta la región de CIVO en USA, específicamente en NYC.
PING x.x.x.93 (x.x.x.93): 56 data bytes
64 bytes from x.x.x.93: icmp_seq=0 ttl=47 time=173.626 ms
64 bytes from x.x.x.93: icmp_seq=1 ttl=47 time=173.474 ms
64 bytes from x.x.x.93: icmp_seq=2 ttl=47 time=171.523 ms
64 bytes from x.x.x.93: icmp_seq=3 ttl=47 time=173.320 ms
64 bytes from x.x.x.93: icmp_seq=4 ttl=47 time=173.155 ms
64 bytes from x.x.x.93: icmp_seq=5 ttl=47 time=172.129 ms
64 bytes from x.x.x.93: icmp_seq=6 ttl=47 time=173.504 ms
64 bytes from x.x.x.93: icmp_seq=7 ttl=47 time=173.384 ms
Una vez que descargamos el archivo, vamos a ejecutar en nuestra terminar lo siguiente:
$ export KUBECONFIG=civo-my-awesome-cluster-kubeconfig
A partir de ahora, podemos ejecutar comandos kubectl, como sí estuviésemos conectados a la consola del servidor.
Lo primero que probamos para este caso es ejecutar un comando para que me muestre todos los pods que están corriendo:
$ kubectl get pods -A
El resultado, debería ser algo así:
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system metrics-server-86cbb8457f-mzgxz 1/1 Running 0 123m
kube-system local-path-provisioner-7c458769fb-tns68 1/1 Running 0 123m
kube-system coredns-854c77959c-frml7 1/1 Running 0 123m
Nuestros pods están corriendo, veamos como esta nuestro cluster:
$ kubectl get nodes
Todo parece estar super bien:
NAME STATUS ROLES AGE VERSION
k3s-my-awesome-cluster-578d8cec-master-c2da Ready control-plane,master 125m v1.20.2+k3s1
k3s-my-awesome-cluster-578d8cec-node-9460 Ready <none> 124m v1.20.2+k3s1
k3s-my-awesome-cluster-578d8cec-node-fc4f Ready <none> 125m v1.20.2+k3s1
Ya tenemos nuestro cluster listo para comenzar a trabajar, de ahora en más, podemos comenzar a instalarles aplicaciones.
Si como en mi caso, no seleccionaste ninguna aplicación para instalarla junto con la creación del cluster, ahora es buen momento para hacerlo.
Podés arrancar instalando Traefik:
Portainer, que te va a ayudar con la administración del host en el caso de que recién estés arrancando con Kubernetes:
Si necesitas más, puedes encontrar algunas recetas en este Github:
Para ir cerrando
Como ves, la creación de un cluster de Kubernetes es bastante sencilla, si me preguntas si te recomiendo CIVO, te digo que si, los precios son acordes, la conectividad también y encima los nodos están super optimizados, con lo cual el aprovechamiento de recursos resulta muy interesante.
Ahora es tu turno de darle una probada y comentarme que te pareció.