Cómo crear un clúster de Kubernetes con la AWS EKS CLI

Si eres un desarrollador, normalmente querrías implementar aplicaciones en contenedores en Kubernetes. Pero la pregunta es, ¿cómo? ¿Por qué no intentar usar la CLI de AWS EKS?

En este tutorial, aprenderás cómo configurar la CLI de AWS EKS para crear un clúster de Kubernetes, para que puedas centrarte en tu código en lugar de administrar la infraestructura.

Sigue leyendo y comienza a crear tu clúster hoy mismo!

Prerrequisito

Este tutorial será una demostración práctica. Si quieres seguirlo, asegúrate de tener una PC y una cuenta de AWS. Si no tienes una cuenta de AWS, está disponible una cuenta gratuitaen el nivel gratuito.

Creación de un usuario administrador

Antes de crear un clúster de Kubernetes, crearás un usuario administrador. Un usuario administrador te permite iniciar sesión en la consola de AWS para configurar tu clúster. Inicia este tutorial creando un usuario con permisos de administrador a través de la Consola de AWS.

1. Inicia sesión en tu Consola de AWS y accede a tu panel de IAM.

Haz clic en Usuarios (panel izquierdo) -> Agregar usuarios (arriba a la derecha) como se muestra a continuación para iniciar la adición de usuarios.

Initializing User Creation

2. A continuación, proporciona un nombre de usuario en el campo Nombre de usuario, aquí se utiliza K8-Admin, marca la opción Clave de acceso: acceso programático y haz clic en Siguiente: Permisos.

Estás seleccionando la opción Clave de acceso: acceso programático ya que es accesible de forma programática. Como resultado, puedes usar una aplicación para comunicarte directamente con AWS sobre qué acciones tomar.

Configuring User Details

3. Haz clic en la opción Adjuntar directamente las políticas existentes, marca la política AdministratorAccess y haz clic en Siguiente: Etiquetas.

La política AdministratorAccess otorga al usuario (K8-Admin) acceso completo a AWS, y más como sigue:

Setting up AdministratorAccess policies

4. Haz clic en Siguiente: Revisar para omitir la adición de etiquetas.

Skipping the tags screen

5. Por último, revisa los detalles del usuario y haz clic en Crear usuario para finalizar la creación del usuario administrador.

Creating the admin user

Una vez que la creación del usuario administrador esté completa, recibirás un mensaje de Éxito en la parte superior de la pantalla, como el siguiente. Toma nota de la Identificación de la clave de acceso y de la clave de acceso secreta ya que utilizarás estas claves para iniciar sesión más tarde.

Previewing the admin user keys

Lanzando una instancia EC2

Ahora que has creado el K8-Admin, puedes crear tu primera instancia EC2. Utilizarás esta instancia como tu nodo maestro, donde ejecutarás tus comandos para crear el clúster.

1. Ve a tu panel de EC2, haz clic en EC2, luego en Lanzar instancias en la parte más a la derecha de la página. Al hacerlo, tu navegador se redireccionará a una página donde podrás elegir una Imagen de Máquina Amazon (AMI) (paso dos).

Launching an EC2 Instance

2. A continuación, haz clic en Seleccionar junto a (más a la derecha) la Amazon Linux 2 AMI (HVM) de la lista, como se muestra a continuación.

Amazon Linux 2 AMI (HVM) proporciona el kernel de Linux 5.10 ajustado para un rendimiento óptimo de la última generación de hardware. Esta AMI también tiene muchas características requeridas por los clústeres de Kubernetes a nivel de producción.

Selecting Amazon Linux 2 AMI (HVM)

3. Deja la configuración por defecto (t2.micro) para el tipo de instancia y haz clic en Siguiente: Configurar detalles de la instancia para configurar la instancia.

Previewing the instance type

4. Habilita la opción de Asignación automática de IP pública y luego Siguiente: Agregar almacenamiento. Esta opción asegura que cada uno de tus contenedores pueda acceder a la IP pública de tu nodo maestro de Kubernetes y tus instancias EC2.

Configuring instance details

5. Mantén la configuración predeterminada (Root) en la página de Agregar Almacenamiento y haz clic en Siguiente: Agregar etiquetas. El volumen Root es necesario para leer y escribir datos desde dentro de la instancia.

Configuring the storage

6. Omite la adición de etiquetas y haz clic en Siguiente: Configurar Grupo de Seguridad.

Previewing the tags

7. Mantén las opciones predeterminadas en el grupo de seguridad, como se muestra a continuación, y haz clic en Revisar y Lanzar.

Previewing the Security Group

8. Revisa los detalles del lanzamiento de la instancia y haz clic en Lanzar para iniciar la instancia. Aparecerá una ventana emergente donde puedes elegir seleccionar un par de claves existente o crear uno nuevo (paso nueve).

