Tutoriales

De Docker Compose a Kubernetes con Podman

Esta Componer ventana acoplable Las herramientas son valiosas para muchos que usan contenedores.de acuerdo a DocumentaciónDocker Compose se describe a sí mismo como:

… herramientas para definir y ejecutar aplicaciones multicontenedor. Con Compose, puede usar archivos YAML para configurar los servicios de su aplicación. Luego, con un comando, puede crear e iniciar todos los servicios desde su configuración.

Un desafío con Docker Compose es que el formato de archivo YAML solo funciona con Docker Engine. Si bien puede dárselo a otros usuarios de Docker para la replicación local, no pueden usarlo con otros entornos de ejecución de contenedores. Es decir, hasta ahora.

[ Related tutorial: Using Podman and Docker Compose ]

En Podman 3.0, Docker Compose funciona con el backend de Podman

poder verdadero Podman Esto se logra convirtiendo fácilmente contenedores basados ​​en Docker Compose en archivos YAML de Kubernetes. Al igual que Docker Compose, Podman puede replicar contenedores localmente mediante archivos YAML de Kubernetes. Más importante aún, esto le permite a Podman tener pods y servicios orquestados que pueden ejecutarse en muchas plataformas, incluidos Kubernetes/OpenShift o minikube.

Este artículo describe el proceso que comienza con un archivo Compose simple que ejecuta WordPress con dos contenedores.El código fuente de este archivo Compose está publicado en GitHub por Docker gran composicion repositorio. El uso exitoso de este archivo en Podman hará que la pantalla de configuración inicial de WordPress aparezca en el navegador.

notas: Al momento de escribir, solo admitimos docker-compose Los comandos se ejecutan como root.

Inicie los servicios del sistema de Podman

Para usar Compose, el primer paso es asegurarse de que todos los paquetes requeridos estén instalados, luego configure el servicio del sistema Podman (3.0 o posterior) usando systemdDespués de instalar el paquete, habilite e inicie Podman systemd Active el servicio de socket con el siguiente comando:

$ sudo systemctl enable --now podman.socket

Verifique que el servicio se esté ejecutando presionando el punto final de ping. Este paso debe tener éxito antes de continuar.

$ sudo curl -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping
OK

Ahora puede ejecutar Compose con confianza sabiendo que la API RESTful está funcionando.

ejecutar componer

Como se mencionó anteriormente, este ejemplo ejecutará un archivo Compose que consta de dos contenedores para iniciar una sesión de WordPress. Un contenedor ejecuta el servicio web Apache y el otro contenedor almacena datos en una base de datos MySQL. Los dos contenedores se comunican a través de TCP/IP a través de la red dedicada a esta instancia de Compose.Para iniciar el contenedor, ejecute docker-compose up.

$ sudo docker-compose up -d
Creating network "wordpress-mysql_default" with the default driver
Creating volume "wordpress-mysql_db_data" with default driver
Pulling db (mysql:8.0.19)...
0c27e8e5fcfab7805cfed996b55e5e98f43fd7ee76e1516f20cba139c6a299c5: pulling image () from docker.io/library/mysql:8.0.19  
Pulling wordpress (wordpress:latest)...
0d35c2300ec845fda141ba012f7c6dccde8f0ae106b8f4bb0fcfced69380f851: pulling image () from docker.io/library/wordpress:latest  
Creating wordpress-mysql_db_1        ... done
Creating wordpress-mysql_wordpress_1 ... done

usar podman ps Comando para verificar que ambos contenedores estén creados y ejecutándose. No se requiere un demonio Docker.

$ sudo podman ps
CONTAINER ID  IMAGE                               COMMAND               CREATED         STATUS             PORTS               NAMES
a089a40bb9ae  docker.io/library/mysql:8.0.19      --default-authent...  15 seconds ago  Up 15 seconds ago                      kind_hermann
510c028c273f  docker.io/library/wordpress:latest  apache2-foregroun...  15 seconds ago  Up 15 seconds ago  0.0.0.0:80->80/tcp  competent_kilby
$

Verifique que WordPress se esté ejecutando localmente

Las instrucciones para ejecutar WordPress muestran que funciona bien y se puede acceder mediante localhost y el puerto 80.

Crear Kubernetes YAML

Usando una instancia de trabajo de WordPress en su máquina local, comience el proceso de replicar estos contenedores en la plataforma Kubernetes. Podman puede generar YAML basado en Kubernetes a partir de contenedores en ejecución.

