10 lecciones aprendidas sobre la automatización de tareas de implementación de contenedores en Linux

EN Festival Ansible 2021, presentamos una conferencia sobre automatización de tareas de contenedores en Linux, donde aprendimos mucho más de lo esperado sobre automatización en particular y presentación en general. Para compartir nuestro conocimiento, hemos resumido nuestras 10 lecciones principales de este proyecto, que incluyen cosas sobre contenedores, las nuevas herramientas de Ansible y la preparación para nuestra presentación, incluidas algunas lecciones técnicas que aprendimos mientras construíamos la demostración. .

Ahora es el momento de las lecciones.

Índice

Parte 1: Las lecciones de no piratear

La primera parte de este artículo comparte las cosas no técnicas que aprendimos.

1. Sí, puede transmitir contenido que le interese a la gente.

Le recomendamos que considere presentar en conferencias. Busque convocatorias de artículos publicadas por conferencias de código abierto durante todo el año y envíe sus artículos para compartir sus conocimientos.

En una conferencia dada, la experiencia de la audiencia es muy diversa. Independientemente de la profundidad y el enfoque de su presentación, se adaptará a muchos participantes. Incluso en una sesión introductoria como la nuestra, recibimos comentarios muy positivos de los participantes que decían que había sido muy útil y que habían aprendido mucho.

Respira hondo y lleva tus charlas (incluso si todavía las estás creando) a conferencias. Puede proporcionar contenido que interese a las personas. Ellos (¡y usted también!) aprenden y se benefician de ello.

2. Definir los fundamentos del proyecto

Al preparar una presentación sobre automatización, simplemente comience definiendo los conceptos básicos del proyecto: casos de uso, definiciones de tecnología, eficiencia, software, etc.

  • Los casos de uso son esenciales en los proyectos de automatización. Defínelos bien, aclara los límites de lo que quieres implementar, así como lo que no pretende abordar. Nuestra vídeo teaser Acerca de esta conferencia es un ejemplo: dijimos que automatizaríamos algunos procedimientos de implementación de contenedores, pero no teníamos planes para crear una nueva plataforma de orquestación de contenedores basada en Ansible.
  • Defina la tecnología que planea procesar. En nuestro caso, contenedores, y más concretamente Podman sobre Red Hat Enterprise Linux (RHEL). RHEL es accesible para todos a través de un suscripción de desarrollador, y eso incluye a Podman. Podman es Cumple con la Iniciativa de Contenedores Abiertos (OCI), por lo que proporciona contenedores empresariales compatibles con Linux y OCI. Un buen comienzo.
  • Reusa, reduce, recicla; la eficiencia es la clave. Encuentre el contenido de Ansible que tiene fácilmente disponible. En nuestro caso, utilizamos el Colección Podman Ansible (y herramientas) para automatizar Podman.
  • Comience con las versiones de software actuales para asegurarse de que está actualizado. En nuestro caso se trata de RHEL 8.4 y Podman 3.2. Ansible Automation Platform (AAP) 2.0 se lanzó con Ansible Core 2.11, así que optamos por eso.
  • Esté orientado hacia el futuro y use características modernas. Examinamos los nuevos entornos de tiempo de ejecución de AAP y decidimos utilizarlos.