Launching an instance

9. En la ventana emergente, configura el par de claves de la siguiente manera:

  • Selecciona Crear un nuevo par de claves en el menú desplegable.
  • Elige RSA como el Tipo de par de claves.
  • Proporciona tu Nombre de par de claves preferido. Pero para este tutorial, el nombre del par de claves está configurado como my-nvkp.
  • Haz clic en Descargar Par de Claves, luego en Lanzar Instancias.
Creating a new key pair

Tu instancia puede tardar uno o dos minutos en lanzarse por completo. Una vez que la instancia esté en ejecución, la verás listada en tu panel de EC2, como se muestra a continuación.

Previewing the newly-created instance

Configuración de la Herramienta AWS CLI

Ahora que tu instancia está en ejecución, es hora de configurar las herramientas de línea de comandos (CLI). Utilizar las herramientas de CLI en conjunto con tu cuenta de AWS es esencial para crear tu clúster de Kubernetes.

1. Desde tu panel de EC2, marca la casilla para seleccionar la instancia, como se muestra a continuación. Haz clic en Connect para iniciar la conexión con la instancia.

Connecting to the Ec2 instance.

2. A continuación, haz clic en el botón Connect para conectarte a la instancia que seleccionaste previamente en el paso uno.

Connecting to the instance

Una vez que te hayas conectado a tu instancia EC2, tu navegador se redirigirá a la terminal interactiva que se muestra a continuación como tu sesión SSH temporal con tu instancia EC2.

La terminal interactiva te permite conectarte a la línea de comandos y ejecutar comandos administrativos en tu nueva instancia.

Previewing the interactive terminal

3. Ejecuta el comando aws a continuación para verificar la versión de tu CLI.

aws --version

Como puedes ver en la salida a continuación, estás ejecutando la versión 1.18.147 en tu instancia Amazon Linux 2, que está desactualizada. Necesitas descargar e instalar AWS CLI versión 2+ para asegurarte de que puedas acceder a todas las funciones de Kubernetes (paso tres).

Checking the AWS CLI version

4. Ahora, ejecuta el comando curl a continuación para descargar la herramienta CLI v2+ y guárdala en un archivo zip llamado awscliv2.zip.

 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" 
Downloading the CLI tool v2+

5. Ejecuta los siguientes comandos para descomprimir el archivo descargado y determinar dónde está instalada la versión obsoleta de AWS CLI.

unzip awscliv2.zip
which aws

Como puedes ver en la salida a continuación, la versión obsoleta de AWS CLI está instalada en /usr/bin/aws. Necesitas actualizar esta ruta con la versión actualizada.

Updating outdated AWS CLI

6. Ejecute el comando a continuación para realizar lo siguiente y actualizar la ruta de instalación de AWS CLI en su instancia:

  • Instale las herramientas actualizadas de AWS CLI en su instancia de Amazon Linux 2 (sudo ./aws/install).
  • Establezca el directorio (--install-dir /usr/bin/aws-cli) donde instalar las herramientas CLI. Al hacerlo, le permite transferir la AWS CLI actualizada a otras instancias sin reinstalar las herramientas CLI.
  • Actualice (--update) su entorno de shell actual con la nueva ruta para las herramientas AWS CLI si hay una en su entorno actual.
sudo ./aws/install --bin-dir /usr/bin --install-dir /usr/bin/aws-cli --update
Installing the CLI tool v2

7. Vuelva a ejecutar el comando aws --version a continuación para verificar que la AWS CLI actualizada esté instalada correctamente.

aws --version

La versión de AWS CLI instalada es 2.4.7, como se muestra a continuación, que es la última versión de AWS CLI 2.4.7 en el momento de escribir este documento.

Checking the AWS CLI updated version

8. A continuación, ejecute el comando aws configure para configurar su instancia con las nuevas herramientas AWS CLI.

aws configure

Ingrese los valores apropiados en los mensajes como se muestra a continuación:

  • ID de clave de acceso de AWS [Ninguno] – Ingrese el ID de clave de acceso que anotó en la sección anterior “Creación de su usuario administrador”.
  • Clave de acceso secreta de AWS [Ninguno] – Ingrese la clave de acceso secreta que anotó en la sección anterior “Creación de su usuario administrador”.
  • Nombre de región predeterminado [Ninguno] – Seleccione una región admitida, como us-east-1.
  • Formato de salida predeterminado [Ninguno] – Ingrese json, ya que el formato JSON es el estándar preferido para usar con Kubernetes.
Configuring the AWS Environment

Configuración de la Herramienta de Línea de Comandos Amazon EKS (eksctl)

