Hace poco escríbi un post técnico donde contaba cómo puedes desarrollar, depurar y terminar desplegando una aplicación
Grails, SpringBot, o cualquier otro tipo de framework similar en un cluster Kubernetes, con la particularidad
de que en lugar de usar el típico entorno en local con minikube
, usaba un servicio cloud de Okteto
Con el servicio que ofrece Okteto no necesitaremos tener instalado en nuestra máquina prácticamente nada salvo un pequeño programa (okteto cli) que será el que nos conecte con nuestro namespace remoto. Además de ofrecer un entorno de desarrollo puramente kubernetes, este servicio nos permitirá desplegar la aplicación en un cluster real del que no necesitaremos saber grandes detalles, haciéndolo ideal para dar los primeros pasos de iniciación a Kubernetes.
El post completo, con todos los pasos y explicaciones lo puedes encontrar en https://okteto.com/blog/develop-and-deploy-a-grails-application-in-okteto-cloud/ así que en este post simplemente escribiré algunas indicaciones y mis impresiones después de unos meses "jugando" con él.
Sí, como has adivinado, el post que les envíe fue revisado y corregido por la gente de Okteto hasta darle una calidad excepcional. |
La primera vez que oí de Okteto fue hace unos meses, en una charla en el Codemotion de Madrid, donde Micael Gallego y Pablo Chico, y me pareció una herramienta muy buena para empezar a dar esos primeros pasos en Kubernetes que había intentando dar con Google Cloud Heroku, o Digital Ocean, con la ventaja de que Okteto me ofrecía un cluster de prestaciones "majas" de forma gratuíta
Puedes verla completa en:
Supongamos que tienes una idea para una aplicación semi-sencilla y que tu entorno de programación es Grails o SpringBot si no llegas a ser lo suficientemente bueno para usar Grails ;)
Sabes cómo desarrollarla en local, tienes tu PostgreSQL corriendo en tu máquina e incluso has dockerizado la aplicación pero sabes que subirla a producción es otra cosa. Dónde desplegar, cómo depurar, etc se vuelve arduo y a veces hay que poner una cantidad de dinero (pequeña pero hay que dar la tarjeta de crédito)
Como ya he dicho antes, con este servicio lo que vas a poder tener es un cluster en la nube manejado por Okteto donde poder desarrollar e incluso depurar tu aplicación y liberar versiones en producción
Los pasos a seguir para crear un entorno desarrollo serían, de forma resumida:
Tener una cuenta en Github
Crear una cuenta en Okteto (usa Github como autentificador, por eso la cuenta anterior)
Instalar en local el cliente okteto cli
hacer login con el comando okteto login
el cual baja las credenciales para poder conectarse a nuestra cuenta
crear un directorio vacío, copiar el fichero okteto.ini
y ejecutar okteto up
para crear un entorno de
desarrollo en el cluster
crear nuestra aplicación desde la shell que se crea. El servicio de Okteto lo que irá haciendo es sincronizar todos los ficheros remotos con nuestro local, de tal forma que cualquier cambio en un entorno se refleje en el otro
desarrollar nuestra aplicación con el añadido de que podemos acceder a ella vía localhost
o vía Intenet
una vez tenemos una versión para desplegar podemos dockerizarla directamente con okteto build
y aplicarla
al cluster con kubectl apply
Es decir: crear un entorno de desarrollo en el cluster, desarrollar y depurar en él nuestra aplicación como siempre y desplegarla (en Okteto o en otro proveedor de kubernetes)
Probablemente tu aplicación va a requerir cierta infraestructura como base de datos, un sistema de ficheros donde leer o escribir, etc y lamentablemente el post publicado en el blog de Okteto, al ser una guía de primeros pasos, NO cubre nada de esto.
Por suerte desplegar una base de datos PostgreSQL en Okteto es sencillo y se puede hacer vía web con un par de
clicks o bien vía comando kubectl
y con ayuda de Internet para ver ejemplos.
Actualmente NO se pueden crear volumenes persistentes vía web, aunque parece que está muy próxima una
actualización que lo permitirá, así que la reserva de volúmenes hay que hacerlo via kubectl
por lo que te tocará
aprender cómo definir uno. Por ejemplo, aplicando este fichero tendrías un volumen my-volume
que puedes
adjuntar a un pod:
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-volume
spec:
storageClassName: standard
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
y aplicarlo con `kubectl apply -f storage.yml'
Así mismo para no tener claves, passwords o api keys metidas en el código, necesitarás crear ConfigMap
y
SecretMap
, como por ejemplo:
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
stringData:
TELEGRAM_TOKEN: "783725094:AAAAAAAAAAAAAAAAAAAAAAAAAA"
y aplicarlo con `kubectl apply -f secret.yml'
El desarrollar directamente en un cluster te ofrece la oportunidad de ir avanzando la aplicación a la vez que vas definiendo la arquitectura (k8s) de la misma. Además el poder depurarla en este te permite afinar esas situaciones complicadas de definir mediante tests (lo cual no quiere decir que no tengas que seguir desarrollando test)
Así mismo, aunque no lo he podido probar, puede ser una buena forma de trabajar en un equipo.
Por último creo que es un entorno que te permite practicar de forma directa muchos conceptos de kubernetes para ir adquiriendo experiencia. Yo mismo, por ejemplo, tras este par de meses usándolo he comenzado un curso online de Kubernetes y prácticamente la mitad de los conceptos que se explican me he tenido que pelear con ellos.
2019 - 2024 | Mixed with Bootstrap | Baked with JBake v2.6.7 | Terminos Terminos y Privacidad