Curso Ansible: Despliegue de aplicaciones en contenedores con Ansible
Ansible facilita la gestión de Docker proporcionando módulos específicos que permiten interactuar con el motor Docker. Esto incluye la capacidad de crear, actualizar, y eliminar contenedores, imágenes, redes, y volúmenes.
Ansible puede gestionar contenedores Docker utilizando el módulo docker_container.
¿Por qué usar Ansible para gestionar containers?
- Automatización de despliegues: Ansible puede automatizar el despliegue de aplicaciones en contenedores y Kubernetes, reduciendo el tiempo y errores.
- Gestión de infraestructura: Ansible puede gestionar tanto Docker como Kubernetes, facilitando la orquestación de contenedores y servicios.
- Escalabilidad: Usando Ansible con Kubernetes, puedes escalar aplicaciones fácilmente, gestionando réplicas y balanceo de carga.
- Actualizaciones y mantenimientos: Ansible puede programar y ejecutar tareas de mantenimiento y actualizaciones de manera eficiente.
Instalación de Docker con Ansible
Para empezar a usar Ansible con Docker, primero debes instalar Docker en tus servidores. Aquí hay un Playbook básico para instalar Docker en un sistema basado en Ubuntu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
--- - hosts: all become: yes tasks: - name: Actualizar apt y agregar el repositorio de Docker apt: update_cache: yes - name: Instalar paquetes necesarios apt: name: - apt-transport-https - ca-certificates - curl - software-properties-common state: present - name: Agregar clave GPG de Docker apt_key: url: https://download.docker.com/linux/ubuntu/gpg state: present - name: Agregar repositorio de Docker apt_repository: repo: deb https://download.docker.com/linux/ubuntu bionic stable state: present - name: Instalar Docker apt: name: docker-ce state: present - name: Iniciar Docker y habilitar en arranque systemd: name: docker enabled: yes state: started |
Crear y gestionar contenedores Docker
Una vez Docker está instalado, puedes usar Ansible para crear y gestionar contenedores. Aquí hay un ejemplo de cómo ejecutar un contenedor Nginx:
1 2 3 4 5 6 7 8 9 10 11 |
--- - hosts: all become: yes tasks: - name: Ejecutar contenedor Nginx docker_container: name: nginx image: nginx:latest state: started ports: - "80:80" |
Desplegar una aplicación en Docker con Ansible
Supongamos que tienes una aplicación web en una imagen Docker llamada myapp. Aquí hay un ejemplo de Playbook para desplegar esta aplicación:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
--- - hosts: all become: yes tasks: - name: Ejecutar contenedor de la aplicación web docker_container: name: myapp image: myapp:latest state: started ports: - "80:80" env: DATABASE_URL: "postgres://user:password@db/mydatabase" |
Integración con Kubernetes
Kubernetes es una plataforma de orquestación de contenedores que automatiza la implementación, escalado y operaciones de aplicaciones en contenedores.
Ansible puede gestionar Kubernetes utilizando el módulo k8s. Aquí hay un ejemplo de cómo desplegar una aplicación en Kubernetes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
--- - hosts: localhost tasks: - name: Crear un pod en Kubernetes k8s: state: present definition: apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx |
Instalación de Kubernetes con Ansible
Aquí hay un Playbook básico para instalar un clúster de Kubernetes usando kubeadm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
--- - hosts: all become: yes tasks: - name: Instalar paquetes necesarios apt: name: - apt-transport-https - ca-certificates - curl - software-properties-common state: present - name: Agregar clave GPG de Kubernetes apt_key: url: https://packages.cloud.google.com/apt/doc/apt-key.gpg state: present - name: Agregar repositorio de Kubernetes apt_repository: repo: deb http://apt.kubernetes.io/ kubernetes-xenial main state: present - name: Instalar kubeadm, kubelet y kubectl apt: name: - kubelet - kubeadm - kubectl state: present - name: Deshabilitar swap command: swapoff -a - name: Inicializar Kubernetes (solo en el master) command: kubeadm init when: "'master' in group_names" - name: Configurar kubectl para el usuario root command: | mkdir -p /root/.kube cp -i /etc/kubernetes/admin.conf /root/.kube/config chown $(id -u):$(id -g) /root/.kube/config when: "'master' in group_names" |
Desplegar aplicaciones en Kubernetes con Ansible
Con el módulo k8s, puedes gestionar recursos de Kubernetes. Aquí hay un ejemplo de cómo crear un Pod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
--- - hosts: all tasks: - name: Crear un pod en Kubernetes k8s: state: present definition: apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx |
Desplegar una aplicación web en Kubernetes con Ansible
Para desplegar una aplicación web en Kubernetes, primero crea un archivo YAML con la definición del despliegue y el servicio:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deployment spec: replicas: 3 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: myapp image: myapp:latest ports: - containerPort: 80 # service.yaml apiVersion: v1 kind: Service metadata: name: myapp-service spec: selector: app: myapp ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer |
Luego, usa Ansible para aplicar estas configuraciones:
1 2 3 4 5 6 7 8 9 10 11 12 |
--- - hosts: all tasks: - name: Desplegar aplicación en Kubernetes k8s: state: present definition: "{{ lookup('file', 'deployment.yaml') }}" - name: Crear servicio para la aplicación k8s: state: present definition: "{{ lookup('file', 'service.yaml') }}" |
Optimización y Seguridad para la gestión de containers con Ansible
- Seguridad: Usa Ansible Vault para proteger datos sensibles como contraseñas y claves API.
- Optimización de recursos: Ajusta las configuraciones de Docker y Kubernetes para un uso óptimo de los recursos.
- Monitoreo y alertas: Implementa soluciones de monitoreo con Prometheus y Alertmanager para mantener la infraestructura bajo control.
ENTRADAS RELACIONADAS CURSO ANSIBLE
- Curso Ansible: Qué es y para qué sirve
- Curso Ansible: Instalación, configuración inicial y ejemplo práctico básico
- Curso Ansible: Puertos de comunicación necesarios
- Curso Ansible: Playbooks conceptos básicos
- Curso Ansible: Manejo de Inventarios
- Curso Ansible: Manejo de Variables
- Curso Ansible: definición y uso de Roles
- Curso Ansible: qué son los Handlers
- Curso Ansible: Condicionales y bucles
- Curso Ansible: Gestión de secretos y credenciales con Ansible Vault
- Curso Ansible: Uso de roles de la comunidad con Ansible Galaxy
- Curso Ansible: Despliegue de aplicaciones en contenedores con Ansible
- Curso Ansible: Integración de Ansible con CI/CD pipelines
- Curso Ansible: Generar ficheros YAML
- Curso Ansible: Integración de Ansible con Terraform para gestionar Proxmox
- Curso Ansible: Provisioners de Ansible en Terraform
OTRAS ENTRADAS RELACIONADAS ANSIBLE
- Ansible: Conceptos básicos
- Ansible: Comandos básicos
- Instalar Ansible en Centos 7
- Ansible: Gestión básica máquinas virtuales Proxmox
- MacOS: Instalar Podman y Ansible
- Docker Swarm: Instalar Ansible AWX
- Ansible: Validar ficheros YAML
- Ansible: Instalar SQL Server 2019 en Linux
- Ansible: Crear página web WordPress
- Ansible: Instalación servidores web
- Ansible: Gestión de máquina Windows
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?