[Learn what's new in Red Hat Ansible Automation Platform 2.]

3. Aprende la tecnología que automatizarás

¡Podman ha crecido! Así que teníamos que entender bien la tecnología para presentarla de manera efectiva. Estas son algunas formas de obtener más información sobre Podman:

4. Crea un flujo de trabajo de desarrollo

Puede utilizar nuestro flujo de trabajo de desarrollo como plantilla para su propio proyecto de Ansible:

  • Gestión de versiones: Sí, necesitarás Git. Por lo tanto, cree una cuenta de GitLab o GitHub si aún no tiene una.
  • Roles: divida sus casos de uso en roles de Ansible para la portabilidad.
  • Colecciones: Cree su propia colección de Ansibley agregue dependencias y sus nuevos roles.
  • Publica tu colección Ansible Galaxy, Red Hat Automation Hub o Centro de automatización privado.
  • Construye tu Entornos de tiempo de ejecución (EE) con su nueva colección y sus dependencias.
  • Cree un repositorio de contenedores en su registro de contenedores para cargar su imagen EE. (Usamos un repositorio disponible públicamente en Quay.io y cargamos nuestra imagen EE creada localmente en lugar de intentar que Quay.io la creara a partir del archivo Container. Más sobre ese tema debajo de.)
  • Es posible que desee crear un script o automatizar estos pasos a medida que reconstruye de vez en cuando.

5. Defina claramente sus casos de uso

Los proyectos de automatización se mueven hacia arriba y hacia abajo con sus casos de uso, por lo que es importante definirlos claramente. Pregúntese: "¿Cuál es el objetivo mínimo que quiero automatizar?" Y vaya desde allí, expandiendo el caso de uso paso a paso. Vigile las capacidades de la colección de Ansible que está utilizando.

[New to Ansible? Read the quick-start guide to Ansible for Linux sysadmins.]

Bob creó una configuración bastante simple de dos contenedores para nuestro proyecto: el backend de la base de datos (PostgreSQL) y la capa de la aplicación (frontend Node.js).

Definimos:

  • Caso de uso 1: Contenedores autónomos sin root
  • Caso de uso 2: Contenedores sin raíces que comparten un pod
  • Caso de uso 3: Contenedores raíz que se comunican a través de una configuración de red Podman (CNI)
  • Caso de uso 4: contenedores raíz que reproducen un archivo Kubefile extraído por OpenShift Container Platform (OCP)

6. Comience de manera simple y gradualmente adopte funciones más complejas

Lo mejor es comenzar lentamente y construir su proyecto. Así es como procedimos para nuestra presentación:

Parte 2: Lecciones de piratería

Y ahora vamos a compartir las cosas técnicas que descubrimos

7. Sobre la construcción de la imagen de EE en Quay

Originalmente, planeamos proporcionar una definición de archivo de contenedor de EE a Quay.io y dejar que Quay construya nuestra imagen. Sin embargo, dado que la construcción del EE requería acceder a los EE de AAP 2.x y no pudimos obtener la autenticación de Quay de registrarse.redhat.io rápidamente, elegimos construir la imagen EE localmente con ansible-constructor y hacer público nuestro repositorio de contenedores en Quay.io para impresiones. Era más fácil de esa manera.

Además, cuando cambiamos a Usecase2 y Usecase3 con pods, nos llevó un tiempo darnos cuenta de que la configuración de la red (mapeo de puertos) debía configurarse a nivel de pod, no a nivel de contenedor.

8a. ansible-navigator es muy útil para depurar

Si necesita comprender qué está haciendo ansible-navigator en su contenedor y cómo ejecuta ansible-playbook en él, observe la depuración a nivel de registro (--ll debug). La configuración de la depuración a nivel de registro le permite ver cómo ansible-navigator ejecuta Podman y cómo Podman ejecuta ansible-playbook:

Aquí hay una captura de pantalla:

(Karoly "Charlie" Vegh, CC BY-SA 4.00

Y el código que puedes copiar y pegar:

(navigator_venv) [[email protected] testenv]$ ansible-navigator --ll debug run usecase3_rootcontainers_networked.yml --vault-password-file /home/ansible/gitignored_secret --eei quay.io/kvegh/podautee -e @/home/ansible/vault-auth.yml -i inventory/hosts -m stdout -u ansible 

PLAY [UseCase3 create rootcontainers with network] *****************************

TASK [Gathering Facts] *********************************************************
ok: [rhel-pod-aut42.kveghdemo.at]
ok: [rhel-pod-aut41.kveghdemo.at]

TASK [kvegh.podman_autodemo.clean_env : clean all nonroot containers] **********
changed: [rhel-pod-aut42.kveghdemo.at]
changed: [rhel-pod-aut41.kveghdemo.at]

TASK [kvegh.podman_autodemo.clean_env : clean all root containers] *************
changed: [rhel-pod-aut41.kveghdemo.at]
changed: [rhel-pod-aut42.kveghdemo.at]

TASK [kvegh.podman_autodemo.clean_env : clean all nonroot containers] **********
^CTerminated
(navigator_venv) [[email protected] testenv]$ grep "container engine invocation" ansible-navigator.log | tail -1 
211020165954.123 DEBUG 'ansible-runner.wrap_args_for_containerization' container engine invocation: podman run --rm --tty --interactive -v /home/ansible/projects/podman_autodemo/testenv/:/home/ansible/projects/podman_autodemo/testenv/ --workdir /home/ansible/projects/podman_autodemo/testenv -v /home/ansible/:/home/ansible/ -v /home/ansible/projects/podman_autodemo/testenv/inventory/:/home/ansible/projects/podman_autodemo/testenv/inventory/ -v /tmp/ssh-JHIy2UTAtTkH/:/tmp/ssh-JHIy2UTAtTkH/ -e SSH_AUTH_SOCK=/tmp/ssh-JHIy2UTAtTkH/agent.2151411 -v /home/ansible/.ssh/:/home/runner/.ssh/ --group-add=root --ipc=host -v /tmp/ansible-navigator_tqcjp_gu/artifacts/:/runner/artifacts/:Z -v /tmp/ansible-navigator_tqcjp_gu/:/runner/:Z --env-file /tmp/ansible-navigator_tqcjp_gu/artifacts/b768e2a9-c7db-4a18-9718-4b788262d27a/env.list --quiet --name ansible_runner_b768e2a9-c7db-4a18-9718-4b788262d27a quay.io/kvegh/podautee:latest ansible-playbook /home/ansible/projects/podman_autodemo/testenv/usecase3_rootcontainers_networked.yml --vault-password-file /home/ansible/gitignored_secret -e @/home/ansible/vault-auth.yml -u ansible -i /home/ansible/projects/podman_autodemo/testenv/inventory/hosts
(navigator_venv) [[email protected] testenv]$ 
(navigator_venv) [[email protected] testenv]$ 
(navigator_venv) [[email protected] testenv]$ podman run --rm --tty --interactive -v /home/ansible/projects/podman_autodemo/testenv/:/home/ansible/projects/podman_autodemo/testenv/ --workdir /home/ansible/projects/podman_autodemo/testenv -v /home/ansible/:/home/ansible/ -v /home/ansible/projects/podman_autodemo/testenv/inventory/:/home/ansible/projects/podman_autodemo/testenv/inventory/ -v /tmp/ssh-JHIy2UTAtTkH/:/tmp/ssh-JHIy2UTAtTkH/ -e SSH_AUTH_SOCK=/tmp/ssh-JHIy2UTAtTkH/agent.2151411 -v /home/ansible/.ssh/:/home/runner/.ssh/ --group-add=root --ipc=host -v /tmp/ansible-navigator_tqcjp_gu/artifacts/:/runner/artifacts/:Z -v /tmp/ansible-navigator_tqcjp_gu/:/runner/:Z --env-file /tmp/ansible-navigator_tqcjp_gu/artifacts/b768e2a9-c7db-4a18-9718-4b788262d27a/env.list --quiet --name ansible_runner_b768e2a9-c7db-4a18-9718-4b788262d27a quay.io/kvegh/podautee:latest ansible-playbook /home/ansible/projects/podman_autodemo/testenv/usecase3_rootcontainers_networked.yml --vault-password-file /home/ansible/gitignored_secret -e @/home/ansible/vault-auth.yml -u ansible -i /home/ansible/projects/podman_autodemo/testenv/inventory/hosts

PLAY [UseCase3 create rootcontainers with network] *******************************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************************************************************
ok: [rhel-pod-aut41.kveghdemo.at]
ok: [rhel-pod-aut42.kveghdemo.at]

Esto puede ser muy útil si Ansible no puede ejecutarse por algún motivo y necesita información sobre el motivo.

[Don't miss the free eBook The automated enterprise.]

8b. ansible-navigator también es muy útil para ejecutar

Usamos algunas de estas funciones de depuración cuando ansible-navigator ejecutó Podman y Podman ejecutó ansible-playbook. Aún así, no pudo conectarse a las notas finales remotas que se supone que debe administrar porque no pudo autenticarse desde el contenedor EE.

Esto se debe a que usamos claves SSH para que Ansible se conecte, y estas claves no están disponibles en EE porque la imagen de EE se comparte. Entonces, ¿cómo puedes usar estas claves? Resulta que ansible-navigator también es genial en eso. Si inicia un agente SSH y agrega la clave privada, la asigna al entorno de tiempo de ejecución para que la use Ansible:

(navigator_venv) [[email protected] testenv]$ eval `ssh-agent -s` 
Agent pid 2155429
(navigator_venv) [[email protected] testenv]$ ssh-add -d /home/ansible/.ssh/id_rsa
Could not remove identity "/home/ansible/.ssh/id_rsa": agent refused operation
(navigator_venv) [[email protected] testenv]$ 

Además, ansible-navigator monta el directorio local en el entorno de ejecución si necesita agregar archivos en tiempo de ejecución.

9. El código abierto es realmente tu amigo

A la mitad del proyecto de demostración, encontramos un problema en el que ansible-navigator no podía mostrar el resultado si estábamos usando un EA personalizado (lo cual hicimos). Habríamos necesitado una solicitud de soporte para analizar y solucionar esto en un entorno corporativo estricto. Hemos aprendido que este es un problema conocido y que ya hay una solución disponible en sentido ascendente, pero aún no se ha empaquetado ni producido.

¿La solución? Cree un nuevo entorno virtual de Python (venv) y pip instalar ansible-navegador en ello. Boom, la solución alternativa se extrajo directamente desde el principio, funcionó bien y pudimos continuar hasta que la solución llegó a una versión AAP2.

10. Use credenciales personalizadas para acceder a datos cifrados de tipo seguro para usar en el libro de jugadas

Usamos AAP 2.x junto con el controlador de automatización para demostrar la ejecución de Usecase4. Nuestro caso de uso incluía el acceso a registros de imágenes de contenedores que deben autenticarse con datos confidenciales (como nuestras credenciales). Esto se resolvió con una caja fuerte y un --vault-password-file en la línea de comando.

Necesita credenciales personalizadas para usarlo en el controlador de automatización porque Jan-Piet Mens explica completamente.

Aprende más

Usted puede mirar nuestra presentación después de iniciar sesión en el sitio web de AnsibleFest.

Esperamos que estas lecciones le resulten útiles. Contáctenos por favor (karoly vegh y Roberto Baumgartner) en LinkedIn si tiene alguna idea o comentario. Nos gustaría agradecer a Chris Jung, Phil Griffith, Eric Lavarde y Elle Lathram por sus contribuciones a nuestra presentación.


Festival de Ansible es una conferencia de tecnología gratuita patrocinada por Red Hat, un evento virtual que reúne a toda la comunidad de automatización global. Visite el sitio web de AnsibleFest para acceso bajo demanda a demostraciones, conferencias magistrales, laboratorios y sesiones técnicas que quizás se haya perdido.

Artículos de interés

Subir