Como tu objetivo es crear un clúster de Kubernetes con la CLI de AWS EKS, también configurarás la herramienta de línea de comandos Amazon EKS (eksctl). Esta herramienta te permite crear y gestionar clústeres de Kubernetes en Amazon EKS.

1. Instala la última versión de la herramienta de línea de comandos de Kubernetes (kubectl) en tu instancia de EC2. Esta herramienta te permite ejecutar comandos contra clústeres de Kubernetes.

2. A continuación, ejecuta el comando curl a continuación para recuperar la última versión de eksctl desde GitHub a tu directorio /tmp como un archivo .tar.gz, luego extrae el contenido del archivo en el directorio /tmp.

Ejecuta los siguientes comandos para realizar lo siguiente:

  • Recuperar la última versión de eksctl desde GitHub (--location) como un archivo .tar.gz ("<https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$>(uname -s)_amd64.tar.gz")
  • Extraer el contenido del archivo al directorio /tmp (tar xz -C /tmp), mientras que la bandera --silent suprime la salida de progreso del comando.
  • Mover (sudo mv) el binario de eksctl (/tmp/eksctl) al directorio donde instalaste AWS CLI (/usr/bin)
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/bin

3. Por último, ejecuta el comando a continuación para confirmar que has instalado eksctl correctamente.

eksctl version

La salida a continuación confirma que has instalado eksctl correctamente.

Checking the eksctl CLI tool version

Si eres nuevo en eksctl, puedes ejecutar el comando a continuación para obtener una lista de todos los comandos admitidos de eksctl y su uso.

eksctl --help
Previewing the eksctl help page

Provisión de tu clúster de EKS

Ahora que has configurado eksctl, puedes provisionar tu primer clúster de EKS con los comandos de eksctl.

Ejecuta el comando eksctl a continuación para crear tu primer clúster y realizar lo siguiente:

  • Crea un clúster de Kubernetes de 3 nodos llamado dev con un tipo de nodo como t3.micro y región como us-east-1.
  • Define un mínimo de un nodo (--nodes-min 1) y un máximo de cuatro nodos (--nodes-max 4) para este grupo de nodos administrado por EKS. El grupo de nodos se llama standard-workers.
  • Crea un grupo de nodos con el nombre standard-workers y selecciona un tipo de máquina para el grupo de nodos standard-workers.
eksctl create cluster --name dev --version 1.21 --region us-east-1 --nodegroup-name standard-workers --node-type t3.micro --nodes 3 --nodes-min 1 --nodes-max 4 --managed
Provisioning your EKS Cluster

2. Ve a tu panel de CloudFormation para ver las acciones realizadas por el comando. El comando eksctl create cluster utiliza CloudFormation para aprovisionar la infraestructura en tu cuenta de AWS.

Como puedes ver a continuación, se está creando una pila de CloudFormation llamada eksctl-dev-cluster. Este proceso puede tardar 15 minutos o más en completarse.

Previewing the eksctl-dev-cluster stack.

3. Ahora, ve a tu panel de EKS y verás un clúster llamado dev aprovisionado. Haz clic en el enlace dev para acceder al panel de control del clúster EKS de dev.

Navigating to the dev EKS Cluster dashboard.

A continuación, puedes ver los detalles del clúster EKS de dev, como el Nombre del nodo, Tipo de instancia, Grupo de nodos y Estado.

Previewing the dev EKS Cluster dashboard.

4. Cambia a tu panel de EC2 y verás que hay cuatro nodos en ejecución, con tres de ellos teniendo el rol t3.micro en tu cuenta de AWS (tres nodos de trabajo y un nodo maestro).

Previewing the EC2 dashboard.

5. Por último, ejecuta el siguiente comando para actualizar la configuración de kubectl (update-kubeconfig) con el punto final, el certificado y las credenciales de tu clúster.

aws eks update-kubeconfig --name dev --region us-east-1
Updating kubectl config

Implementación de una aplicación en el clúster EKS

Has creado tu clúster EKS y has confirmado que está funcionando perfectamente. Pero por ahora, el clúster EKS simplemente está ahí. Para esta demostración, aprovecharás el clúster EKS desplegando una aplicación NGINX.

1. Ejecute el siguiente comando yum para instalar git aceptando automáticamente todas las indicaciones (-y) durante la instalación.

sudo yum install -y git
Installing Git

2. A continuación, ejecute el comando git clone a continuación para clonar los archivos de configuración desde el repositorio de GitHub a su directorio actual. Utilizará estos archivos para crear una implementación de NGINX en sus pods y crear un balanceador de carga (ELB).

git clone https://github.com/Adam-the-Automator/aws-eks-cli.git
Cloning the configuration files

