Bien hasta ahora hemos estado haciendo todo en nuestro entorno local de pruebas, veamos como podemos trabajar con un entorno en cloud desde nuestro terminal con kubectl
Kubectl es una herramienta de linea de comandos para trabajar con cualquier tipo de cluster de kubernetes, en nuestro caso nos hemos creado un minientorno de pruebas usando minikube. Al hacer la instalación de minikube y kubectl automáticamente se configura para que estemos usando ese entorno por defecto (el de minikube) pero nosotros podemos cambiarlo en cualquier comento.
Para ver la configuración que tenemos actualmente podemos ejecutar el comando
kubectl config viewEsto nos debe mostrar algo similar a

En esta configuración tenemos 4 cosas importantes:
- clusters: Información de todos los cluster que tenemos configurados, con su certificado, su dirección o hostname y el propio nombre que le hemos dado al cluster en cuestión
- contexts: Todos los contextos que tenemos configurados. Esto puede parecer redundante, pero no es así, realmente nosotros trabajamos a través de los contextos y estos apuntan a un cluster en específico. Esto es así porque podemos tener distintos usuarios de acceso según el contexto y podemos querer configurar un namespace diferente del de por defecto (namespace es solo una separación lógica de objetos dentro de kubernetes)
- current-context: El contexto seleccionado actualmente
- users: Usuarios con sus nombres y sus métodos de acceso.
Estos serían los puntos relevantes que tenemos que tener en cuenta a la hora de intentar conectarnos a otro cluster.
Como tal kubectl nos provee de los comandos necesarios para cambiar el contexto, ver el contexto actual, configurar nuevo cluster, cualquier cosa que necesitemos realmente. Por ejemplo:
kubectl config current-contextEstos serían todos los comandos bajo config

Visto más o menos que nos ofrece kubectl para seleccionar una configuración u otra veamos como hacer despliegue de kubernetes en Google
Hacia Google Cloud
Google cloud es el servicio cloud que mejor funciona con kubernetes (nació allí por lo que tiene sentido no?). En este sentido es el servicio con el que más rápido podremos configurar nuestro cluster de kubernetes, vamos a por ello:
Primero sería darnos de alta en google cloud, si no tenéis cuenta sería el momento de hacerlo. Una vez que tengamos nuestra cuenta lo que debemos hacer es instalar la linea de comandos de google (gcloud). Buscar en internet como realizar esta instalación en el caso de que no uséis brew para instalar paquetes, si lo tenéis solo es necesario hacer
brew install google-cloud-sdkPara empezar, lo primero que tenemos que hacer una vez instalado es iniciar la configuración de nuestro servicio:
gcloud initCon este estableceremos una configuración nueva o seleccionaremos una existente si ya la tenemos, aquí cada uno puede configurar lo que quiera y como quiera. Como tal yo tengo un proyecto creado que es: kuber-project-example
Si en algún caso os falla cualquier comando, puede ser por la versión que ha instalada brew del SDK, seguir estos pasos:
- Cambiar versión de python de la console
export CLOUDSDK_PYTHON=python2- Actualizar los componentes
gcloud components updateCon esto ya os funcionaria todo (o debería). Continuemos:
Ahora lo que haremos será seleccionar ese proyecto como base para el resto de comandos
gcloud config set project kuber-project-exampleY también es necesaria tener una región de computo configurada
gcloud config set compute/zone us-west1-aEn este punto puede que os pida seleccionar una cuenta de facturación (por si te vuelves loco creando cosas jajajajaja). Esto lo más fácil es irse a la consola de google, irse al menú de facturación y seleccionar una de las cuentas (o crearla)

Una vez seleccionada una cuenta en la consola de google, volvemos a ejecutar el comando, nos pedirá habilitar la API de "compute.googleapis.com", la habilitamos(tardará un poco) y ya nos confirmará que la configuración se ha actualizado o añadido

A continuación creamos nuestro cluster de kubernetes que también puede que nos de error porque necesitamos habilitar el servicio de contenedores en nuestro proyecto
gcloud container clusters create ninja-cluster --num-nodes=1
Por lo que si nos aparece este error habilitaremos ese servicio también
gcloud services enable container.googleapis.comY ya si todo va bien y no nos pide nada más ejecutamos de nuevo
gcloud container clusters create ninja-cluster --num-nodes=1
Y ya cuando termine el proceso nos confirmará los datos pertinentes según lo que hayamos solicitado

