Kops: desplegando Kubernetes programáticamente
Desplegar y configurar un clúster de Kubernetes desde cero puede ser bastante complejo, especialmente si no se emplean servicios de Kubernetes gestionados y es necesario garantizar alta disponibilidad. Kops (Kubernetes Operations) es una herramienta open source que permite crear, configurar, gestionar y hacer upgrades de clústers de Kubernetes no gestionados sobre proveedores de nube pública. En este post, aprenderás como desplegar un clúster de Kubernetes en alta disponibilidad en AWS utilizando Kops.
Configurando Kops
El primer paso para utilizar Kops es instalar su CLI. Si estás utilizando una distribución de Linux de 64 bits, puedes utilizar los siguientes comandos, en cualquier otro caso échale un ojo a esta documentación.
Además tendrás que interaccionar con la API de AWS, por lo que es necesario instalar el AWS CLI. El conjunto de comandos a continuación permite instalarlo en máquinas Linux de 64 bits. Para cualquier otro tipo de SO, sigue estas instrucciones.
Kops va a necesitar un usuario programático de IAM en AWS, de forma que pueda desplegar la infraestructura necesaria para el clúster de Kubernetes. Éste usuario debe tener permisos totales sobre los servicios IAM, EC2, S3, VPC y Route53. Para hacerlo de forma rápida y sencilla, se pueden asociar al usuario las policies gestionadas AmazonEC2FullAccess, AmazonRoute53FullAccess AmazonS3FullAccess, IAMFullAccess y AmazonVPCFullAccess.
Cuando crees el usuario para Kops, selecciona la opción de acceso programático, ya que al hacerlo AWS generará un par de claves (Access Key y Secret Key) para que el CLI pueda acceder a la API de AWS. Asegúrate de guardar bien la Secret Key porque es la única vez que AWS la mostrará. Una vez que dispongas de ambas claves, configúralas como las claves por defecto del CLI de AWS ejecutando el siguiente comando. También puedes configurar la región de AWS por defecto. Selecciona la que quieras utilizar para tu clúster.
Para poder almacenar la configuración y el estado de los clústers, Kops va a necesitar un bucket S3. Es el momento de utilizar el AWS CLI con las nuevas credenciales configuradas para crear el bucket. Además, es recomendable activar el versionado en el bucket, ya que puede servir para recuperar el estado de los clústers en caso de fallo.
Creando el clúster
El script que encontrarás a continuación es una ayuda para la creación del clúster. Es posible seleccionar la versión de Kubernetes, el número de nodos masters y workers, el tipo de instancias, así como las zonas de disponibilidad en las que se desplegarán las instancias. Además se pueden configurar las diferentes opciones de red y el rango CIDR a utilizar. Para más información acerca de las opciones de red soportadas por Kops visita esta página. Además puedes utilizar flags adicionales para generar una salida en terraform o cloudformation de la infraestructura generada.
Modifica los parámetros en función de tus necesidades y ejecuta el script. Para este ejemplo, utilizaremos un cluster cuyo nombre acabará en .k8s.local, ya que es la configuración más sencilla, pues no requiere un servidor DNS externo para propagar las IPs de la API de Kubernetes. Si necesitas utilizar un servicio de DNS externo, puedes consultar la documentación avanzada de Kops. Al ejecutar el script, Kops generará la especificación del clúster, pero no lo desplegará aún.
Puedes comprobar la configuración del clúster ejecutando el siguiente comando. Puede utilizarse también para modificar clústers que ya han sido desplegados.
El comando edit abre el editor vi, que permite modificar los parámetros del cúster de acuerdo con las necesidades existentes. Si analizas con detalle la configuración en yaml mostrada por vi, podrás ver que los parámetros coinciden con los especificados en la llamada al comando create, y también se añaden algunos elementos que no se especificaron, pero son necesarios para que funcione el clúster, como las diferentes subredes de AWS.
Si ejecutas el siguiente comando, la especificación del clúster anteriormente inspeccionada generará el clúster en la cuenta de AWS. Tómatelo con calma porque suele tardar un poquito. Si el comando se ejecuta sin el flag –yes, mostrará una lista con todos los recursos que se deben crear para genera el clúster, pero los recursos no se crearán hasta que se añada el flag.
Cuando termine el proceso de creación, puedes echar un vistazo al dashboard de EC2 de AWS para ver tus nuevas instancias, 3 masters y 3 workers en este caso.
Una manera muy buena para comprobar si todo está funcionando como debería, es ejecutar los siguientes comandos de Kubernetes. El primero devuelve el estado de todos los elementos del plano de control, mientras que el segundo lista los nodos del clúster y sus estados.
Además, Kops incluye una utilidad para comprobar el estado de salud del clúster que puede ser de gran ayuda también.
Desmontando el chiringuito
Si quieres eliminar el clúster y todos los recursos asociados que se crearon con Kops, solo tienes que ejecutar el siguiente comando. Si se utiliza sin el flag –yes, muestra una lista de los recursos a destruir, pero no los elimina hasta que se añada el flag.
Conociendo mejor Kops
Kops es una herramienta bastante extendida para gestionar clústers de Kubernetes en entornos productivos, y proporciona bastante flexibilidad y configuraciones avanzadas que permiten personalizar cada clúster para cumplir los requisitos necesarios. Proporciona ayuda durante la creación, mantenimiento y upgrade de los clústers. No obstante, hay que tener en cuenta que Kops no soporta todas las opciones que soportaría una instalación de Kubernetes manual. Por ejemplo, kops no soporta todos los plugins de red existentes, al menos de una manera estable.
Si quieres saber más acerca de Kops, aquí te dejo su documentación.