Introducción
Este tutorial lo guía a través de la ejecución de comandos en pods de Kubernetes al iniciar. Aprenderá cómo configurar comandos de inicio utilizando los campos command y args, ejecutar múltiples comandos y manejar fallos de inicio. Utilizaremos Minikube para crear un entorno local de Kubernetes donde puede practicar estos conceptos de primera mano.
Al final de este laboratorio (lab), entenderá cómo personalizar el comportamiento de sus pods de Kubernetes durante el inicio y garantizar una implementación fluida de la aplicación. Este conocimiento es esencial para configurar adecuadamente aplicaciones contenerizadas en un entorno de Kubernetes.
Configuración de su entorno de Kubernetes
En este paso, prepararemos nuestro entorno iniciando Minikube y comprendiendo los conceptos básicos de Kubernetes necesarios para este laboratorio (lab).
¿Qué es Kubernetes?
Kubernetes es una plataforma de código abierto diseñada para automatizar la implementación, escalado y operación de contenedores de aplicaciones. En el núcleo de Kubernetes se encuentran los Pods (cápsulas) - las unidades desplegables más pequeñas que se pueden crear y gestionar.
Inicio de Minikube
Minikube es una herramienta que le permite ejecutar Kubernetes de forma local. Vamos a iniciarlo:
minikube start --driver=docker
Este comando creará un clúster local de Kubernetes utilizando Docker como controlador. El proceso de inicio puede tardar unos minutos mientras se descargan los componentes necesarios.
Debería ver una salida similar a la siguiente:
😄 minikube v1.30.1 on Ubuntu 22.04
✨ Using the docker driver based on user configuration
📌 Using Docker driver with root privileges
👍 Starting control plane node minikube in cluster minikube
🚜 Pulling base image ...
🔥 Creating docker container (CPUs=2, Memory=2200MB) ...
🐳 Preparing Kubernetes v1.27.4 on Docker 24.0.4 ...
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔎 Verifying Kubernetes components...
🌟 Enabled addons: default-storageclass, storage-provisioner
💡 kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
Verificación de la instalación
Vamos a verificar que todo está funcionando correctamente comprobando el estado de nuestro clúster de Minikube:
minikube status
Debería ver una salida que indique que Minikube está en ejecución:
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
Ahora, vamos a comprobar que kubectl (la herramienta de línea de comandos de Kubernetes) está configurada correctamente:
kubectl get nodes
Debería ver un nodo (su instancia de Minikube) listado como Listo (Ready):
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 2m15s v1.27.4
Comprensión de los Pods de Kubernetes
Un Pod es la unidad básica de ejecución de una aplicación de Kubernetes. Cada Pod representa un proceso en ejecución en su clúster y encapsula uno o más contenedores. Los Pods son efímeros por diseño, lo que significa que se pueden crear, destruir y recrear según sea necesario.
En Kubernetes, normalmente se definen los Pods en archivos YAML. Para este laboratorio (lab), ya hemos preparado algunos archivos YAML de ejemplo en su entorno.
Vamos al directorio donde se encuentran estos archivos:
cd ~/project/kubernetes-examples
ls -la
Debería ver los siguientes archivos:
total 20
drwxr-xr-x 2 labex labex 4096 Sep 21 10:00 .
drwxr-xr-x 3 labex labex 4096 Sep 21 10:00 ..
-rw-r--r-- 1 labex labex 193 Sep 21 10:00 basic-pod.yaml
-rw-r--r-- 1 labex labex 254 Sep 21 10:00 liveness-probe-pod.yaml
-rw-r--r-- 1 labex labex 312 Sep 21 10:00 multi-command-pod.yaml
-rw-r--r-- 1 labex labex 263 Sep 21 10:00 startup-command-pod.yaml
Ahora que nuestro entorno está configurado, estamos listos para comenzar a trabajar con los Pods de Kubernetes y aprender cómo ejecutar comandos al iniciar.
Creación de su primer Pod con comandos básicos de inicio
En este paso, crearemos nuestro primer Pod de Kubernetes y entenderemos cómo ejecuta comandos al iniciar. Examinaremos el campo command que define lo que el contenedor debe ejecutar cuando se inicia.
Exploración de la configuración básica de un Pod
Primero, examinemos la configuración de un Pod básico. Abra el archivo basic-pod.yaml con el editor nano:
nano basic-pod.yaml
Verá un archivo YAML con el siguiente contenido:
apiVersion: v1
kind: Pod
metadata:
name: basic-pod
spec:
containers:
- name: ubuntu
image: ubuntu:20.04
command: ["/bin/bash", "-c", "echo 'Pod is running' && sleep 3600"]
Esta configuración define:
- Un Pod llamado
basic-pod - Un solo contenedor llamado
ubuntuque utiliza la imagenubuntu:20.04 - Un comando de inicio que muestra un mensaje y luego se queda en espera durante 3600 segundos (1 hora)
El campo command especifica el ejecutable que se ejecutará cuando el contenedor se inicie. En este caso, estamos ejecutando la shell /bin/bash con la bandera -c, que nos permite pasar una cadena de comandos para ejecutar.
Presione Ctrl+X para salir del editor nano.
Creación del Pod
Vamos a crear este Pod en nuestro clúster de Kubernetes:
kubectl apply -f basic-pod.yaml
Debería ver una salida como la siguiente:
pod/basic-pod created
Comprobación del estado del Pod
Ahora, comprobemos si nuestro Pod se está ejecutando correctamente:
kubectl get pods
Debería ver una salida similar a la siguiente:
NAME READY STATUS RESTARTS AGE
basic-pod 1/1 Running 0 30s
Esto indica que nuestro Pod se está ejecutando correctamente. El 1/1 en la columna READY significa que un contenedor está en ejecución de un contenedor esperado.
Visualización de los registros del Pod
Para ver la salida de nuestro comando de inicio, podemos comprobar los registros del Pod:
kubectl logs basic-pod
Debería ver lo siguiente:
Pod is running
Esto confirma que nuestro comando de inicio se ejecutó correctamente.
Exploración del contenedor en ejecución
Examinemos lo que está sucediendo dentro de nuestro contenedor ejecutando una shell interactiva:
kubectl exec -it basic-pod -- /bin/bash
Ahora está dentro de la shell del contenedor. Verifiquemos que nuestro proceso se está ejecutando:
ps aux
Debería ver que el comando sleep se está ejecutando, que es parte de nuestro comando de inicio:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 4112 3372 ? Ss 10:05 0:00 /bin/bash -c echo 'Pod is running' && sleep 3600
root 7 0.0 0.0 4112 3536 pts/0 Ss 10:06 0:00 /bin/bash
root 14 0.0 0.0 5900 2928 pts/0 R+ 10:06 0:00 ps aux
root 15 0.0 0.0 2512 580 ? S 10:06 0:00 sleep 3600
El proceso con PID 1 es nuestro comando de inicio, y el comando sleep 3600 se está ejecutando como un proceso separado.
Salga de la shell del contenedor escribiendo:
exit
Comprensión del ciclo de vida del Pod
Cuando crea un Pod, este pasa por varias fases:
- Pending (Pendiente): El Pod ha sido aceptado por Kubernetes pero aún no se está ejecutando.
- Running (En ejecución): El Pod se está ejecutando con todos sus contenedores.
- Succeeded (Completado): Todos los contenedores en el Pod se han terminado correctamente.
- Failed (Fallido): Todos los contenedores se han terminado, y al menos un contenedor ha fallado.
- Unknown (Desconocido): No se puede determinar el estado del Pod.
Nuestro Pod está en el estado Running porque nuestro proceso principal (sleep 3600) todavía se está ejecutando. Cuando este proceso se complete o se detenga, el Pod pasará al estado Succeeded o Failed, dependiendo del código de salida.
Ahora comprende cómo crear un Pod básico y ejecutar comandos al iniciar utilizando el campo command.
Uso de Command y Args para la configuración de inicio
En este paso, aprenderemos cómo utilizar los campos command y args juntos para configurar comportamientos de inicio más complejos en los Pods de Kubernetes.
Comprensión de Command y Args
Kubernetes ofrece dos formas principales de especificar el comando que se ejecuta cuando un contenedor se inicia:
command: Especifica el ejecutable a ejecutar (similar al ENTRYPOINT de Docker).args: Especifica los argumentos a pasar al comando (similar al CMD de Docker).
Utilizar estos campos de forma separada o juntos te brinda flexibilidad en cómo se inician tus contenedores.
Exploración del Pod con comando de inicio
Examinemos el archivo startup-command-pod.yaml:
nano startup-command-pod.yaml
Verás la siguiente configuración:
apiVersion: v1
kind: Pod
metadata:
name: startup-command-pod
spec:
containers:
- name: ubuntu
image: ubuntu:20.04
command: ["/bin/bash"]
args:
["-c", "echo 'Custom startup message' > /tmp/startup.txt && sleep 3600"]
En esta configuración:
- El campo
commandespecifica que queremos ejecutar/bin/bash. - El campo
argsproporciona los argumentos a pasar a bash:-cy la cadena que contiene nuestros comandos.
Esta separación de comando y argumentos hace que la configuración sea más legible y mantenible.
Presiona Ctrl+X para salir del editor nano.
Creación del Pod con comando de inicio
Vamos a crear este Pod:
kubectl apply -f startup-command-pod.yaml
Deberías ver:
pod/startup-command-pod created
Comprobación del estado del Pod
Verifica que el Pod esté en ejecución:
kubectl get pods startup-command-pod
Deberías ver:
NAME READY STATUS RESTARTS AGE
startup-command-pod 1/1 Running 0 30s
Verificación del comando de inicio
Ahora, verifiquemos que nuestro comando de inicio se haya ejecutado correctamente comprobando si creó el archivo esperado:
kubectl exec startup-command-pod -- cat /tmp/startup.txt
Deberías ver:
Custom startup message
Esto confirma que nuestro comando se ejecutó correctamente y creó el archivo con el contenido especificado.
Comprensión de la diferencia entre Command y Args
Es importante entender la relación entre command y args:
- Si solo especificas
command, se anula el ENTRYPOINT predeterminado de la imagen del contenedor. - Si solo especificas
args, se anula el CMD predeterminado de la imagen del contenedor. - Si especificas tanto
commandcomoargs, se anulan tanto el ENTRYPOINT como el CMD.
Veamos qué sucede si modificamos la configuración de nuestro Pod. Crea un nuevo archivo llamado modified-command-pod.yaml:
nano modified-command-pod.yaml
Agrega el siguiente contenido:
apiVersion: v1
kind: Pod
metadata:
name: modified-command-pod
spec:
containers:
- name: ubuntu
image: ubuntu:20.04
command: ["/bin/echo"]
args: ["This message is printed by echo"]
Guarda y sal con Ctrl+X, seguido de Y y Enter.
Ahora, vamos a crear este Pod:
kubectl apply -f modified-command-pod.yaml
Deberías ver:
pod/modified-command-pod created
Comprueba los registros para ver qué sucedió:
kubectl logs modified-command-pod
Deberías ver:
This message is printed by echo
Observa cómo el Pod ejecutó el comando /bin/echo con el argumento especificado y luego se terminó, ya que echo sale después de imprimir su salida.
Comprueba el estado del Pod:
kubectl get pods modified-command-pod
Deberías ver algo como:
NAME READY STATUS RESTARTS AGE
modified-command-pod 0/1 Completed 0 45s
El estado Completed indica que el Pod se ejecutó hasta el final y salió correctamente.
Ahora entiendes cómo utilizar command y args juntos para configurar el comportamiento de inicio en los Pods de Kubernetes.
Ejecución de múltiples comandos y manejo de fallos de inicio
En este paso, aprenderemos cómo ejecutar múltiples comandos al iniciar un Pod y cómo manejar los fallos de inicio utilizando comprobaciones de salud.
Ejecución de múltiples comandos
A menudo, es necesario ejecutar múltiples comandos cuando un contenedor se inicia. Hay varias formas de hacer esto en Kubernetes:
- Encadenar comandos utilizando operadores de shell (
&&,;, etc.). - Utilizar un archivo de script.
- Utilizar un contenedor de inicialización (init container).
Exploremos el primer método examinando el archivo multi-command-pod.yaml:
nano multi-command-pod.yaml
Verás:
apiVersion: v1
kind: Pod
metadata:
name: multi-command-pod
spec:
containers:
- name: ubuntu
image: ubuntu:20.04
command: ["/bin/bash", "-c"]
args:
[
"echo 'First command' > /tmp/first.txt && echo 'Second command' > /tmp/second.txt && sleep 3600"
]
Esta configuración encadena múltiples comandos utilizando el operador &&, que ejecuta cada comando solo si el anterior tiene éxito.
Presiona Ctrl+X para salir del editor.
Vamos a crear este Pod:
kubectl apply -f multi-command-pod.yaml
Deberías ver:
pod/multi-command-pod created
Ahora, verifiquemos que ambos comandos se hayan ejecutado comprobando los archivos creados:
kubectl exec multi-command-pod -- cat /tmp/first.txt
Deberías ver:
First command
Y para el segundo archivo:
kubectl exec multi-command-pod -- cat /tmp/second.txt
Deberías ver:
Second command
Manejo de fallos de inicio con comprobaciones de salud
Kubernetes proporciona mecanismos para detectar y manejar fallos de inicio:
- Liveness Probes (Comprobaciones de vida): Comprueban si el contenedor está en ejecución; si no lo está, Kubernetes lo reiniciará.
- Readiness Probes (Comprobaciones de preparación): Comprueban si el contenedor está listo para recibir tráfico.
- Startup Probes (Comprobaciones de inicio): Comprueban si la aplicación se ha iniciado; son útiles para contenedores que tardan en iniciar.
Examinemos un Pod que utiliza una comprobación de vida (liveness probe):
nano liveness-probe-pod.yaml
Verás:
apiVersion: v1
kind: Pod
metadata:
name: liveness-probe-pod
spec:
containers:
- name: ubuntu
image: ubuntu:20.04
command: ["/bin/bash", "-c"]
args: ["touch /tmp/healthy && sleep 3600"]
livenessProbe:
exec:
command: ["cat", "/tmp/healthy"]
initialDelaySeconds: 5
periodSeconds: 5
En esta configuración:
- El contenedor crea un archivo
/tmp/healthyal iniciar. - La comprobación de vida comprueba este archivo cada 5 segundos.
- Si el archivo falta, Kubernetes considera que el contenedor no está saludable y lo reinicia.
Presiona Ctrl+X para salir del editor.
Vamos a crear este Pod:
kubectl apply -f liveness-probe-pod.yaml
Deberías ver:
pod/liveness-probe-pod created
Comprueba que el Pod esté en ejecución:
kubectl get pods liveness-probe-pod
Deberías ver:
NAME READY STATUS RESTARTS AGE
liveness-probe-pod 1/1 Running 0 30s
Ahora, veamos qué sucede si eliminamos el archivo de comprobación de salud:
kubectl exec liveness-probe-pod -- rm /tmp/healthy
Espera unos 10 segundos y luego comprueba el estado del Pod de nuevo:
kubectl get pods liveness-probe-pod
Deberías ver que el contenedor se ha reiniciado:
NAME READY STATUS RESTARTS AGE
liveness-probe-pod 1/1 Running 1 60s
El contador de reinicios (RESTARTS) ha aumentado a 1, lo que indica que Kubernetes detectó el estado no saludable y reinició el contenedor.
Verifiquemos que el archivo de comprobación de salud exista de nuevo (debería haber sido recreado por el comando de inicio cuando el contenedor se reinició):
kubectl exec liveness-probe-pod -- ls -la /tmp/healthy
Deberías ver que el archivo existe de nuevo:
-rw-r--r-- 1 root root 0 Sep 21 10:30 /tmp/healthy
Esto demuestra cómo Kubernetes puede recuperarse automáticamente de fallos de inicio y mantener el estado deseado de tus aplicaciones.
Creación de un script de inicio personalizado
Para una inicialización más compleja, es posible que desees utilizar un script de inicio personalizado. Vamos a crear un Pod que utilice un script de shell para el inicio:
nano script-pod.yaml
Agrega el siguiente contenido:
apiVersion: v1
kind: Pod
metadata:
name: script-pod
spec:
containers:
- name: ubuntu
image: ubuntu:20.04
command: ["/bin/bash", "-c"]
args:
- |
cat > /tmp/startup.sh << 'EOF'
#!/bin/bash
echo "Script started at $(date)" > /tmp/script-log.txt
echo "Creating configuration files..." >> /tmp/script-log.txt
mkdir -p /tmp/config
echo "app_name=MyApp" > /tmp/config/app.conf
echo "version=1.0" >> /tmp/config/app.conf
echo "Script completed successfully" >> /tmp/script-log.txt
EOF
chmod +x /tmp/startup.sh
/tmp/startup.sh
sleep 3600
Esta configuración:
- Crea un script de inicio en el contenedor.
- Lo hace ejecutable.
- Ejecuta el script.
- Mantiene el contenedor en ejecución con un comando de espera (sleep).
Guarda y sal con Ctrl+X, seguido de Y y Enter.
Vamos a crear este Pod:
kubectl apply -f script-pod.yaml
Deberías ver:
pod/script-pod created
Espera un momento para que el Pod se inicie y luego comprueba su estado:
kubectl get pods script-pod
Deberías ver:
NAME READY STATUS RESTARTS AGE
script-pod 1/1 Running 0 30s
Ahora, comprobemos la salida de nuestro script:
kubectl exec script-pod -- cat /tmp/script-log.txt
Deberías ver algo como:
Script started at Tue Sep 21 10:35:42 UTC 2023
Creating configuration files...
Script completed successfully
Y verifiquemos que el archivo de configuración se haya creado:
kubectl exec script-pod -- cat /tmp/config/app.conf
Deberías ver:
app_name=MyApp
version=1.0
Esto demuestra cómo utilizar scripts de inicio complejos para inicializar tus contenedores en Kubernetes.
Mejores prácticas y aplicaciones en el mundo real
En este último paso, exploraremos las mejores prácticas para ejecutar comandos en los Pods de Kubernetes al iniciar y crearemos un ejemplo de aplicación en el mundo real que implemente estas prácticas.
Mejores prácticas para comandos de inicio
Al configurar comandos de inicio para los Pods de Kubernetes, considera las siguientes mejores prácticas:
- Mantén los comandos de inicio idempotentes: Los comandos deben ser seguros para ejecutarse múltiples veces sin causar problemas.
- Utiliza comprobaciones de salud: Implementa comprobaciones de vida (liveness) y preparación (readiness) para verificar un inicio exitoso.
- Maneja los fallos de manera elegante: Incluye manejo de errores en tus scripts de inicio.
- Separa las responsabilidades: Utiliza contenedores de inicialización (init containers) para tareas de inicialización separadas de tu aplicación principal.
- Limita el tiempo de inicio: Mantén la inicialización rápida para reducir el tiempo de despliegue.
- Utiliza variables de entorno: Haz que tus comandos de inicio sean configurables a través de variables de entorno.
- Registra el progreso del inicio: Genera registros claros para la resolución de problemas.
Uso de contenedores de inicialización para tareas de inicio
Los contenedores de inicialización se ejecutan antes de que los contenedores de la aplicación se inicien y son ideales para tareas de configuración. Vamos a crear un Pod con un contenedor de inicialización:
nano init-container-pod.yaml
Agrega el siguiente contenido:
apiVersion: v1
kind: Pod
metadata:
name: init-container-pod
spec:
initContainers:
- name: init-config
image: ubuntu:20.04
command: ["/bin/bash", "-c"]
args:
- |
echo "Initializing configuration..."
mkdir -p /work-dir/config
echo "database_url=mysql://user:password@db:3306/mydb" > /work-dir/config/db.conf
echo "api_key=1234567890" > /work-dir/config/api.conf
echo "Initialization complete"
volumeMounts:
- name: shared-volume
mountPath: /work-dir
containers:
- name: app
image: ubuntu:20.04
command: ["/bin/bash", "-c"]
args:
- |
echo "Application starting..."
echo "Reading configuration:"
cat /work-dir/config/db.conf
cat /work-dir/config/api.conf
echo "Application running..."
sleep 3600
volumeMounts:
- name: shared-volume
mountPath: /work-dir
volumes:
- name: shared-volume
emptyDir: {}
En esta configuración:
- El contenedor de inicialización
init-configse ejecuta primero y crea archivos de configuración. - Ambos contenedores comparten un volumen llamado
shared-volume. - El contenedor principal de la aplicación lee la configuración creada por el contenedor de inicialización.
Guarda y sal con Ctrl+X, seguido de Y y Enter.
Vamos a crear este Pod:
kubectl apply -f init-container-pod.yaml
Deberías ver:
pod/init-container-pod created
Comprueba el estado del Pod:
kubectl get pods init-container-pod
Deberías ver que el Pod está en ejecución:
NAME READY STATUS RESTARTS AGE
init-container-pod 1/1 Running 0 30s
Ahora, comprobemos los registros del contenedor principal:
kubectl logs init-container-pod -c app
Deberías ver algo como:
Application starting...
Reading configuration:
database_url=mysql://user:password@db:3306/mydb
api_key=1234567890
Application running...
Esto confirma que el contenedor de inicialización creó con éxito los archivos de configuración y que el contenedor principal pudo leerlos.
Ejemplo en el mundo real: Aplicación web con comprobación de base de datos
Vamos a crear un ejemplo más realista: una aplicación web que comprueba la disponibilidad de la base de datos antes de iniciar:
nano webapp-pod.yaml
Agrega el siguiente contenido:
apiVersion: v1
kind: Pod
metadata:
name: webapp-pod
spec:
initContainers:
- name: wait-for-db
image: busybox:1.28
command: ["/bin/sh", "-c"]
args:
- |
echo "Checking for database availability..."
## In a real scenario, this would check an actual database
## For this example, we'll simulate success after a short delay
sleep 5
echo "Database is available"
touch /tmp/db-ready
volumeMounts:
- name: shared-volume
mountPath: /tmp
containers:
- name: webapp
image: nginx:1.19
ports:
- containerPort: 80
command: ["/bin/sh", "-c"]
args:
- |
if [ -f /tmp/db-ready ]; then
echo "Database connection verified, starting web application..."
## Customize nginx configuration
echo "<h1>Web Application Started Successfully</h1>" > /usr/share/nginx/html/index.html
echo "<p>Connected to database</p>" >> /usr/share/nginx/html/index.html
## Start nginx
nginx -g 'daemon off;'
else
echo "Error: Database not available"
exit 1
fi
volumeMounts:
- name: shared-volume
mountPath: /tmp
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
volumes:
- name: shared-volume
emptyDir: {}
Esta configuración:
- Utiliza un contenedor de inicialización para comprobar la disponibilidad de la base de datos (simulado).
- El contenedor principal comprueba la existencia de un archivo creado por el contenedor de inicialización antes de iniciar.
- Incluye una comprobación de preparación para verificar que la aplicación está sirviendo tráfico.
- Utiliza un volumen compartido para la comunicación entre contenedores.
Guarda y sal con Ctrl+X, seguido de Y y Enter.
Vamos a crear este Pod:
kubectl apply -f webapp-pod.yaml
Deberías ver:
pod/webapp-pod created
Espera un momento para que el Pod se inicie completamente y luego comprueba su estado:
kubectl get pods webapp-pod
Deberías ver:
NAME READY STATUS RESTARTS AGE
webapp-pod 1/1 Running 0 30s
El 1/1 en la columna READY indica que la comprobación de preparación ha tenido éxito.
Vamos a hacer un reenvío de puertos para acceder a la aplicación web:
kubectl port-forward webapp-pod 8080:80 &
Este comando se ejecuta en segundo plano (debido al &). Ahora podemos acceder a la aplicación web utilizando curl:
curl http://localhost:8080
Deberías ver:
<h1>Web Application Started Successfully</h1>
<p>Connected to database</p>
Esto confirma que nuestra aplicación se inicializó correctamente, verificó la disponibilidad de la base de datos y ahora está sirviendo tráfico.
Detén el proceso de reenvío de puertos:
pkill -f "kubectl port-forward"
Limpieza
Antes de concluir el laboratorio, vamos a limpiar los recursos que creamos:
kubectl delete pod basic-pod startup-command-pod modified-command-pod multi-command-pod liveness-probe-pod script-pod init-container-pod webapp-pod
Deberías ver:
pod "basic-pod" deleted
pod "startup-command-pod" deleted
pod "modified-command-pod" deleted
pod "multi-command-pod" deleted
pod "liveness-probe-pod" deleted
pod "script-pod" deleted
pod "init-container-pod" deleted
pod "webapp-pod" deleted
Ahora has aprendido cómo ejecutar comandos en los Pods de Kubernetes al iniciar, ejecutar múltiples comandos, manejar fallos y aplicar mejores prácticas en escenarios del mundo real.
Resumen
En este laboratorio, has aprendido cómo ejecutar comandos en los Pods de Kubernetes al iniciar. Has adquirido experiencia práctica en:
- Configurar un entorno de Kubernetes utilizando Minikube.
- Crear y gestionar Pods con comandos de inicio específicos.
- Utilizar los campos
commandyargspara configurar el comportamiento de los contenedores. - Ejecutar múltiples comandos utilizando operadores de shell y scripts.
- Manejar fallos de inicio con comprobaciones de salud.
- Implementar mejores prácticas con contenedores de inicialización (init containers).
- Construir aplicaciones del mundo real que requieran una inicialización adecuada.
Estas habilidades son esenciales para desplegar aplicaciones contenerizadas en entornos de Kubernetes. Al configurar correctamente los comandos de inicio, puedes asegurarte de que tus aplicaciones se inicialicen correctamente, verifiquen las dependencias y manejen los errores de manera elegante.
A medida que continúes tu viaje en Kubernetes, recuerda que una inicialización adecuada de las aplicaciones es una parte crítica de la construcción de sistemas confiables, escalables y mantenibles.


