Acompaña el evento final de la Maratón Behind the Code 2020: 05/12 - Online ¡Inscríbete ahora!

Cómo funciona la creación de plantillas con Podman, Kubernetes y Red Hat OpenShift

La funcionalidad de Origen a Imagen de Red Hat OpenShift, un entorno empresarial de Kubernetest, es muy útil y oportuna. Simplemente apunte a la imagen del tiempo de ejecución de su elección (por ejemplo Node.js) en un repositorio de GitHub que contenga su código. Con solo algunos clics la aplicación resultante estará en funcionamiento. Sin embargo, para aplicaciones más complejas, la creación de plantillas hace que un despliegue con muchos componentes sea igual de fácil de comenzar. La creación de plantillas comienza con imágenes básicas y construye sobre ellas para crear aplicaciones coherentes.

Este artículo examina cómo funciona la creación de plantillas, con ejemplos sobre Red Hat OpenShift en IBM Cloud™. Muestra Podman como un medio de crear las imágenes de las que dependen las plantillas.

El nombre Podman puede parecer algo que se utiliza para reproducir MP3s. En realidad, es un software que se puede utilizar para crear o gestionar unidades, contenedores e imágenes de contenedores, todo sin necesidad de un daemon de contenedores.

El siguiente gráfico muestra cómo funcionan conjuntamente las unidades, los contenedores y las imágenes: Pods, contenedores e imágenes trabajando juntos. Gráfico rectangular de un kubernete, dentro de él un nodo con dos pods a la izquierda, en el centro un nodo con un pod para Linux, otro para un contenedor y otro pod para un DB, a la derecha un nodo con un pod

En Kubernetes, las unidades se crean en un nodo particular para alojar aplicaciones. Dependiendo de sus requisitos, esa unidad está formada por uno o más contenedores. Se ejecuta un contenedor desde una única imagen (que se crea a partir de instrucciones que proporcionan una versión ejecutable de la aplicación). Podman entra en juego como el constructor de la imagen.

Historia

La Open Container Initative (OCI) es importante para la historia de Podman. OCI, un proyecto de la Fundación Linux, tiene la tarea de crear una especificación formal para los formatos de las imágenes de los contenedores y para los entornos de tiempos de ejecución. La iniciativa se estableció en junio de 2015 y fue (y todavía es) principalmente apoyada por Docker.

La tecnología Podman desarrollada fuera del trabajo con OCI. Podman Alpha Version 0.6.1, lanzado en julio de 2018, tenía apenas un año al momento de escribir este artículo.

Ventajas de utilizar Podman

Podman entiende dos tipos de imágenes predominantes: docker y oci.

Uno de los principales beneficios de usar Podman es su seguridad mejorada. Para los que comienzan, Podman se puede ejecutar sin privilegios de administrador,manteniendo casi toda su funcionalidad. Podman también utiliza un modelo de bifurcación/ejecución, en vez del modelo cliente/servidor que Docker utiliza. Este modelo permite el paso de sockets conectados desde systemd y la devolución de los avisos a través de la pila en la que Podman está listo para recibir tareas.

Lo que Podman definitivamente no hace

Podman no es compatible con la funcionalidad docker-compose Tampoco maneja daemons de tiempos de ejecución de contenedores que funcionan con la Kubernetes Container Runtime Interface (CRI). Para ese tipo de trabajo, se puede utilizar otra herramienta: CRI-O.

Hitos de las versiones y el futuro de Podman

Podman 1.2 presentó verificaciones de la salud.

En las próximas versiones, Podman permitirá el uso de un backend varlink para conectarse a instancias remotas de Podman por medio de la interfaz de la línea de comando.

Pasos básicos para configurar Podman y tareas habituales

Podman es una utilidad que se ofrece como parte de la biblioteca libpod. La instalación es tan clara como yum install podman pero si desea información específica para su sistema operativo o sobre cómo construirlo usted mismo, vea las instrucciones para la instalación.

Para ejecutar un contenedor, se utiliza podman run (use el switch -d para utilizar el modo independiente). Y podman ps le muestra una lista de contenedores en ejecución y contenedores que están siendo creados. Si se añade un switch -a eso le proporciona una lista de contenedores /all/.

Es posible realizar un inspect de los contenedores para encontrar metadatos sobre ellos, como la dirección IP:

$ podman inspect -l | grep IPAddress\":
            "SecondaryIPAddresses": null,
            "IPAddress": "",

(Nota: Si un contenedor se está ejecutando en modo que no es de administrador, no se asigna una dirección IP.)

Si usted está familiarizado con Docker, se sentirá bastante cómodo con la interfaz de la línea de comando de Podman, porque, de hecho, se basa en Docker. ¿Tiene lista una imagen? Entonces, el comando podman build hace lo mismo que docker build, y usted puede utilizar la imagen resultante en una plantilla.

¿Qué es una plantilla en Red Hat OpenShift?

Crear plantillas es la forma en la que se obtiene una imagen o aplicación en el catálogo de servicios que se muestra en la consola web de Red Hat OpenShift Container Platform. La siguiente captura de pantalla muestra cuál es la apariencia del catálogo de servicios en la consola web de Red Hat OpenShift de IBM Cloud:

