# Containers Efímeros

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->








  <div class="feature-state-notice feature-alpha">
      <span class="feature-state-name">ESTADO DE LA RECURSOS:</span>
      <code>Kubernetes v1.36 [alpha]</code>
    </div>
  



Esta página proporciona una descripción general de los Containers efímeros: un tipo especial de Container
que se ejecuta temporalmente en un <a class='glossary-tooltip' title='El objeto más pequeño y simple de Kubernetes. Un Pod es la unidad mínima de computación en Kubernetes y representa uno o más contenedores ejecutándose en el clúster.' data-bs-toggle='tooltip' data-bs-placement='top' href='/es/docs/concepts/workloads/pods/pod-overview/' target='_blank' aria-label='Pod'>Pod</a> ya existente para cumplir las
acciones iniciadas por el usuario, como por ejemplo, la solución de problemas. En vez de ser utilizadas para
crear aplicaciones, los Containers efímeros se utilizan para examinar los servicios.

<div class="alert alert-danger" role="note"><h4 class="alert-heading">Advertencia:</h4>Los Containers efímeros se encuentran en una fase alfa inicial y no son aptos para clústers
de producción. Es de esperar que esta característica no funcione en algunas situaciones, por
ejemplo, al seleccionar los Namespaces de un Container. De acuerdo con la <a href="/docs/reference/using-api/deprecation-policy/">Política de
Deprecación de Kubernetes</a>, esta característica
alfa puede variar significativamente en el futuro o ser eliminada por completo.</div>




<!-- body -->

## Entendiendo los Containers efímeros

<a class='glossary-tooltip' title='El objeto más pequeño y simple de Kubernetes. Un Pod es la unidad mínima de computación en Kubernetes y representa uno o más contenedores ejecutándose en el clúster.' data-bs-toggle='tooltip' data-bs-placement='top' href='/es/docs/concepts/workloads/pods/pod-overview/' target='_blank' aria-label='Pods'>Pods</a> son el componente fundamental de las
aplicaciones de Kubernetes. Puesto que los Pods están previstos para ser desechables
y reemplazables, no se puede añadir un Container a un Pod una vez creado. Sin embargo, por lo
general se eliminan y se reemplazan los Pods de manera controlada utilizando
<a class='glossary-tooltip' title='Un objeto API que gestiona una aplicación replicada.' data-bs-toggle='tooltip' data-bs-placement='top' href='/es/docs/concepts/workloads/controllers/deployment/' target='_blank' aria-label='Deployments'>Deployments</a>.

En ocasiones es necesario examinar el estado de un Pod existente, como por ejemplo,
para poder solucionar un error difícil de reproducir. Puede ejecutar en estos casos
un Container efímero en un Pod ya existente para examinar su estado y para ejecutar
comandos de manera arbitraria.

### Qué es un Container efímero?

