Tutoriales

Cómo «construir una vez, ejecutar en cualquier lugar» en el perímetro usando contenedores

El enfoque de «construir una vez, ejecutar en cualquier lugar» está cobrando impulso a medida que aumenta el uso de contenedores. Está dirigido principalmente al desarrollo nativo de la nube, pero al usar Podman, systemd y OSBuild, ahora también se puede aplicar al desarrollo de dispositivos perimetrales.

[ Getting started with containers? Check out Deploying containerized applications: A technical overview. ]

¿Qué significa «construir una vez, ejecutar en cualquier lugar»?

Sun Microsystems acuñó hace mucho tiempo «Construir una vez, ejecutar en cualquier lugar» para describir la capacidad de escribir código Java una vez y ejecutarlo en cualquier lugar. Más recientemente, la frase se ha ampliado para incluir contenedores, lo que significa que los desarrolladores pueden empaquetar toda su aplicación y todas sus dependencias en un contenedor y ejecutarla en cualquier lugar.

¿Qué significa realmente «ejecutar un contenedor»?

Para ejecutar un contenedor, necesita una imagen de contenedor e instrucciones para ejecutarlo. Las instrucciones de ejecución pueden tomar diferentes formas.Puede ejecutar comandos en la terminal, el archivo docker-compose o en Kubernetes YAML documento. Aunque puede reutilizar el mismo contenedor en cada escena, el formato de la directiva cambia. Pero, ¿y si pudieras usar el mismo formato en todas partes?

mediante el uso podman kube playpuede pasar un manifiesto de Kubernetes a Podman, que exporta el objeto a un objeto de Podman.

Con este mecanismo, puede aplicar el principio de «construir una vez, ejecutar en cualquier lugar» no solo a los contenedores, sino también a las instrucciones sobre cómo ejecutar esos contenedores.

Supervisar contenedores con systemd

Aunque puede ejecutar Podman como un demonio, en la mayoría de los casos se ejecuta sin un demonio. Como resultado, los contenedores no se supervisan, por lo que los contenedores que fallan permanecen inactivos y no hay ningún servicio para reiniciarlos.

En los sistemas Linux, systemd supervisa los procesos. Cuando supervisa un contenedor con un demonio, systemd también supervisa el demonio. Puede omitir la complejidad adicional al permitir que systemd supervise el contenedor directamente.

[ Get the Systemd commands cheat sheet ]

Puede usar systemd para ejecutar y administrar aplicaciones en contenedores. Esto significa que systemd inicia aplicaciones en contenedores y administra todo su ciclo de vida. Podman simplifica este proceso podman generate systemd comando que genera un archivo de unidad systemd para el contenedor o pod especificado. Como alternativa, puede usar archivos de unidad de plantilla systemd para archivos YAML de Kubernetes.

A partir de la versión 4.4, Podman tiene soporte integrado para cuatrillizosun servicio que permite a los usuarios administrar servicios en contenedores utilizando servicios de clase .container cualquiera .kube archivo, pero eso es suficiente para artículos individuales.

contenedor de borde

compilación del sistema operativo es una canalización de compilación de código abierto que le permite «crear imágenes de sistemas operativos Linux de manera confiable, aislar la creación de imágenes del sistema operativo host y producir una imagen confiable y bien definida para la implementación». contenedores, archivos YAML de Kubernetes y archivos de unidad systemd para crear imágenes de dispositivos que ejecutan cargas de trabajo.

úsalo con demostración

Esta demostración utiliza el Repositorio de aplicaciones automotrices de muestray la versión en contenedor vssomeip, que implementa SOME/IP (Scalable Service-Oriented MiddlewarE over IP), un protocolo de comunicación para aplicaciones automotrices. Precauciones:

[ Download the Podman basics cheat sheet ]

1. Implementar en Kubernetes

Una especie de. Crear un espacio de nombres:

kubectl create namespace build-once-run-anywhere

B. Implementar vssomeip:

kubectl apply -n build-once-run-anywhere -f 

C. Aplicación del motor de implementación:

kubectl apply -n build-once-run-anywhere -f 