[ You might also like to read: Start learning Kubernetes from your local machine ]

¿Una cápsula o varias cápsulas?

Hay dos formas de crear YAML en un entorno de Kubernetes: colocar dos contenedores en un solo pod con un servicio o crear dos pods, cada uno con un contenedor y un servicio que expone una interfaz de Apache. Determinar qué enfoque es el mejor puede requerir algo de prueba y error.

Una consideración que podría decidir qué método usar es cómo se comunicarán los contenedores o pods. Cuando Compose crea estos contenedores, realiza una serie de pasos para garantizar que los dos contenedores puedan comunicarse entre sí mediante nombres DNS. De hecho, Compose configura alias en los contenedores que se reconocen como nombres DNS al resolver los contenedores por nombre. Al colocar contenedores en el mismo pod, no se requiere resolución de nombres entre ellos, ya que comparten un espacio de nombres de red.Por lo tanto, simplemente pueden usar anfitrión local comunicarse entre sí.

Poner contenedores en diferentes pods de Kubernetes proporciona una mayor flexibilidad, pero los contenedores deben usar otros mecanismos para comunicarse entre sí.

Generar YAML

Debe conocer el nombre o ID del contenedor para comenzar a crear Kubernetes YAML. Determina si Podman debe generar descripciones de servicio para Kubernetes. En este caso, exponga la interfaz de Apache para que pueda interactuar con WordPress usando el navegador.usar podman generate kube Comandos para crear archivos YAML.

$ sudo podman generate kube -s -f wordpress.yaml a089a40bb9ae 510c028c273f

Esta -s En el comando anterior indicó que Podman generará un servicio para este pod.Esta -f Las opciones nos permiten guardar el YAML generado en un archivo.De lo contrario, la salida se envía a salida estándarse puede redirigir a un archivo.

$ cat wordpress.yaml
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-3.0.0-dev
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2020-12-03T22:30:07Z"
  labels:
    app: kindhermann
  name: kindhermann
spec:
  containers:
  - command:
    - docker-entrypoint.sh
    - --default-authentication-plugin=mysql_native_password
    env:
    - name: PATH
      value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
   ...
    workingDir: /
  - command:
    - docker-entrypoint.sh
    - apache2-foreground
    env:
    - name: PATH
      value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  ...
    - name: WORDPRESS_DB_HOST
      value: kindhermann
    - name: WORDPRESS_DB_PASSWORD
      value: db
    - name: APACHE_ENVVARS
      value: /etc/apache2/envvars
 ...
    image: docker.io/library/wordpress:latest
    name: competentkilby
    ports:
    - containerPort: 80
      hostPort: 80
      protocol: TCP
    resources: {}
    securityContext:
      allowPrivilegeEscalation: true
      capabilities:
        drop:
        - CAP_MKNOD
        - CAP_NET_RAW
      privileged: false
      readOnlyRootFilesystem: false
      seLinuxOptions: {}
    workingDir: /var/www/html
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: "2020-12-03T22:30:07Z"
  labels:
    app: kindhermann
  name: kindhermann
spec:
  ports:
  - name: "80"
    nodePort: 30579
    port: 80
    protocol: TCP
    targetPort: 0
  selector:
    app: kindhermann
  type: NodePort
status:
  loadBalancer: {}

Para que el contenedor de Apache se comunique con el contenedor de MySQL, los autores del archivo Compose eligieron usar un archivo llamado WORDPRESS_DB_HOST Representa el nombre de host del contenedor de MySQL.Antes de ejecutarlo en un entorno de Kubernetes, cambie WORDPRESS_DB_HOST al nombre del contenedor MySQL (Kindelman En este caso) o 127.0.0.1 (los contenedores en el mismo pod pueden comunicarse entre sí a través de localhost).

...
    - name: WORDPRESS_DB_HOST
      value: kindhermann OR 127.0.0.1
---


Barra lateral:

Cuando Compose ejecuta la compilación

En muchos ejemplos de Compose, los autores eligen crear sus imágenes de contenedor. Esto generalmente se debe a que necesitan paquetes adicionales o desean realizar algún nivel de personalización en la imagen. Cuando esto suceda, habrá una nueva imagen adicional en la tienda de imágenes de Podman. La selección de la salida YAML de Kubernetes de la ejecución puede fallar porque hace referencia a una imagen de contenedor que solo existe en el almacenamiento local.