Los Containers efímeros se diferencian de otros Containers en que no garantizan ni los
recursos ni la ejecución, y en que nunca se reiniciarán automáticamente, de modo que no
son aptos para la construcción de aplicaciones. Los Containers efímeros se describen
usando la misma [ContainerSpec](/docs/reference/generated/kubernetes-api/v1.36/#container-v1-core) que los Containers regulares, aunque muchos campos son
incompatibles y no están habilitados para los Containers efímeros.

- Los Containers efímeros no pueden tener puertos, por lo que campos como `ports`,
  `livenessProbe`, `readinessProbe` no están habilitados.
- Las asignaciones de recursos del Pod son inmutables, por lo que no esta habilitado
  configurar "resources".
- Para obtener una lista completa de los campos habilitados, consulte la documentación
  de referencia [EphemeralContainer] (/docs/reference/generated/kubernetes-api/v1.36/#ephemeralcontainer-v1-core).

En vez de añadirlos de forma directa al `pod.spec`, los Containers efímeros se crean usando un
controlador especial de la API, `ephemeralcontainers`, por lo tanto no es posible añadir un
Container efímero utilizando `kubectl edit`.

Al igual en el caso de los Containers regulares, no se puede modificar o remover un Container
efímero después de haberlo agregado a un Pod.

## Casos de uso para los Containers efímeros

Los Containers efímeros resultan útiles para la solución interactiva de incidencias cuando
`kubectl exec` es insuficiente tanto porque un container se ha caído, como porque la imagen de un
Container no incluye las utilidades de depuración.

En particular, las [imágenes distroless](https://github.com/GoogleContainerTools/distroless)
le permiten desplegar imágenes de Containers mínimos que disminuyen la superficie de ataque
y la exposición a errores y vulnerabilidades. Ya que las imágenes distroless no contienen un
shell ni ninguna utilidad de depuración, resulta difícil solucionar los problemas de las imágenes
distroless usando solamente `kubectl exec`.

Cuando utilice Containers efímeros, es conveniente habilitar el [proceso Namespace de uso
compartido](/docs/tasks/configure-pod-container/share-process-namespace/) para poder ver los
procesos en otros containers.

### Ejemplos


<div class="alert alert-info" role="note"><h4 class="alert-heading">Nota:</h4>Los ejemplos de esta sección requieren que los <code>EphemeralContainers</code> <a href="/docs/reference/command-line-tools-reference/feature-gates/">feature
gate</a> estén habilitados
y que tanto el cliente como el servidor de Kubernetes tengan la version v1.16 o posterior.</div>


En los ejemplos de esta sección muestran la forma en que los Containers efímeros se
presentan en la API. Los usuarios normalmente usarían un plugin `kubectl` para la solución
de problemas que automatizaría estos pasos.

Los Containers efímeros son creados utilizando el subrecurso `ephemeralcontainers` del Pod,
que puede ser visto utilizando `kubectl --raw`. En primer lugar describa el Container
efímero a añadir como una lista de `EphemeralContainers`:

```json
{
    "apiVersion": "v1",
    "kind": "EphemeralContainers",
    "metadata": {
        "name": "example-pod"
    },
    "ephemeralContainers": [{
        "command": [
            "sh"
        ],
        "image": "busybox",
        "imagePullPolicy": "IfNotPresent",
        "name": "debugger",
        "stdin": true,
        "tty": true,
        "terminationMessagePolicy": "File"
    }]
}
```

Para actualizar los Containers efímeros de los `example-pod` en ejecución:

```shell
kubectl replace --raw /api/v1/namespaces/default/pods/example-pod/ephemeralcontainers  -f ec.json
```

Esto devolverá una nueva lista de Containers efímeros:

```json
{
   "kind":"EphemeralContainers",
   "apiVersion":"v1",
   "metadata":{
      "name":"example-pod",
      "namespace":"default",
      "selfLink":"/api/v1/namespaces/default/pods/example-pod/ephemeralcontainers",
      "uid":"a14a6d9b-62f2-4119-9d8e-e2ed6bc3a47c",
      "resourceVersion":"15886",
      "creationTimestamp":"2019-08-29T06:41:42Z"
   },
   "ephemeralContainers":[
      {
         "name":"debugger",
         "image":"busybox",
         "command":[
            "sh"
         ],
         "resources":{

         },
         "terminationMessagePolicy":"File",
         "imagePullPolicy":"IfNotPresent",
         "stdin":true,
         "tty":true
      }
   ]
}
```

Se puede ver el estado del Container efímero creado usando `kubectl describe`:

```shell
kubectl describe pod example-pod
```

```
...
Ephemeral Containers:
  debugger:
    Container ID:  docker://cf81908f149e7e9213d3c3644eda55c72efaff67652a2685c1146f0ce151e80f
    Image:         busybox
    Image ID:      docker-pullable://busybox@sha256:9f1003c480699be56815db0f8146ad2e22efea85129b5b5983d0e0fb52d9ab70
    Port:          <none>
    Host Port:     <none>
    Command:
      sh
    State:          Running
      Started:      Thu, 29 Aug 2019 06:42:21 +0000
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:         <none>
...
```

Se puede conectar al nuevo Container efímero usando `kubectl attach`:

```shell
kubectl attach -it example-pod -c debugger
```

Si el proceso Namespace de uso compartido está habilitado, se pueden visualizar los procesos de todos los Containers de ese Pod.
Por ejemplo, después de haber conectado, ejecute `ps` en el debugger del container:

```shell
ps auxww
```
La respuesta es semejante a:
```
PID   USER     TIME  COMMAND
    1 root      0:00 /pause
    6 root      0:00 nginx: master process nginx -g daemon off;
   11 101       0:00 nginx: worker process
   12 101       0:00 nginx: worker process
   13 101       0:00 nginx: worker process
   14 101       0:00 nginx: worker process
   15 101       0:00 nginx: worker process
   16 101       0:00 nginx: worker process
   17 101       0:00 nginx: worker process
   18 101       0:00 nginx: worker process
   19 root      0:00 /pause
   24 root      0:00 sh
   29 root      0:00 ps auxww
```