Ahora lo siguiente es configurar nuestro kubectl local para que apunte a este cluster.... que lo podíamos hacer a mano, pero en esta caso google nos provee de un comando mágico que nos añade la configuración a la kube config
gcloud container clusters get-credentials ninja-clusterBásicamente es solicitarle las credenciales sobre un cluster en específico y listo

Veamos la config
kubectl config view
Como vemos ahora tenemos otro cluster, otro contexto y otro usuario y si nos fijamos en nuestro current-context ya no estamos en minikube si no en el de google
Veamos que tenemos ahora con nuestro comando para ver los nodos
kubectl get nodes
Ahora tenemos nuestro nodo de cluster de kubernetes que le hemos indicado que cree. Probemos ahora a crear un deploy, usaremos el de ejemplo de kubernetes que es una imagen básica de google
kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0Y comprobemos que nos ha creado

Como tal podemos ejecutar en este caso todos los comandos que hemos ido viendo hasta ahora. Añadamos un service para poder acceder a nuestro deploy, en este caso vamos a añadir un service de tipo LoadBalancer (por fin jejejejje) que esto lo que hará será que google cloud nos creará un balanceador de carga y accederemos a nuestro pod desde él.
Una vez que tengamos ip externa

Ya deberíamos poder acceder a nuestro pod, ojo en este caso tenemos que acceder por IP y al puerto 8080 (si habéis usado mi ejemplo porque el puerto del comando ha sido el 8080)

En este caso podemos comprobar como de facil es trabajar con kubernetes en google cloud y la configuración no es complicada. Si queremos ver que realmente no es mentira podemos irnos a la consola de kubernetes y ver que es lo que tenemos creado

Y ya para aseguraros de que no miento podemos ver que nos ha creado también un balanceador de carga apuntando a nuestro cluster


Creo que queda más o menos claro como trabajar con la cloud de google y kubernetes, que es realmente sencillo. Con esto ya podríamos crear infraestructuras tan complejas como quisiéramos que con unos cuantos comandos ya se encarga google de hacerte la magia.
Y hasta aquí la parte de google cloud (NO SE OS OLVIDE BORRAR LAS COSAS DE GOOGLEEEEEE CLOUUUUD JEJEJJEJEJE)
AWS
Para hacerlo en aws...... pues realmente es más fácil que lo veáis directamente de la documentación porque es realmente igual de trivial, lo único que nos ofrece 2 opciones:
- Usar eksctl: Es una herramienta de línea de comandos específica de Amazon EKS (servicio de kubernetes de AWS) que es bastante fácil de usar y a su vez nos da la opción de crear nuestro cluster con Fargate o no. Ver esta opción
- Usar el CLI de AWS y la consola de administración: Aquí se hace uso de CloudFormation otro servicio interesante de AWS que nos facilita la orquestación de algunas cosas, esta opción es algo más manual porque es necesario manejar algunos permisos de IAM y cosas así pero se ve algo más de que es lo que estamos montando. Ver esta opción
Ambas opciones realmente son sencillas y para probar son más que suficientes, recomiendo que intentar cualquiera de ellas y ver que es realmente lo que se monta en la consola de AWS (BORRARLOOOOOO que al final cobran por tener el espacio en uso indefinidamente tras el año gratuito)
Bueno y hasta aquí lo que veremos de Docker y Kubernetes por el momento, han sido un montón de posts al respecto espero que os hayan parecido interesantes, se que nos faltaría ver como ser haría con Azure pero realmente es una plataforma que no me gusta mucho (es personal ojo no digo que sea mala ni nada por el estilo) por lo que no lo veremos aquí ni lo comentare, seguro que existe muy buena documentación al respecto para quien esté interesado.
Clausuro esta serie de posts pero no descarto en ningún momento plantear más cosas sobre kubernetes y docker en un futuro cercano, sin mucho más que deciros NOS VEMOS EN EL SIGUIENTEEEEEEE un abraazoooooooo