D. Implementar la aplicación de radio:

kubectl apply -n build-once-run-anywhere -f 

e. Después de que se ejecuta la implementación, puede monitorear el cambio del volumen del servicio de radio de acuerdo con la notificación del servicio del motor:

kubectl get pods -n build-once-run-anywhere -l app=radio -o jsonpath={.items[0].metadata.name} | xargs kubectl logs -n build-once-run-anywhere -f

RADIO: Started main thread
RADIO: Started playing
Engine Service is NOT available.
Engine Service is available.
RADIO: Playing song "R-Cali" by A$AP Rocky feat. Aston Matthews & Joey Fatts (on Radio Los Santos) 50% volume
RADIO: Lowering volume due to reverse
RADIO: Playing song "R-Cali" by A$AP Rocky feat. Aston Matthews & Joey Fatts (on Radio Los Santos) 30% volume
RADIO: Playing song "Swimming Pools, Drank" by Kendrick Lamar (on Radio Los Santos) 30% volume
RADIO: Restoring volume due to cancelled reverse
RADIO: Playing song "Swimming Pools, Drank" by Kendrick Lamar (on Radio Los Santos) 50% volume

2. Use Podman para implementar localmente

Una especie de. Implementar vsomeip:

podman kube play 

b. Implemente la aplicación del motor:

podman kube play 

C. Implementar la aplicación de radio:

podman kube play 

D. Después de que se ejecuta la implementación, puede monitorear el cambio del volumen del servicio de radio de acuerdo con la notificación del servicio del motor:

podman logs -f radio-pod-0-radio

RADIO: Started main thread
RADIO: Started playing
RADIO: Playing song "How It Was" by DJ Esco feat. Future (on Radio Los Santos) 50% volume
Engine Service is NOT available.
Engine Service is available.
RADIO: Playing song "Swimming Pools, Drank" by Kendrick Lamar (on Radio Los Santos) 50% volume
RADIO: Lowering volume due to reverse
RADIO: Playing song "Swimming Pools, Drank" by Kendrick Lamar (on Radio Los Santos) 30% volume
RADIO: Playing song "Hood Gone Love It" by Jay Rock feat. Kendrick Lamar (on Radio Los Santos) 30% volume
RADIO: Restoring volume due to cancelled reverse
RADIO: Playing song "Hood Gone Love It" by Jay Rock feat. Kendrick Lamar (on Radio Los Santos) 50% volume

3. Incrustar imágenes

Para obtener más información sobre cómo generar imágenes, consulte imagen del edificio En el sitio de documentación de Automotive SIG.El manifiesto de imagen para esta demostración es ocp.mpp documento.

Contenido del archivo de manifiesto

La lista de verificación describe los diferentes pasos necesarios para crear una imagen.

Insertar imagen de contenedor
- type: org.osbuild.skopeo
   inputs:
     images:
       type: org.osbuild.containers
       origin: org.osbuild.source
       mpp-resolve-images:
         images:
           - source: registry.gitlab.com/centos/automotive/sample-images/demo/auto-apps
             tag: latest
           - source: registry.gitlab.com/centos/automotive/sample-images/demo/vsomeip
             tag: v0.1
   options:
     destination:
       type: containers-storage
       storage-path: /usr/share/containers/storage
Copiar unidades y archivos YAML de Kubernetes
- type: org.osbuild.copy
   inputs:
     ocp-vsomeip:
       type: org.osbuild.files
       origin: org.osbuild.source
       mpp-embed:
         id: vsomeip.yml
         path: ../files/ocp/vsomeip.yml
     unit-vsomeip:
       type: org.osbuild.files
       origin: org.osbuild.source
       mpp-embed:
         id: vsomeip.service
         path: ../files/ocp/vsomeip.service
   options:
     paths:
     - from:
         mpp-format-string: input://ocp-vsomeip/{embedded['vsomeip.yml']}
       to: tree:///demo/ocp/vsomeip.yml
     - from:
         mpp-format-string: input://unit-vsomeip/{embedded['vsomeip.service']}
       to: tree:///usr/lib/systemd/system/vsomeip.service