Para solucionar este problema, utilice podman push Mueva estas nuevas imágenes a un registro global como quay.io o un registro específico de Kubernetes para que Kubernetes pueda extraer estas imágenes. Asegúrese de que el nombre de la imagen en el archivo YAML generado sea el mismo que el nombre de la imagen insertada.


Kubernetes

El siguiente paso para avanzar con este ejemplo y aplicarlo a un entorno de Kubernetes mostrará cómo ejecutar este ejemplo en ambos entornos. minicubo y OpenShift. No hay nada específico en YAML que impida que un pod se ejecute en otro entorno de Kubernetes, por lo que, en teoría, debería funcionar con otras versiones de Kubernetes.

Este artículo asume la existencia de un entorno minikube y/o OpenShift. La documentación de la configuración de un entorno minikube u OpenShift Kubernetes está más allá del alcance de este artículo.

minicubo

El primer paso para implementar en minikube es crear un pod.

$ minikube kubectl -- create -f wordpress.yaml
pod/kindhermann created
service/kindhermann created

Después de esperar unos segundos, verifique el estado de los pods y contenedores. Según la velocidad y el ancho de banda de la red, es posible que los pods ya estén disponibles.Úselo para verificar el estado del pod kubectl get pods.

$ minikube kubectl -- get pods
NAME          READY   STATUS    RESTARTS   AGE
kindhermann   2/2     Running   0          28

Ahora que ambos contenedores están listos, pruebe la disponibilidad de la sesión de WordPress.Primero, use Kubernetes para obtener la dirección IP del pod kubectl.

$ minikube kubectl -- describe  pods | grep Node:
Node:         minikube/192.168.39.7

Dirija el navegador de su elección a la dirección IP del pod y vea la pantalla de configuración de WordPress.

clase abierta

En este artículo, el clúster de OpenShift se ejecuta en GCP.

usando lo generado wordpress.yaml Crear pods y servicios.Si usa un entorno de Kubernetes estándar, reemplace oc y kubectl en el siguiente comando.

$ oc create -f wordpress.yaml  
pod/kindhermann created
service/kindhermann created

Espere unos segundos para que se inicien los pods y los servicios.Esta Kindelman vaina en corriendo Un estado en el que ambos contenedores están en funcionamiento.Esta Kindelman Un servicio también está disponible a través de la IP del clúster que se le ha asignado.

$ oc get pods
NAME          READY   STATUS    RESTARTS   AGE
kindhermann   2/2     Running   0          39s
$ oc get services
NAME          TYPE           CLUSTER-IP       EXTERNAL-IP                            PORT(S)        AGE
kindhermann   NodePort       172.30.103.100                                    80:30579/TCP   45s
Kubernetes    ClusterIP      172.30.0.1                                        443/TCP        44m
openshift     ExternalName              Kubernetes.default.svc.cluster.local            36m

Ver pods y servicios en la consola.

Para acceder al servicio desde fuera del clúster, expóngalo, lo que creará una ruta.

$ oc expose svc/kindhermann
route.route.openshift.io/kindhermann exposed
$ oc/kubectl get routes
NAME          HOST/PORT                                                                          PATH   SERVICES      PORT   TERMINATION   WILDCARD
kindhermann   kindhermann-default.apps.ci-ln-d3gw292-f76d1.origin-ci-int-gce.dev.openshift.com          kindhermann   80                   None

El servicio expuesto crea la ruta de host/puerto que se muestra arriba y accede a ese punto final. Consulte la página de configuración de una aplicación de WordPress que se ejecuta en un clúster de OpenShift o Kubernetes.

Verifique las rutas en la consola y acceda al punto final directamente desde allí.

[ Get this free ebook: Managing your Kubernetes clusters for dummies. ]

envolver

Como puede ver, usar Podman 3.0 para migrar configuraciones de carga de trabajo desde un entorno de Docker Compose a Kubernetes es sencillo. Podman no solo brinda la flexibilidad de Docker Compose al desarrollar aplicaciones, sino que también facilita la migración a Kubernetes cuando las aplicaciones están listas para las grandes ligas.usando podman generate kube Pedido. Pruébelo usted mismo en tres sencillos pasos.

LEER  Cómo ver/abrir imágenes WebP en Linux

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