Creación de pods de Kubernetes con Podman play kube

Cada vez que los desarrolladores de Podman hablan sobre su futuro, siempre mencionan un tema, lo que facilita probar cargas de trabajo con Podman e implementarlas en Kubernetes. La forma principal en que las personas pasan de Podman a Kubernetes es a través de Podman's generate kube y play kube subcomandos. Como sugieren los nombres, generate kube crea una descripción YAML de un contenedor Pod o Podman para ejecutar en Kubernetes. Por el contrario, el play kube El subcomando le permite ejecutar pods de Podman basados ​​en un archivo YAML de Kubernetes.

Recientemente, Podman recibió una serie de mejoras que mejoran esta experiencia al agregar la capacidad de:

  • Crea imágenes con play kube
  • Cortar las vainas con play kube
  • Compatibilidad con contenedores de inicialización al estilo de Kubernetes
Índice

    Crea imágenes con play kube

    Usuarios de podman play kube nos dijeron que querían crear imágenes como parte del proceso del juego. Debido a que Kubernetes no tiene un concepto similar, dudamos en implementar la idea al principio. El más play kube se usa, más se compara con los diales de Docker. Fue el punto de inflexión. Nuestros usuarios tenían razón.

    El nuevo podman play kube La función busca un directorio con el mismo nombre que la imagen utilizada en el archivo YAML. Si este directorio existe y un Containerfile o Dockerfile está presente en este directorio, Podman crea la imagen del contenedor.

    Por ejemplo, un archivo YAML de ejemplo que contenga Apache y PHP podría verse así:

    # Save the output of this file and use kubectl create -f to import
    # it into Kubernetes.
    #
    # Created with podman-4.0.0-dev
    apiVersion: v1
    kind: Pod
    metadata:
      creationTimestamp: "2021-09-20T17:40:19Z"
      labels:
    	app: php
      name: php
    spec:
      containers:
      - args:
    	- apache2-foreground
    	command:
    	- docker-php-entrypoint
    	env:
    	- name: PATH
      	value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    	- name: TERM
      	value: xterm
    	- name: container
      	...
    	- name: PHP_EXTRA_BUILD_DEPS
      	value: apache2-dev
    	- name: APACHE_ENVVARS
      	value: /etc/apache2/envvars
    	image: php-7.2-apache-mysqli:latest
    	name: apache
    	ports:
    	- containerPort: 80
      	hostPort: 8080
      	protocol: TCP
    	resources: {}
    	securityContext:
      	allowPrivilegeEscalation: true
      	capabilities:
        	drop:
        	- CAP_MKNOD
        	- CAP_NET_RAW
        	- CAP_AUDIT_WRITE
      	privileged: false
      	readOnlyRootFilesystem: false
      	seLinuxOptions: {}
    	tty: true
    	workingDir: /var/www/html
      dnsConfig: {}
      restartPolicy: Never
    status: {}

    Observe en el archivo YAML que la imagen del contenedor se llama php-7.2-apache-mysqli:latest. Si hay un Containerfile en este directorio y la imagen no está en el almacén de imágenes, Podman crea la imagen.

    Ahora mira un ejemplo en el que quieras usar docker.io/library/php:7.2-apache pero la extensión PHP para mysqli no está instalada ni habilitada. Cree un archivo contenedor en el php-7.2-apache-mysqli directorio telefónico. Para dar un poco de perspectiva, aquí está el diseño del directorio:

    ├── mariadb-conf
    │   ├── Containerfile
    │   └── my.cnf
    ├── php-7.2-apache-mysqli
    │   ├── Containerfile
    │   └── index.php
    └── php.yaml

    Y el contenido del Containerfile es:

    $ cat php-7.2-apache-mysqli/Containerfile  
    FROM docker.io/library/php:7.2-apache
    RUN docker-php-ext-install mysqli
    COPY index.php /var/www/html/index.php

    Y ahora ejecuta el play kube comando, citando el archivo YAML:

    $ podman play kube php.yaml  
    -->  /home/baude/myproject/php-7.2-apache-mysqli
    STEP 1/3: FROM docker.io/library/php:7.2-apache
    STEP 2/3: RUN docker-php-ext-install mysqli
    Configuring for:
    PHP Api Version:     	20170718
    Zend Module Api No:  	20170718
    Zend Extension Api No:   320170718
    checking for grep that handles long lines and -e... /bin/grep
    checking for egrep... /bin/grep -E
    checking for a sed that does not truncate output... /bin/sed
    checking for cc... cc
    checking whether the C compiler works... yes
    checking for C compiler default output file name... a.out
    checking for suffix of executables...  
    checking whether we are cross compiling... no
    checking for suffix of object files... o
    …
    Build complete.
    Don't forget to run 'make test'.
     
    Installing shared extensions: 	/usr/local/lib/php/extensions/no-debug-non-zts-20170718/
    Installing header files:      	/usr/local/include/php/
    find . -name *.gcno -o -name *.gcda | xargs rm -f
    find . -name *.lo -o -name *.o | xargs rm -f
    find . -name *.la -o -name *.a | xargs rm -f
    find . -name *.so | xargs rm -f
    find . -name .libs -a -type d|xargs rm -rf
    rm -f libphp.la   	modules/* libs/*
    STEP 3/3: COPY index.php /var/www/html/index.php
    COMMIT php-7.2-apache-mysqli:latest
    --> 096882adf84
    Successfully tagged localhost/php-7.2-apache-mysqli:latest
    096882adf845274f8c6546cf52a77c7fc78b3fa20c659cfc2b73753972bd5f90
    Pod:
    d8774760bc3a0bdb1b405c57880f3872b0a71f3434b8d4ab6d8d18c8e6e44ffa
    Container:
    25162b2da0e2b9078c69404f6d6e1250f6ee4fc032b47564f9bbb971d838cf29

    Durante la construcción se pueden ver los restos de mysqli estar instalado, y para probarlo se puede comprobar el mysql se ha instalado el módulo. El archivo de índice para este contenedor muestra los módulos habilitados:

    $ curl http://localhost:8080
    Array
    (
    	[0] => Core
    	[1] => date
    	[2] => libxml
    	...
    	[30] => mysqlnd
    	[31] => apache2handler
    	[32] => mysqli
    	[33] => sodium
    )

    Al ejecutar una compilación para play kube, el directorio que lleva el nombre de la imagen se convierte en el directorio de contexto para la construcción. También agrega un parámetro de línea de comando, --build, que fuerza una reconstrucción de todas las imágenes utilizadas en el archivo YAML si el directorio y el Containerfile están presentes. Dado que Kubernetes no creará la imagen, debe cargar su imagen recién creada en un registro de contenedor antes de usar su archivo YAML con Kubernetes.

    Destruye las cápsulas con Play Kube

    el podman play kube El comando puede crear y ejecutar varios pods con varios contenedores en los pods. Administrar pods que play kube compilar y ejecutar siempre ha sido un proceso manual utilizando los comandos pod de Podman. De más, play kube se está convirtiendo rápidamente en una alternativa a docker compose, que está muy orientado al servicio. Por conveniencia y compatibilidad, tenía sentido proporcionar una forma de eliminar lo que se creó con el archivo YAML de entrada.

    [ Learn more about How to use Podman inside of Kubernetes. ]

    Desde Podman v3.4, el podman play kube el pedido tiene uno nuevo --down bandera. El uso de esta nueva bandera imita la docker compose "abajo" porque es más un desmontaje. cuando das la --down marca, todos los pods (y sus contenedores) se detienen y luego se eliminan. Si un volumen está en uso, no se elimina.

    Tomando el ejemplo del contenedor PHP anterior, una vez que el play kube se está ejecutando, puede observar un pod en ejecución con dos contenedores, incluido el contenedor de infraestructura del pod:

    $ podman pod ps
    POD ID    	NAME    	STATUS  	CREATED   	INFRA ID  	# OF CONTAINERS
    cc97c8c8a07d  php     	Running 	20 hours ago  bd22e1434d3a  2
    $ podman ps -a
    CONTAINER ID  IMAGE                               	COMMAND           	CREATED   	STATUS       	PORTS             	NAMES
    bd22e1434d3a  k8s.gcr.io/pause:3.5                                      	22 hours ago  Up 22 hours ago  0.0.0.0:8080->80/tcp  cc97c8c8a07d-infra
    b97893b79bb9  localhost/php-7.2-apache-mysqli:latest  apache2-foregroun...  22 hours ago  Up 22 hours ago  0.0.0.0:8080->80/tcp  php-greatnapier

    Supongamos que desea detener este pod. Puede "reproducir" el archivo YAML agregando el --down bandera:

    $ podman play kube --down php.yaml  
    Pods stopped:
    cc97c8c8a07db0f26114022a71ee59771134244a8b465147a513b28f9b7d171b
    Pods removed:
    cc97c8c8a07db0f26114022a71ee59771134244a8b465147a513b28f9b7d171b
    $ podman ps -a
    CONTAINER ID  IMAGE   	COMMAND 	CREATED 	STATUS  	PORTS   	NAMES
    $ podman pod ps
    POD ID      NAME        STATUS      CREATED     INFRA ID    # OF CONTAINERS

    El terminal se detiene y luego se retira. Confirme que los contenedores de pod también se eliminan con podman ps -a Donde podman pod ps.

    Soporte para contenedores de inicialización

    Como se mencionó anteriormente, Podman agregó soporte para contenedores de inicio inspirados y basados. Contenedores de inicialización de Kubernetes. La idea básica detrás de los contenedores init es que estos contenedores especiales se ejecuten antes que cualquier otro contenedor regular. en una vaina. Los contenedores de inicialización se consideran bloqueantes porque no se ejecuta ningún otro contenedor de pod hasta que finaliza el contenedor de inicialización. Un pod puede tener varios contenedores de inicio, pero se ejecutan en serie en el orden en que los agregó al pod porque son bloqueadores.

    Una distinción única entre los contenedores de inicialización de Podman y los contenedores de inicialización de Kubernetes es que Podman ofrece dos tipos de contenedores de inicialización: always y once. Como sus nombres lo indican, un always el contenedor init se ejecuta cada vez que se inicia el pod. A once El contenedor init se ejecuta cuando se inicia el pod y se elimina cuando el contenedor sale. Esto se debe a que los pods de Podman se pueden reiniciar, a diferencia de los pods de Kubernetes, que nunca se reemplazan.

    Los contenedores de inicialización pueden ser útiles para iniciar servicios, inicializar bases de datos (en un volumen) o bloquear ciertas condiciones que se cumplen antes de que se inicien otros contenedores de pod. Cuando los contenedores init se combinan con podman play kube y su capacidad para construir imágenes, realmente se puede ver la maduración de los contenedores. También puede generar YAML para contenedores de inicialización si podman play kube se ejecuta en un pod que los contiene.

    Un ejemplo: Apache, MariaDB y PHP

    La pila LAMP (Linux, Apache, MySQL y PHP) ha sido durante mucho tiempo un brillante ejemplo para Linux. El siguiente ejemplo implementará una pila LAMP en un pod Podman. Utilizará contenedores y volúmenes init para preparar los respectivos contenedores con su contenido. En el caso del volumen de la base de datos, el contenedor de inicio único prepara la configuración básica y los archivos de la base de datos, y luego precarga una base de datos con datos. El contenedor de inicialización del volumen web, que siempre se ejecuta antes que el contenedor de Apache y PHP, llena el contenido del servidor web con la información más reciente de un repositorio de Git.

    (Brent Baude, CC BY-SA 4.0)

    Primero, haré la configuración manualmente, luego seguiré con un play kube ejemplo donde las imágenes se construyen sobre la marcha. Para seguir, clona mi proyecto de Git:

    $ git clone http://github.com/baude/my-lamp-project

    Una vez que se complete la clonación, tendrá la siguiente estructura de directorios:

    ├── lamp.yaml
    ├── mariadb-conf
    │   ├── Containerfile
    │   └── my.cnf
    ├── mydbstuff
    ├── mywebstuff
    ├── php-7.2-apache-mysqli
    │   └── Containerfile
    ├── php-7.2-apache-mysqli-ext
    │   ├── Containerfile
    │   └── index.php
    └── php.yaml

    Entonces necesitas crear algunas imágenes manualmente. Tenga en cuenta que esta versión muestra contenedores de inicialización que se usan manualmente en Podman:

    $ cd mariadb-conf
    $ podman build -t mariadb-conf .
    STEP 1/2: FROM docker.io/library/mariadb
    Trying to pull docker.io/library/mariadb:latest...
    Getting image source signatures
    Copying blob 7275e59ecb3d done   
    ...  
    Copying config 6b01262bc7 done   
    Writing manifest to image destination
    Storing signatures
    STEP 2/2: COPY my.cnf /etc/mysql/my.cnf
    COMMIT mariadb-conf
    --> c62d6a4978a
    Successfully tagged localhost/mariadb-conf:latest
    c62d6a4978a42b649e3468a12d210197dabae29b5daed2d1f0ead778f70a5fc3
    $ cd ../php-7.2-apache-mysqli-ext/
    $ podman build -t php-7.2-apache-mysqli-ext .
    STEP 1/3: FROM docker.io/library/php:7.2-apache
    Trying to pull docker.io/library/php:7.2-apache...
    Getting image source signatures
    Copying blob c2199db96575 done   
    ... 
    Copying config c61d277263 done   
    Writing manifest to image destination
    Storing signatures
    STEP 2/3: RUN docker-php-ext-install mysqli
    Configuring for:
    PHP Api Version:     	20170718
    Zend Module Api No:  	20170718
    Zend Extension Api No:   320170718
    checking for grep that handles long lines and -e... /bin/grep
    checking for egrep... /bin/grep -E
    checking for a sed that does not truncate output... /bin/sed
    ...
     
    Build complete.
    Don't forget to run 'make test'.
     
    Installing shared extensions: 	/usr/local/lib/php/extensions/no-debug-non-zts-20170718/
    Installing header files:      	/usr/local/include/php/
    find . -name *.gcno -o -name *.gcda | xargs rm -f
    find . -name *.lo -o -name *.o | xargs rm -f
    find . -name *.la -o -name *.a | xargs rm -f
    find . -name *.so | xargs rm -f
    find . -name .libs -a -type d|xargs rm -rf
    rm -f libphp.la   	modules/* libs/*
    --> ec9a8979871
    STEP 3/3: COPY index.php /var/www/html/index.php
    COMMIT php-7.2-apache-mysqli-ext
    --> d17ae4015b7
    Successfully tagged localhost/php-7.2-apache-mysqli-ext:latest
    d17ae4015b7c0af918e9bb5e0d4818e11b394ea3f3f7481d0a558eaa1cfb443

    Ahora que ha creado las imágenes básicas, puede construir su pod con contenedores. El orden en que crea los contenedores no es importante, excepto cuando uno o más contenedores de inicialización descansan sobre otro contenedor. En este caso, asegúrese de que el orden de creación sea el correcto. El primer contenedor creado también creará el lamp pod y proporcione las asignaciones de puertos:

    $ podman create -t --pod new:lamp -p 8080:80 --init-ctr=once -v ./mydbstuff:/var/lib/mysql:Z -e MYSQL_ROOT_PASSWORD=mypass mariadb-conf sh -c "mysql_install_db -u root && (mysqld -u root &) && apt-get update && apt-get install -y curl && curl --output - -L  https://github.com/baude/mysql-example/blob/main/world.sql.gz?raw=true  | gunzip -cd | mysql -u root --password='${MYSQL_ROOT_PASSWORD}'"
    C14d30bcc6eed259236916c230c0faf64123b9855160c3895c87a77cb49df653

    A veces, el primer contenedor es un contenedor de inicialización que está marcado para ejecutarse una vez. Configura el volumen de la base de datos, incluida la carga previa con datos. El siguiente contenedor es el volumen de base de datos estándar que se ejecuta dentro del pod:

    $ podman create --pod lamp -t -v ./mydbstuff:/var/lib/mysql:Z mariadb-conf
    Aa7a013f0bb1b748df1a0a1f1e691824cd9e6334f65129312514b513a86e8a51

    Al igual que el contenedor de inicialización, el contenedor de la base de datos también tiene un montaje vinculante para mydbstuff donde el contenedor de inicialización lo llena con contenido. El siguiente contenedor también es un contenedor de inicialización, pero se ejecuta cada vez que se inicia el pod. En cada inicio, este contenedor clona un sitio web simple para recoger los cambios. El contenido se almacena en el mywebstuff el volumen:

    $ podman create -t --pod lamp --init-ctr=always -v ./mywebstuff:/var/www/html:Z php-7.2-apache-mysqli:latest sh -c "git clone http://github.com/baude/php-example /var/www/html || cd /var/www/html && git pull origin"

    Y el último contenedor es el contenedor de Apache y MySQL. Al igual que su contenedor de inicialización, une montajes mywebstuff para servir el contenido del clon de Git:

    $ podman create -t --pod lamp  -v ./mywebstuff:/var/www/html:Z php-7.2-apache-mysqli:latest
    Ea5821fdd4cde1d4de197ff3269fb5f89875fd2f78aac4b638e2661acbc7695f

    El pod está completamente creado y ahora puede comenzar:

    $ podman pod start lamp
    2ba762fc1edcbef4a8c607a598d9d0b3219fc49e765ba5fb795516bc66e73eac
    $ podman pod ps
    POD ID    	NAME    	STATUS  	CREATED     	INFRA ID  	# OF CONTAINERS
    2ba762fc1edc  lamp    	Running 	43 seconds ago  a513f190e1a2  4
    $ podman ps -a
    CONTAINER ID  IMAGE                               	COMMAND           	CREATED     	STATUS                 	PORTS             	NAMES
    a513f190e1a2  k8s.gcr.io/pause:3.5                                      	52 seconds ago  Up 29 seconds ago      	0.0.0.0:8080->80/tcp  2ba762fc1edc-infra
    aa7a013f0bb1  localhost/mariadb-conf:latest       	mysqld            	45 seconds ago  Up 17 seconds ago      	0.0.0.0:8080->80/tcp  bold_aryabhata
    acd05fc2e9af  localhost/php-7.2-apache-mysqli:latest  sh -c git clone h...  37 seconds ago  Exited (0) 18 seconds ago  0.0.0.0:8080->80/tcp  angry_northcutt
    ea5821fdd4cd  localhost/php-7.2-apache-mysqli:latest  apache2-foregroun...  33 seconds ago  Up 17 seconds ago      	0.0.0.0:8080->80/tcp  ecstatic_yalow

    El módulo ahora se está ejecutando.

    [ Examine 10 considerations for Kubernetes deployments. ]

    Tenga en cuenta que falta el contenedor de inicialización de la base de datos porque fue una sola ejecución. Debido a que el otro contenedor de inicialización se configuró en always, todavía está presente pero se muestra como si estuviera fuera. Usando un navegador, ahora debería poder ver una consulta simple del sitio web que devuelve información para dos ciudades en Minnesota:

    $ curl http://localhost:8080
    Returned 2 rows.
     
    3837 Minneapolis USA Minnesota 382618
    3851 Saint Paul USA Minnesota 287151

    Tenga en cuenta el árbol de directorios del proyecto LAMP. Todo el contenido de la base de datos está en mydbstuff. Lo mismo se aplica a mywebstuff, con excepción del contenido a ser emitido:

    $ tree
    ├── lamp.yaml
    ├── mariadb-conf
    │   ├── Containerfile
    │   └── my.cnf
    ├── mydbstuff
    │   ├── aria_log.00000001
    │   ├── aria_log_control
    │   ├── ddl_recovery-backup.log
    │   ├── ddl_recovery.log
    │   ├── ib_buffer_pool
    │   ├── ibdata1
    │   ├── ib_logfile0
    │   ├── ibtmp1
    │   ├── multi-master.info
    │   ├── mysql [error opening dir]
    │   ├── performance_schema [error opening dir]
    │   ├── sys [error opening dir]
    │   ├── test [error opening dir]
    │   └── world [error opening dir]
    ├── mywebstuff
    │   ├── index.php
    │   └── LICENSE
    ├── php-7.2-apache-mysqli
    │   └── Containerfile
    ├── php-7.2-apache-mysqli-ext
    │   ├── Containerfile
    │   └── index.php
    └── php.yaml

    Póngalo todo junto: juegue Kube, inicie contenedores y cree imágenes

    Puede continuar con el ejemplo usando un solo play kube archivo para mostrar una pila LAMP similar. Eliminé todos los pods e imágenes existentes de este ejemplo para poder demostrar play kube's poder más plenamente.

    Comience con el contexto del proyecto Git que clonó anteriormente (my-lamp-project). Usando Podman, verifique que no haya imágenes o contenedores presentes en el almacenamiento local:

    $ podman images
    REPOSITORY  TAG     	IMAGE ID	CREATED 	SIZE
    $ podman ps -a
    CONTAINER ID  IMAGE   	COMMAND 	CREATED 	STATUS  	PORTS   	NAMES

    Ahora lea el archivo YAML en el clon de Git. Si está tratando de usar el archivo YAML proporcionado por el repositorio de Git, debe editar manualmente las rutas de los montajes de enlaces, ya que están precedidos por /home/baude. Al comienzo del proceso, Podman crea las dos imágenes:

    $ podman play kube lamp.yaml  
    STEP 1/2: FROM docker.io/library/mariadb
    STEP 2/2: COPY my.cnf /etc/mysql/my.cnf
    COMMIT localhost/mariadb-conf:latest
    --> e4e4e63a5e4
    Successfully tagged localhost/mariadb-conf:latest
    e4e4e63a5e4fcd3eff0c5c0901d2dbd3bacee99001a60c06046829944592ea0e
    STEP 1/2: FROM docker.io/library/php:7.2-apache
    STEP 2/2: RUN docker-php-ext-install mysqli && apt-get update && apt-get install -y git
    Configuring for:
    PHP Api Version:     	20170718
    Zend Module Api No:  	20170718
    Zend Extension Api No:   320170718
    checking for grep that handles long lines and -e... /bin/grep
    ...
    Installing shared extensions: 	/usr/local/lib/php/extensions/no-debug-non-zts-20170718/
    Installing header files:      	/usr/local/include/php/
    find . -name *.gcno -o -name *.gcda | xargs rm -f
    find . -name *.lo -o -name *.o | xargs rm -f
    find . -name *.la -o -name *.a | xargs rm -f
    find . -name *.so | xargs rm -f
    find . -name .libs -a -type d|xargs rm -rf
    rm -f libphp.la   	modules/* libs/*
    Get:1 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]
    Get:2 http://deb.debian.org/debian buster InRelease [122 kB]
    Get:3 http://deb.debian.org/debian buster-updates InRelease [51.9 kB]
    Get:4 http://security.debian.org/debian-security buster/updates/main amd64 Packages [305 kB]
    Get:5 http://deb.debian.org/debian buster/main amd64 Packages [7907 kB]
    Get:6 http://deb.debian.org/debian buster-updates/main amd64 Packages [15.2 kB]
    Fetched 8466 kB in 2s (4933 kB/s)
    Reading package lists...
    Reading package lists...
    Building dependency tree...
    Reading state information...
    ...
    Setting up git (1:2.20.1-2+deb10u3) ...
    Setting up xauth (1:1.0.10-1) ...
    Processing triggers for libc-bin (2.28-10) ...
    Processing triggers for mime-support (3.62) ...
    COMMIT localhost/php-7.2-apache-mysqli:latest
    --> f0454e4fbfe
    Successfully tagged localhost/php-7.2-apache-mysqli:latest
    f0454e4fbfe3e59da53255553e019e23380e9006c247a2c218dd4499cb69caf7
    Pod:
    75aa5664f1e8c2e9b819b8377337dc245911cfbf15e8dc49fb9ee002c8329704
    Contenedores:
    c439bffa796f0a7743ad6bcf43e4c88cf485bd7494f5352b237fa9e048dc10c2
    2fadb344560a904cb1b0dc2a92fd2cbcfda3c944180c941ffaf4c89793849968

    Al final, play kube muestra la identificación del módulo. Si todo salió bien, debería poder apuntar un cliente web a su puerto HTTP asignado, que a su vez interactúa con la base de datos y devuelve dos resultados a una solicitud predefinida:

    $ curl http://localhost:8080
    Returned 2 rows.
     
    3837 Minneapolis USA Minnesota 382618
    3851 Saint Paul USA Minnesota 287151

    Y ahora, si desea eliminar todos los pods asociados con su archivo YAML, puede omitir el --down bandera en play kube:

    $ podman pod ps
    POD ID    	NAME    	STATUS  	CREATED    	INFRA ID  	# OF CONTAINERS
    75aa5664f1e8  lamp    	Running 	4 minutes ago  ae59b18e6dea  5
    $ podman play kube --down lamp.yaml  
    Pods stopped:
    75aa5664f1e8c2e9b819b8377337dc245911cfbf15e8dc49fb9ee002c8329704
    Pods removed:
    75aa5664f1e8c2e9b819b8377337dc245911cfbf15e8dc49fb9ee002c8329704
    $ podman pod ps
    POD ID    	NAME    	STATUS  	CREATED    	INFRA ID  	# OF CONTAINERS

    Envoltura

    Podman's play kube El comando continúa obteniendo nuevas funciones. play kube y generate kube son un área de crecimiento para el equipo ascendente de Podman y un medio rico en funciones para grabar y reproducir pods. Nos encantaría escuchar sus ideas para futuras actualizaciones.

    La introducción de imágenes sobre la marcha y el uso de contenedores de inicialización para prepararse para la configuración de pod y desmantelar sus pods brinda casos de uso únicos para Podman.

    Artículos de interés

    Subir