Tenga en cuenta las operaciones de copia similares para el motor y los servicios de radio.

Habilitar servicio de radio
- type: org.osbuild.systemd
   options:
     enabled_services:
     - radio.service

construir imagen

Ahora es el momento de construir la imagen.

para demostración

Para ejecutar la imagen de demostración en una máquina ARM en AWS, cree un destino con el siguiente comando:

cd osbuild-manifests
make cs9-aws-ocp-regular.aarch64.img
Construye otras imágenes

Alternativamente, puede compilar la demostración en hardware x86 y ejecutarla con QEMU:

cd osbuild-manifests
make cs9-aws-ocp-regular.x86_64.qcow2

C. Puede encontrar una herramienta útil para simplificar el proceso de ejecutar imágenes qcow2 en el repositorio: manifiesto osbuild/runvmEsto puede facilitarle la ejecución de imágenes mediante la virtualización QEMU.

[ Try the Getting started with Red Hat OpenShift Service on AWS (ROSA) learning path. ]

Convertir imagen a AMI de AWS

Para convertir la imagen que creó en una imagen de máquina de Amazon (AMI), siga las instrucciones a continuación.

requisitos previos
  • Cree un depósito S3 para cargar las imágenes.
  • Acceda a la interfaz de línea de comandos (CLI) de AWS.
  • Credenciales de AWS:
    • Si lo está ejecutando en su propia máquina, configure la CLI de AWS con sus credenciales.
    • Si está ejecutando una instancia EC2, adjunte un perfil de instancia de Gestión de acceso e identidad (IAM) con una política VMImporter a su instancia.
Crear AMI

Una especie de.desde osbuild-manifests directorio, ejecutar export-image-aws.sh herramienta:

./tools/export-image-aws.sh cs9-aws-ocp-regular.aarch64.img  8

b. Una vez completada, puede encontrar una nueva AMI llamada cs9-aws-ocp-regular.aarch64.

Usar la AMI recién creada

Después de crear una AMI, puede comenzar a usarla.

Lanzar una instancia EC2
  • Busque la AMI que creó en el paso anterior en la consola de AWS (se llama cs9-aws-soafee-regular.aarch64).
  • hacer clic instancia de inicio de AMI.
  • Complete el proceso de lanzamiento de la instancia:
    • Dale un nombre a tu instancia.
    • Elija un tipo de instancia.recomendado es c6g.Grande.
    • Configure (o cree) su par de claves para Secure Shell (SSH) en la instancia.
    • Configure (o cree) un grupo de seguridad que permita el acceso SSH a la computadora desde su IP.
  • hacer clic instancia de inicio.
Verifique que el servicio se esté ejecutando

SSH en su instancia y verifique los registros del servicio de radio:

journalctl -u radio -f

RADIO: Started main thread
RADIO: Started playing
RADIO: Playing song "How It Was" by DJ Esco feat. Future (on Radio Los Santos) 50% volume
Engine Service is NOT available.
Engine Service is available.
RADIO: Playing song "R-Cali" by A$AP Rocky feat. Aston Matthews & Joey Fatts (on Radio Los Santos) 50% volume
RADIO: Playing song "Swimming Pools, Drank" by Kendrick Lamar (on Radio Los Santos) 50% volume
RADIO: Lowering volume due to reverse
RADIO: Playing song "Swimming Pools, Drank" by Kendrick Lamar (on Radio Los Santos) 30% volume
RADIO: Restoring volume due to cancelled reverse
RADIO: Playing song "Swimming Pools, Drank" by Kendrick Lamar (on Radio Los Santos) 50% volume

Cree una vez, ejecute en cualquier lugar

Las imágenes de contenedor son la encarnación del enfoque «crear una vez, ejecutar en cualquier lugar». Con Kubernetes, Podman y OSBuild (y futuros Quadlets), «cualquier lugar» ahora es más grande que nunca.

[ Boost security, flexibility, and scale at the edge with Red Hat Enterprise Linux. ]

LEER  ¿Cómo verificar si estás usando Wayland o Xorg?

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba