Montar clúster de K8S en AWS con Rancher 2.0

3
2801

Í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: Linux Mint 19
  • Rancher 2.0 (2.0.16)

2. Introducción

Que Kubernetes es el estándar de facto para el despliegue de contenedores Docker es algo que a estas alturas no le va a sorprender a casi nadie. Es por ello, que Rancher en su versión 2.0, ha dado una vuelta completa a toda su arquitectura para abrazar por completo Kubernetes y ofrecernos facilidades para la gestión centralizada de varios clústeres, así como su creación en distintos proveedores de cloud y bare metal.

En este tutorial vamos a ver cómo podemos empezar con Rancher 2.0 para crear un clúster de Kubernetes en la nube de Amazon y gestionarlo desde la interfaz de Rancher 2.0.

3. Vamos al lío

Nota: para seguir este tutorial necesitarás una cuenta de AWS y la configuración básica produce costes en la factura. El motivo de por qué se hace este tutorial en AWS es porque necesitamos de un proveedor de cloud para ofrecer el servicio de LoadBalancer y actualmente AWS es el cloud más utilizado a nivel empresarial.

Lo primero que necesitamos es una instancia EC2 donde vamos a desplegar Rancher 2.0. Para ello puedes seguir el tutorial «Crear una instancia EC2 en AWS» teniendo en cuenta la siguiente configuración.

En el primer paso seleccionamos un AMI con Ubuntu 16.04 aunque también nos puede servir Ubuntu 18.04

En el segundo paso seleccionamos un tipo de instancia mínimo de t2.medium con 2 cores y 4 GB de memoria RAM.

En el tercer paso seleccionamos la VPC y la subnet donde vamos a levantar la instancia y habilitamos el uso de auto asignar la IP pública.

En el cuarto paso establecemos el tamaño del volumen para la persistencia de datos. Vamos a establecer el máximo gratuito 29Gb pero hay que tener en cuenta que solo será gratuito durante el primer año.

En el quinto paso podemos establecer todos los tags que queramos, típicamente el «name» y el «project» para poder luego tener un criterio con el que agrupar los costes.

En el sexto paso necesitamos abrir los puertos 22, 80 y 443 para poder acceder a la home de Rancher 2.0 y conectar de forma remota vía SSH.

El resto de pasos están descritos en el tutorial antes mencionado.

Una vez conectados a la máquina recién creada vamos a instalar Rancher 2.0. Para ello antes tenemos que instalar Docker ejecutando los siguientes comandos:

$> sudo apt-get update
$> sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
$> curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$> sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$> sudo apt-get update
$> sudo apt-get install docker-ce=17.03.2~ce-0~ubuntu-xenial
$> sudo usermod -aG docker $USER

Una instalado Docker podemos ejecutar el siguiente comando para levantar un contenedor con Rancher 2.0.

$> docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher

En caso de querer hacerlo con un certificado de Let’s Encrypt gestionado ejecutamos:

$> docker run -d -p 80:80 -p 443:443 rancher/rancher:latest --acme-domain rancher.yourdomain.com

O si tenemos otro tipo de certificados:

$> docker run -d -p 80:80 -p 443:443 -v /home/rancher/cacerts.pem:/etc/rancher/ssl/cacerts.pem -v /home/rancher/key.pem:/etc/rancher/ssl/key.pem -v /home/rancher/cert.pem:/etc/rancher/ssl/cert.pem rancher/rancher:latest

Pasados unos momentos en la IP o dominio asociado con la instancia veremos la pantalla principal de Rancher pidiendo establecer una contraseña para el administrador.

Una vez establecida entramos en la interfaz de Rancher 2.0 donde podemos añadir un nuevo clúster.

En la siguiente pantalla podemos ver las opciones que tenemos para crear o importar un clúster existente. Para este tutorial vamos a seleccionar la opción de usar la infraestructura de AWS.

Cuando seleccionamos esta opción lo primero que tenemos hacer es darle un nombre al clúster y crear una plantilla que Rancher 2.0 utilizará para la creación de los distintos nodos en nuestra cuenta de AWS.

Obviamente lo primero que nos va a solicitar es que le indiquemos el «Access Key» y el «Secret Key» de nuestra cuenta de AWS así como la región donde queremos desplegar el clúster.

Se abrirá una nueva sección para poder seleccionar la zona y la VPC/Subnet donde queremos crear los nodos del clúster.

A continuación en la sección 3 podemos establecer el grupo de seguridad, dejamos el estándar que nos abrirá los puertos necesarios para la comunicación entre los nodos.

En la siguiente pantalla vamos a poder establecer las características de la máquina: el tipo de instancia (t2.medium), el tamaño de disco que vamos a establecer al límite gratuito establecido por AWS 29 GB (solo el primer año de vida), en el AMI vamos a dejar seleccionado Ubuntu, el ssh user que por defecto en ubuntu.

Añadimos un tag para darle nombre a la instancia:

Le damos nombre al template y pulsamos en «Create»:

Le damos un nombre, seleccionamos el número de instancias que queremos, el template recién creado y el rol del nodo entre etcd, control plane y worker. Para nuestro caso vamos a seleccionar una instancia que tengan todos los roles, es decir, que haga de master y de nodo. Esta no es la configuración ideal para poner en producción 😉

Nota: es importante señalar que la instancia de Rancher 2.0 solo hace de gestor de clústeres y en ningún caso se puede usar ni como master ni como nodo de ninguno de ellos.

Nota importante: en las opciones del clúster hay que asegurarse de seleccionar «Amazon» para que automáticamente se cree el ELB asociado al ingress ya que por defecto se establece a custom y no hará este proceso por nosotros.

Al pulsar en «Create», comienza el proceso automático de aprovisionamiento del nodo.

Nota:el siguiente apartado hay que ir haciéndolo mientras se aprovisiona el clúster, de lo contrario el proceso de aprovisionamiento informará de un error de permisos.

4. Configuración adicional para tener Load Balancer

El Load Balancer es la pieza de Kubernetes que nos permite poder acceder a los servicios desplegados desde fuera del clúster.

Esta pieza es la que está más pegada a la arquitectura del proveedor de cloud seleccionado y éste nos lo tiene que proporcionar.

Por ejemplo, AWS cuando detecta que queremos tener un Load Balancer lo que hace es proporcionarnos un ELB (Elastic Load Balancer) que permite el acceso al servicio definido de esta forma en el clúster.

Por lo general esta pieza lleva un coste añadido lo que hace que sea imprescindible el uso de Ingress para tener n rutas que pasen por un mismo Load Balancer. Si el Ingress tendríamos n Load Balancers con el coste que ello conlleva.

También ocurre que esta pieza hace que sea mucho más complicado tener un clúster en bare metal dado que tendremos que ser nosotros los que proporcionemos la forma de crear el Load Balancer a través de MetalLB siempre y cuando el proveedor de hosting tenga soporte.

Volviendo a nuestra instalación, para que el aprovisionamiento anterior tenga éxito, antes tenemos que realizar una serie de configuraciones en los elementos de AWS.

Primero, tenemos que ir a la instancia creada en AWS para el tag que se le ha dado al nodo creado, y que va a ayudar a Rancher 2.0 a determinar qué elementos de AWS están bajo su control.

Ese tag (key y value) tenemos que ponerlo manualmente en los siguientes elementos:

  • Todos las instancias creadas para el clúster, incluida la instancia que tiene Rancher 2.0.
  • La subnet donde está desplegado el clúster.
  • El grupo de seguridad cerrado para el clúster, en nuestro caso, rancher-nodes.

Además tenemos que asignarle los permisos a todos los nodos del clúster para poder crear elementos necesarios como los ELBs.

Para crear y asociar estos permisos al nodo tenemos que seleccionar el nodo deseado y seleccionar Actions –> Instance settings –> Attach/Replace IAM Role

En la siguiente pantalla pulsamos sobre «Create Role»:

Y seleccionamos un Role de tipo EC2 y pulsamos en «Next:Permissions»

Pulsamos sobre «Create Policy»:

Y nos vamos a la pestaña «JSON» donde pegamos el siguiente contenido y pulsamos en «Review policy»:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:Describe*",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "ec2:AttachVolume",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "ec2:DetachVolume",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": ["ec2:*"],
      "Resource": ["*"]
    },
    {
      "Effect": "Allow",
      "Action": ["elasticloadbalancing:*"],
      "Resource": ["*"]
    },
    {
      "Effect": "Allow",
      "Action": ["iam:CreateServiceLinkedRole"],
      "Resource": ["*"]
    }
  ]
}

Quedando de esta forma:

Pulsamos sobre «Review policy»

En la siguiente pantalla establecemos el nombre de la policy, damos una descripción y vemos que los permisos quedan asignados. Pulsamos en «Create Policy» para confirmar los cambios.

Ahora en la ventana anterior pulsamos en el botón de refresco y filtramos para seleccionar la «policy» recién creada y pulsamos en «Next: Tags».

En la siguiente pantalla podemos asignar los tags que consideremos y pulsamos en «Next: Review».

Por último, le damos un nombre y una descripción al rol y pulsamos en «Create Role» para aplicar los cambios.

Volvemos a la pantalla inicial y pulsamos en refresh, de esta forma debemos ver el nuevo rol que quedará asignado pulsando en «Apply».

Pasados unos minutos y si todo es correcto, veremos el siguiente estado en el clúster:

Y pulsando sobre el nombre del clúster, podemos acceder a un pequeño dashboard que nos ofrece información como el fichero de configuración necesario para configurar nuestro cliente kubectl y comenzar a utilizar nuestro nuevo clúster de Kubernetes.

5. Conclusiones

Rancher 2.0 es una herramienta muy a tener en cuenta cuando en nuestro stack tenemos uno o varios clústeres de Kubernetes, y en este tutorial hemos visto que también nos ayuda a la creación de clúster desde cero en AWS.

Cualquier duda o sugerencia en la zona de comentarios.

Saludos

3 COMENTARIOS

  1. Hola como estas? antes que nada excelente articulo esta muy bien explicado y todo con un gran detalle, valore tu esfuerzo y tu trabajo. Sabes segui paso el tema es cuando se empieza a aprovisionar me levanta la maquina rancher-node-1 pero al cabo de unos minutos le da terminate, y el proceso vuelve empieza a crear otra maquina y otra vez a los minutos le da terminate.
    Ya lo hice varias veces al proce que explicas pero no logro que el cluster levante. Tienes alguna idea de que me puede estar pasando? te agradezco

    • Hola Eduardo,

      Lo que me comentas me pasó, pero no trabajando con AWS, si no con contenedores de LXC en un Ubuntu Server. ¿Puedes comentar sobre que entorno los estás probando? También sería interesante conocer la versión de Docker que estás utilizando en el master y en los nodos; y cualquier otra información que consideres relevante.

      Muchas gracias

      Saludos

  2. Comentas que Rancher debe tener tambien el tag (key y value) del resto de los nodos. ¿ Seguro que es asi ? Es que mi idea era tener Rancher en una region de AWS y ser capaz de desplegar RKE2 en otras, y asi, dificil lo veo.. 🙁

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad