Kubernetes en AWS con Kops

0
3184

Índice de contenidos


1. Entorno

Este tutorial está escrito usando el siguiente entorno:

  • Hardware: Slimbook Pro 2 13.3″ (Intel Core i7, 32GB RAM)
  • Sistema Operativo: LUbuntu 18.04


2. Introducción

Nota importante: seguir los pasos de este tutorial supone costes en la cuenta de AWS.

En este tutorial vamos a ver los pasos necesarios para montar un clúster de Kubernetes en producción en el cloud de Amazon gracias a Kops («Kubernetes Operations»).

Para ello vamos a seguir esta guía de Kumori Labs pero comentando los cambios que hay que hacer para adaptarla a las últimas versiones.

Para continuar con esta guía necesitamos como pre-requisitos:

  • Clientes de Vagrant, VirtualBox, Git y AWS cli instalados en nuestra máquina.
  • Una cuenta de administrador en AWS.
  • Un nombre de dominio real comprado en algún proveedor como el propio AWS, Google Domains, GoDaddy, etc…


3. Vamos al lío

Lo primero que vamos a hacer es crear una cuenta de usuario especifica para el manejo de Kubernetes con Kops.

Para ello haciendo uso del CLI de AWS creamos un grupo en AWS llamado «kops».

Ahora establecemos una variable de entorno con todos los permisos que otorgamos a los miembros de este grupo.

Ejecutamos una sentencia donde recorremos cada uno de los anteriores permisos y se lo asignamos al grupo kops.

Creamos el usuario «kops».

Ahora añadimos este usuario al grupo kops.

Y por último creamos el access key para el usuario «kops».

Este comando nos va a devolver un JSON con los campos SecretAccessKey y AccessKeyID que vamos a almacenar en las siguientes variables de entorno para interactuar con AWS.

También es necesario tener creadas las credenciales de SSH en nuestra máquina. Las cuales se almacenan en ~/.ssh/id_rsa.pub y ~/.ssh/id_rsa. Si trabajas habitualmente con Git casi seguro que ya las tienes creadas y si no es tan sencillo como ejecutar el siguiente comando dejando la ruta por defecto.

Es el momento de clonar el siguiente proyecto.

Un paso importante antes de arrancar Vagrant es abrir el fichero /scripts/provision-vagrant.sh para verificar las versiones y su compatibilidad. A mi me ha ido bien con las siguientes versiones:

En este punto ya estamos en disposición de arrancar el proyecto con Vagrant para que nos cree una instancia con todas las herramientas (awscli, kops, kubectl, …) instaladas y configuradas, así que ejecutamos:

Pasados unos minutos (tardará más porque se tendrá que descargar el box) ya podemos entrar en la máquina con el comando:

A partir de este punto todos los comandos los vamos a ejecutar desde la máquina de Vagrant que en el arranque ha cogido las credenciales del usuario «kops» y las claves de SSH.

El alcance de este tutorial es la creación del clúster de Kubernetes haciendo uso de Kops así que lo primero que vamos a hacer es preparar unas variables de entorno que nos ayudarán en el proceso.

Primero establecemos el valor para DOMAIN_NAME el cual tiene que ser el nombre de dominio o sudominio que tengamos comprado.

Después vamos a establecer un nombre de clúster que vamos a utilizar para identificarlo junto con el DOMAIN_NAME.

Ahora componemos el nombre completo del clúster.

Y establecemos la zona de disponibilidad donde queremos crear el clúster.

Otro paso previo necesario para la creación del clúster es crear un bucket de S3 que Kops va a utilizar para almacenar los ficheros de configuración necesarios. Para crearlo ejecutamos:

Y establecemos la variable de entorno.

Antes de crear el clúster vamos a verificar que nuestro nombre de dominio tiene disponible correctamente los servidores de DNS, ya que de lo contrario no podremos crear el clúster.

Para ello utilizamos la herramienta dig disponible en el box de Vagrant y ejecutamos:

Hasta que este comando no responda con algo similar a esto, no podrás crear el clúster.

Si esto no es así tendrás que hacer las modificaciones necesarias en tu servidor de dominio y esperar a que las modificaciones de DNS se propaguen para volver a intentarlo.

En caso de que sea correcto, ya podemos crear el clúster con el siguiente comando:

Este comando no crea físicamente los elementos en AWS sino que nos permite un preview de lo que va a hacer. Para confirmar que queremos crear los elementos (y empezar con el coste) tenemos que ejecutar:

Pasados unos minutos podremos ver en la web de AWS que se crean tres nuevas instancias, un master y dos nodos, con todos los grupos de permisos y el autoescalado configurado y que en la parte de Route 53 se han creado nuevas entradas de RecordSets dentro del Hosted Zone. Hasta que estas entradas no cambien la IP por defecto 203.0.113.123 por unas reales asociadas al nombre de dominio, el clúster no estará operativo.

Para comprobar que el clúster funciona, podemos ejecutar algún comando de Kubernetes como:

Y ver que nos responde con el nodo master y los dos nodos asociados.

Otro paso que podemos hacer es instalar el dashboard ejecutando:

Por defecto la seguridad del dashboard está habilitada así que tenemos que ejecutar el siguiente comando para ver el username y la password:

Ahora accedemos al dashboard a través del navegador a la URL: https://api.k8s.tunombredominio.org/api/v1/namespaces/kube-system/services/kubernetes-dashboard:/proxy/

Ingresamos el username y la password y ya estamos dentro, pero nos damos cuenta de que pinchando en las opciones de menú vemos que por seguridad todas las operaciones están deshabilitadas, con un mensaje del tipo: deployments.apps is forbidden: User «system:serviceaccount:kube-system:kubernetes-dashboard» cannot list deployments.apps in the namespace «default»

Para habilitar los permisos tenemos que crear un fichero dashboard-admin.yaml con el siguiente contenido:

Y lo ejecutamos sobre el clúster con el comando:

De esta forma ya podemos hacer las operaciones desde el dashboard aunque personalmente aconsejo realizarlas desde la línea de comandos.

Para eliminar el clúster, simplemente tenemos que ejecutar:

Y si no lo estamos usando para otra cosa, también podemos borrar el bucket asociado.


4. Conclusiones

Kubernetes se está convirtiendo en el estándar de facto para orquestar el despliegue de aplicaciones basadas en contenedores; que mejor que tenerlo disponible en el cloud gracias a AWS y Kops.

Cualquier duda o sugerencia en la zona de comentarios.

Saludos.

Dejar respuesta

Please enter your comment!
Please enter your name here