3. Ejecute los siguientes comandos para moverse al directorio ata-elk, y crear (kubectl apply) un servicio para NGINX (./nginx-svc.yaml).

# Cambiar directorio a ata-elk
cd ata-elk
# Aplicar la configuración en ./nginx-svc.yaml a un pod
kubectl apply -f ./nginx-svc.yaml
Creating a service for NGINX

4. A continuación, ejecute el comando kubectl get service para verificar el estado de su servicio NGINX.

kubectl get service

Como puede ver a continuación, el tipo de servicio es un balanceador de carga, y Kubernetes creó un servicio (nginx-svc), que es su implementación de NGINX. También puede ver el nombre de host DNS externo del balanceador de carga creado por EKS en la columna IP EXTERNA.

Anota el nombre de host DNS externo del balanceador de carga ya que lo necesitarás más tarde para probar el balanceador de carga.

Checking the status of your NGINX

5. Ejecute el comando kubectl a continuación para implementar los pods de NGINX.

kubectl apply -f ./nginx-deployment.yaml
Deploying the NGINX pods

6. Ejecute los siguientes comandos kubectl get para verificar el estado de su despliegue NGINX y su pod NGINX correspondiente.

kubectl get deployment
kubectl get pod

Como puede ver en la salida a continuación, hay tres pods en su despliegue, y todos están en ejecución.

Checking the status of the NGINX deployment and pods

7. A continuación, ejecute el comando kubectl get node para verificar el estado de sus nodos de trabajo.

kubectl get node
Check the status of your worker nodes

8. Ahora, ejecute el comando curl a continuación para probar su equilibrador de carga. Reemplace <LOAD_BALANCER_DNS_HOSTNAME> con el nombre DNS que anotó anteriormente (paso cinco).

curl "<LOAD_BALANCER_DNS_HOSTNAME>"

Verá la página de bienvenida de NGINX del servicio NGINX creado por EKS, como se muestra a continuación. La salida confirma que su equilibrador de carga está funcionando correctamente y que puede acceder a sus pods NGINX.

Checking your load balancer

9. Finalmente, para verificar, copie y pegue el nombre DNS del equilibrador de carga en una nueva púesta del navegador.

También verá una página de bienvenida de NGINX, lo que indica que su aplicación está funcionando.

Checking your load balancer with a browser

Probando el Control de Kubernetes Altamente Disponible

Ahora que tiene un clúster en ejecución, probará si el plano de control de Kubernetes es altamente disponible. La disponibilidad de su aplicación depende de esta característica. Si el plano de control no funciona, sus aplicaciones estarán inactivas y no podrán atender a los usuarios.

Con la característica de control de Kubernetes altamente disponible, aumenta la disponibilidad de su aplicación. Probará esta característica deteniendo sus nodos de trabajo de EKS y verá si Kubernetes pone en marcha nuevos nodos para reemplazar los que fallaron.

1. En su panel de EC2, detenga todas las instancias de nodos de trabajo de EKS, como se muestra a continuación.

Stopping all of your EKS worker node instances

2. A continuación, ejecuta el siguiente comando para verificar el estado del nodo obrero.

kubectl get node

Obtendrás una mezcla de estados, como Pendiente, Ejecutando, y Terminando. ¿Por qué? Porque al intentar detener todos los nodos obreros, Kubernetes detecta la falla y rápidamente levanta otro nodo.

Checking the status of the worker node

3. Ahora ejecuta el comando kubectl get pod para probar la funcionalidad de control de Kubernetes altamente disponible.

kubectl get pod

Puedes ver en la salida que hay tres nuevos pods (identificados por su edad) en estado Ejecutando. Estos nuevos pods indican que la funcionalidad de control de Kubernetes altamente disponible está funcionando según lo previsto.

Checking the status of the pods

4. Ejecuta el comando kubectl get service a continuación para listar todos los servicios disponibles.

Puedes ver que Kubernetes ha creado un nuevo servicio y que el nombre DNS del balanceador de carga es diferente ahora. kubectl get service

kubectl get service
Kubernetes has created a new service

5. Por último, copia y pega el nombre DNS del balanceador de carga en tu navegador. Obtendrás la página de bienvenida de NGINX como lo hiciste en el último paso de la sección “Implementación de una Aplicación en un Clúster de EKS”.

Conclusión

A lo largo de este tutorial, has aprendido cómo crear un clúster de EKS, implementar un servicio de NGINX desde tu contenedor y probar la funcionalidad del plano de control altamente disponible.

En este punto, deberías tener una buena comprensión de cómo crear clústeres de EKS en tu entorno de AWS.

¿Qué sigue para ti? ¿Quizás aprender cómo implementar una aplicación NodeJS usando Docker y K8s en AWS?

Source:
https://adamtheautomator.com/aws-eks-cli/