Despliegue de K3s en Azure utilizando GitLab CI
- Daniel J. Saldaña
- 29 de julio de 2024
- Puntuación de feedback
En este tutorial, te mostraré cómo desplegar una máquina virtual en Azure e instalar K3s utilizando GitLab CI. Siguiendo estos pasos, podrás automatizar el proceso de creación e instalación de tu clúster K3s en la nube.
Prerrequisitos
Antes de comenzar, asegúrate de tener lo siguiente:
- Una cuenta de Azure con los permisos necesarios para crear recursos.
- Una cuenta de GitLab con un proyecto configurado.
- Las siguientes variables de entorno configuradas en GitLab CI:
ARM_CLIENT_ID
ARM_CLIENT_SECRET
ARM_SUBSCRIPTION_ID
ARM_TENANT_ID
GITLAB_ACCESS_TOKEN
SSH_PRIVATE_KEY
SSH_PUBLIC_KEY
Estructura del proyecto
El proyecto que vamos a utilizar tiene la siguiente estructura de archivos:
Puedes encontrar el código completo en el repositorio de GitLab.
Descripción del pipeline principal
El archivo principal .gitlab-ci.yml
define el flujo de trabajo del pipeline CI/CD y utiliza tres archivos secundarios para gestionar las etapas de despliegue, configuración y requisitos del clúster.
Contenido del archivo .gitlab-ci.yml
:
Este archivo define tres etapas (deploy
, config
, requirements
) y utiliza tres archivos secundarios para manejar los detalles específicos de cada etapa. Cada etapa se ejecuta manualmente para proporcionar un mayor control sobre el despliegue.
Configuración de las variables
Se deben realizar unos ajustes en las variables, definiendo la IP de la máquina una vez generada
PUBLIC_IP
y elANSIBLE_USER
definido en el archivoterraform.tfvars
.También se debe ajustar la variable
K8S_AGENT_CONTEXT
con el nombre del agente de GitLab CI que se debe conectar al clúster de Kubernetes, seguido del nombre del repositorio.
Descripción de los pipelines secundarios
Pipeline de infraestructura como código (IaC)
El archivo Iac/.gitlab-ci-iac.yml
se encarga de la etapa de despliegue de infraestructura utilizando Terraform.
Contenido del archivo Iac/.gitlab-ci-iac.yml
:
Este archivo incluye un componente de OpenTofu para ejecutar un pipeline completo que pasa por las etapas de validación, prueba, construcción, despliegue y limpieza. Configura la variable TF_VAR_ssh_public_key
necesaria para el despliegue de Terraform.
Otros archivos importantes en la carpeta Iac/
main.tf
: Define los recursos principales de la infraestructura en Azure.variables.tf
: Define las variables necesarias para Terraform.terraform.tfvars
: Define los valores específicos de las variables.
Una vez que se ha completado la etapa de despliegue, se podra acceder al Terraform State en el propio GitLab en la sección Operate
> Terraform States
.
Pipeline de configuración
El archivo Config/.gitlab-ci-config.yml
se encarga de la configuración de la máquina virtual utilizando Ansible.
Contenido del archivo Config/.gitlab-ci-config.yml
:
Este archivo define una etapa que ejecuta un playbook de Ansible para configurar K3s con TLS SANs.
Otros archivos importantes en la carpeta Config/
inventory.ini
: Define el inventario de hosts para Ansible.playbook.yml
: Contiene el playbook de Ansible para configurar K3s con TLS SANs.
Pipeline de requisitos
El archivo Requirements/.gitlab-ci-requirements.yml
se encarga de instalar K3s en la máquina virtual.
Contenido del archivo Requirements/.gitlab-ci-requirements.yml
:
Este archivo define varias etapas para desplegar componentes clave en el clúster K3s, incluyendo ingress, ArgoCD y cert-manager.
Despliegue de Ingress
Configura y despliega los controladores de ingress necesarios en el clúster.
Despliegue de ArgoCD
Despliega ArgoCD en el clúster K3s si no está ya instalado.
Despliegue de Cert-manager
Despliega cert-manager y configura el emisor de certificados.
Configuración de variables de entorno en GitLab CI
Para que el pipeline funcione correctamente, es necesario configurar las siguientes variables de entorno en GitLab CI:
- Ve a tu proyecto en GitLab.
- Dirígete a
Settings
>CI / CD
>Variables
. - Agrega las siguientes variables:
Variable | Valor | Entorno | Máscara | Expander | Protegido |
---|---|---|---|---|---|
ARM_CLIENT_ID | ***** | Todos (por defecto) | Sí | Sí | |
ARM_CLIENT_SECRET | ***** | Todos (por defecto) | Sí | Sí | |
ARM_SUBSCRIPTION_ID | ***** | Todos (por defecto) | Sí | Sí | |
ARM_TENANT_ID | ***** | Todos (por defecto) | Sí | Sí | |
GITLAB_ACCESS_TOKEN | ***** | Todos (por defecto) | Sí | Sí | |
SSH_PRIVATE_KEY | ***** | Todos (por defecto) | Sí | Sí | |
SSH_PUBLIC_KEY | ***** | Todos (por defecto) | Sí | Sí |
Despliegue del pipeline
Etapa de despliegue (
deploy
):- Esta etapa se encarga de desplegar la infraestructura necesaria en Azure utilizando Terraform.
- El archivo de configuración de Terraform se encuentra en
Iac/.gitlab-ci-iac.yml
.
Etapa de configuración (
config
):En esta etapa, se utiliza Ansible para configurar la máquina virtual creada en Azure.
Los scripts de configuración se encuentran en
Config/.gitlab-ci-config.yml
.Importante: Los valores de
PUBLIC_IP
yANSIBLE_USER
deben ser actualizados con la IP pública generada en Azure y el usuario definido enterraform.tfvars
.
- Etapa de requisitos (
requirements
):- Esta etapa se encarga de instalar K3s en la máquina virtual y desplegar componentes adicionales como ingress, ArgoCD y cert-manager.
- Los scripts necesarios para la instalación de K3s y la configuración de los componentes adicionales se encuentran en
Requirements/.gitlab-ci-requirements.yml
.
Conexión del clúster de Kubernetes con GitLab CI
Para conectar el clúster de Kubernetes con GitLab CI, sigue estos pasos:
- Ve a tu proyecto en GitLab.
- Dirígete a
Operate
>Cluster de Kubernetes
>Connect a cluster
. - Escribe el nombre de tu clúster y pulsa en el botón
Registrar
. - Nos generara un codigo para instalar el agente usando Helm.
- Copia el comando y ejecútalo en tu terminal.
Una vez conectado, podrás desplegar tus aplicaciones en el clúster de Kubernetes utilizando GitLab CI.