Captura de pantalla del catálogo de servicios en la consola web de Red Hat OpenShift. La pantalla muestra 40 íconos cada uno representa una plantilla

Cada icono del catálogo representa una plantilla. Las plantillas pueden ser tan sencillas como una imagen única o pueden contener toda una aplicación, formada por múltiples compilaciones, imágenes y despliegues.

Las plantillas normalmente incluyen los siguientes recursos:

  • Imágenes de Red Hat OpenShift: imágenes básicas para construir contenedores.
  • Compilaciones: imágenes generadas a partir de código fuente, desde aplicaciones o Dockerfile.
  • Imágenes: resultados de compilaciones.
  • Despliegues: definiciones de qué imágenes están desplegadas y cómo.
  • Otros recursos que su aplicación podría necesitar: almacenamiento, redes y otros tipos.

La primera vez que cree un clúster de Red Hat OpenShift en IBM Cloud, observará que ya se crearon algunos proyectos para usted. El proyecto openshift es donde se almacenan las plantillas existentes para su clúster. Esas plantillas están configuradas de forma predeterminada para construir con un repositorio disponible públicamente en Github. Contienen códigos para la aplicación de muestra.

Por ejemplo, la plantilla de nodejs-mongodb-example tiene su código de muestra hospedado en github.com/sclorg/nodejs-ex/. Puede ver los archivos que se utilizaron para crear la plantilla en el directorio openshift\templates del repositorio. El comienzo del archivo de plantilla proporciona información general acerca de la plantilla, incluidos nombres y una descripción única y fácil de usar:

  "kind": "Template",
  "apiVersion": "v1",
  "metadata": {
    "name": "nodejs-mongodb-example",
    "annotations": {
      "openshift.io/display-name": "Node.js + MongoDB (Ephemeral)",
      "description": "Una aplicación Node.js de ejemplo con una base de datos de MongoDB. Para obtener más información acerca del uso de esta plantilla, incluidas las consideraciones de OpenShift, acceda https://github.com/sclorg/nodejs-ex/blob/master/README.md.\n\nWARNING: los datos almacenados se perderán cuando se destruya la unidad. Utilice esta plantilla solo para pruebas.",
      "tags": "quickstart,nodejs",
      "iconClass": "icon-nodejs",
      "openshift.io/long-description": "Esta plantilla define los recursos que se necesitan para desarrollar una aplicación de NodeJS, entre ellos, la configuración de la compilación, la configuración para el despliegue de la aplicación y la configuración para el despliegue de bases de datos. La base de datos se guarda en un almacenamiento no persistente, así que esta configuración solo se debe utilizar con fines experimentales.",
      "openshift.io/provider-display-name": "Red Hat, Inc.",
      "openshift.io/documentation-url": "https://github.com/sclorg/nodejs-ex",
      "openshift.io/support-url": "https://access.redhat.com",
      "template.openshift.io/bindable": "false"
    }
  },
  "message": "En su proyecto se han creado los siguientes servicios: ${NAME}, ${DATABASE_SERVICE_NAME}.\n\nPara obtener más información acerca del uso de esta plantilla, incluyendo las consideraciones de OpenShift, vea https://github.com/sclorg/nodejs-ex/blob/master/README.md.",
  "labels": {
      "template": "nodejs-mongodb-example",
      "app": "nodejs-mongodb-example"
  },
  "objects": [
    {
      "kind": "Secret",
      "apiVersion": "v1",
      "metadata": {
        "name": "${NAME}"
      },
      "stringData": {
        "database-user": "${DATABASE_USER}",
        "database-password": "${DATABASE_PASSWORD}",
        "database-admin-password" : "${DATABASE_ADMIN_PASSWORD}"
}

Mostrar más

Más abajo, encontrará las otras dos principales secciones de la plantilla: los objetos y los parámetros. En la sección de parámetros establecerá los valores para su aplicación, como los límites de uso de memoria y los nombres del servicio. La sección de objetos muestra información específica acerca de las imágenes y de la utilización de las plantillas. En la sección de objetos, verá especificada la siguiente imagen nodejs:

"strategy": {
  "type": "Source",
  "sourceStrategy": {
    "from": {
      "kind": "ImageStreamTag",
      "namespace": "${NAMESPACE}",
      "name": "nodejs:${NODEJS_VERSION}"
    }

Then mongo:

"type": "ImageChange",
"imageChangeParams": {
  "automatic": true,
  "containerNames": [
    "mongodb"
  ],
  "from": {
    "kind": "ImageStreamTag",
    "namespace": "${NAMESPACE}",
    "name": "mongodb:${MONGODB_VERSION}"
}

Mostrar más

Resumen

Si quiere cambiar una de esas imágenes por una suya (por ejemplo, para reemplazar el motor de la base de datos), puede copiar el archivo de la sección anterior y reemplazar 'mongodb'. ¡O comenzar desde cero y crear una aplicación completamente diferente! La Documentación sobre plantillas proporciona más información.

Puede probar las plantillas en Red Hat OpenShift en IBM Cloud.