[Nativo de la nube] Contenedor temporal de Kubernetes

contenedor temporal

Estado de la característica: Kubernetes v1.25 [estable]
Esta página proporciona una descripción general de un contenedor efímero: un contenedor especial que se ejecuta temporalmente dentro de un Pod existente para completar operaciones iniciadas por el usuario, como la resolución de problemas. Usaría un contenedor de prueba para inspeccionar el servicio, no para construir la aplicación con él.

Más información sobre contenedores temporales

Los pods son los componentes básicos de las aplicaciones de Kubernetes. Dado que los Pods son desechables y reemplazables, no se pueden agregar contenedores a un Pod una vez que se haya creado. En cambio, las implementaciones a menudo se usan para eliminar y reemplazar pods de manera controlada.

A veces es necesario verificar el estado de los Pods existentes. Por ejemplo, solucionar fallas difíciles de reproducir. En estos escenarios, es posible ejecutar contenedores efímeros en Pods existentes para verificar su estado y ejecutar comandos arbitrarios.

¿Qué es un contenedor temporal?

Los contenedores efímeros se diferencian de otros contenedores en que carecen de garantías sobre los recursos o la ejecución y nunca se reinician automáticamente, lo que los hace inadecuados para crear aplicaciones. Los contenedores efímeros se describen usando la misma sección ContainerSpec que los contenedores normales, pero muchos campos son incompatibles y no están permitidos.

  • Los contenedores efímeros no tienen configuración de puertos, por lo que no se permiten campos como ports, livenessProbe, readinessProbe.
  • La asignación de recursos del pod es inmutable, por lo que no se permite la configuración de recursos

Los contenedores efímeros se crean utilizando un procesador especial de contenedores efímeros en la API, en lugar de agregarlos directamente a la sección pod.spec, por lo que no se puede usar kubectl edit para agregar un contenedor efímero.

Al igual que los contenedores regulares, los contenedores efímeros no se pueden cambiar ni eliminar después de que se hayan agregado a un Pod.

El propósito del contenedor temporal

Los contenedores efímeros son útiles para la resolución de problemas interactivos cuando kubectl exec es inútil porque el contenedor falla o la imagen del contenedor no contiene herramientas de depuración.

En particular, las imágenes de Distroless permiten a los usuarios implementar imágenes de contenedores mínimas, lo que reduce la superficie de ataque y reduce la exposición a fallas y vulnerabilidades. Dado que la imagen sin distro no contiene un shell ni ninguna herramienta de depuración, es difícil solucionar los problemas utilizando solo el comando kubectl exec.

Al usar contenedores efímeros, es útil habilitar el intercambio de espacios de nombres de procesos para ver los procesos en otros contenedores.

Use un contenedor de depuración temporal para la depuración

Estado de la característica: Kubernetes v1.25 [estable]
Los contenedores efímeros son útiles para la resolución de problemas interactivos cuando kubectl exec no se ejecuta debido a fallas del contenedor o imágenes de contenedor que no contienen depuradores (por ejemplo, sin imágenes de lanzamiento, etc.)

Un ejemplo de depuración usando un contenedor temporal

Puede usar el comando de depuración kubectl para agregar un contenedor temporal a un pod en ejecución. Primero, cree un pod como el ejemplo:

kubectl run ephemeral-demo --image=registry.k8s.io/pause:3.1 --restart=Never

La imagen de contenedor de pausa se usa en este ejemplo porque no contiene un depurador, pero este método funciona para todas las imágenes de contenedor.

Si intenta usar kubectl exec para crear un shell, verá un error porque no hay un shell en esta imagen de contenedor.

kubectl exec -it ephemeral-demo -- sh

OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"sh\": executable file not found in $PATH": unknown

En su lugar, puede usar kubectl debug para agregar un contenedor de depuración. Si especifica el parámetro -i o --interactive, kubectl se adjuntará automáticamente a la consola del contenedor efímero

kubectl debug -it ephemeral-demo --image=busybox:1.28 --target=ephemeral-demo

Defaulting debug container name to debugger-8xzrl.
If you don't see a command prompt, try pressing enter.
/ #

Este comando agrega un nuevo contenedor busybox y lo adjunta. El parámetro --target especifica el espacio de nombres del proceso de otro contenedor. Esta operación de especificar el espacio de nombres del proceso es necesaria porque kubectl run no puede habilitar espacios de nombres de procesos compartidos en los pods que crea.

Puede usar kubectl describe para ver el estado del contenedor temporal recién creado

kubectl describe pod ephemeral-demo

Use kubectl delete para eliminar pods terminados:

kubectl delete pod ephemeral-demo

Supongo que te gusta

Origin blog.csdn.net/ljx1528/article/details/131708598
Recomendado
Clasificación