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 systemd
Despué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.