[es] Add content/es/docs/concepts/configuration/manage-resources-containers.md (#25920)
* content/es/docs/concepts/configuration/manage-resources-containers.md * Apply review comment Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Apply suggestions Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Rael Garcia <rael@rael.io> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update content/es/docs/concepts/configuration/manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> * Update manage-resources-containers.md Co-authored-by: Victor Morales <chipahuac@hotmail.com> Co-authored-by: Rael Garcia <rael@rael.io>
This commit is contained in:
		
							parent
							
								
									b41a02de59
								
							
						
					
					
						commit
						5685768847
					
				| 
						 | 
					@ -0,0 +1,757 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					title: Administrando los recursos de los contenedores
 | 
				
			||||||
 | 
					content_type: concept
 | 
				
			||||||
 | 
					weight: 40
 | 
				
			||||||
 | 
					feature:
 | 
				
			||||||
 | 
					  title: Bin packing automático
 | 
				
			||||||
 | 
					  description: >
 | 
				
			||||||
 | 
					    Coloca los contenedores automáticamente en base a los recursos solicitados y otras limitaciones, mientras no se afecte la
 | 
				
			||||||
 | 
					    disponibilidad. Combina cargas críticas y best-effort para mejorar el uso y ahorrar recursos.
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- overview -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cuando especificas un {{< glossary_tooltip term_id="pod" >}}, opcionalmente puedes especificar
 | 
				
			||||||
 | 
					los recursos que necesita un {{< glossary_tooltip text="Contenedor" term_id="container" >}}.
 | 
				
			||||||
 | 
					Los recursos que normalmente se definen son CPU y memoria (RAM);  pero hay otros.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cuando especificas el recurso _request_  para  Contenedores en un {{< glossary_tooltip term_id="pod" >}}, 
 | 
				
			||||||
 | 
					el {{< glossary_tooltip text="Scheduler de Kubernetes " term_id="kube-scheduler" >}} usa esta información para decidir en qué nodo colocar el {{< glossary_tooltip term_id="pod" >}}.
 | 
				
			||||||
 | 
					Cuando especificas el recurso _limit_ para un Contenedor, Kubelet impone estos límites, así que el contenedor no
 | 
				
			||||||
 | 
					puede utilizar más recursos que el límite que le definimos. Kubelet también reserva al menos la cantidad
 | 
				
			||||||
 | 
					especificada en _request_ para el contenedor.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- body -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Peticiones y límites
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Si el nodo donde está corriendo un pod tiene suficientes recursos disponibles, es posible 
 | 
				
			||||||
 | 
					(y válido) que el {{< glossary_tooltip text="contenedor" term_id="container" >}} utilice más recursos de los especificados en `request`.
 | 
				
			||||||
 | 
					Sin embargo, un {{< glossary_tooltip text="contenedor" term_id="container" >}} no está autorizado a utilizar más de lo especificado en `limit`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Por ejemplo, si configuras una petición de `memory` de 256 MiB  para un {{< glossary_tooltip text="contenedor" term_id="container" >}}, y ese contenedor está
 | 
				
			||||||
 | 
					en un {{< glossary_tooltip term_id="pod" >}} colocado en un nodo con 8GiB de memoria y no hay otros {{< glossary_tooltip term_id="pod" >}}, entonces el contenedor puede intentar usar
 | 
				
			||||||
 | 
					más RAM.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Si configuras un límite de `memory` de 4GiB  para el contenedor, {{< glossary_tooltip text="kubelet" term_id="kubelet" >}})
 | 
				
			||||||
 | 
					 (y
 | 
				
			||||||
 | 
					{{< glossary_tooltip text="motor de ejecución del contenedor" term_id="container-runtime" >}})  impone el límite.
 | 
				
			||||||
 | 
					El Runtime evita que el {{< glossary_tooltip text="contenedor" term_id="container" >}} use más recursos de los configurados en el límite. Por ejemplo: 
 | 
				
			||||||
 | 
					cuando un proceso en el {{< glossary_tooltip text="contenedor" term_id="container" >}} intenta consumir más cantidad de memoria de la permitida,
 | 
				
			||||||
 | 
					el Kernel del sistema termina el proceso que intentó la utilización de la memoria, con un error de out of memory (OOM).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Los límites se pueden implementar de forma reactiva (el sistema interviene cuando ve la violación)
 | 
				
			||||||
 | 
					o por imposición (el sistema previene al contenedor de exceder el límite). Diferentes Runtimes pueden tener distintas
 | 
				
			||||||
 | 
					implementaciones a las mismas restricciones.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{< note >}}
 | 
				
			||||||
 | 
					Si un contenedor especifica su propio límite de memoria, pero no especifica la petición de memoria, Kubernetes
 | 
				
			||||||
 | 
					automáticamente asigna una petición de memoria igual a la del límite. De igual manera, si un contenedor especifica su propio límite de CPU, pero no especifica una petición de CPU, Kubernetes automáticamente asigna una petición de CPU igual a la especificada en el límite.
 | 
				
			||||||
 | 
					{{< /note >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Tipos de recursos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*CPU* y *memoria* son cada uno un *tipo de recurso*. Un tipo de recurso tiene una unidad base.
 | 
				
			||||||
 | 
					CPU representa procesos de computación y es especificada en unidades de [Kubernetes CPUs](#meaning-of-cpu).
 | 
				
			||||||
 | 
					Memoria es especificada en unidades de bytes.
 | 
				
			||||||
 | 
					Si estás usando Kubernetes v1.14 o posterior, puedes especificar recursos _huge page_.
 | 
				
			||||||
 | 
					Huge pages son una característica de Linux específica donde el kernel del nodo asigna bloques
 | 
				
			||||||
 | 
					de memoria que son más grandes que el tamaño de paginación por defecto.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Por ejemplo, en un sistema donde el tamaño de paginación por defecto es de 4KiB, podrías
 | 
				
			||||||
 | 
					especificar un límite, `hugepages-2Mi: 80Mi`. Si el contenedor intenta asignar
 | 
				
			||||||
 | 
					 más de 40 2MiB huge pages (un total de 80 MiB), la asignación fallará.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{< note >}}
 | 
				
			||||||
 | 
					No se pueden sobreasignar recursos `hugepages-*`.
 | 
				
			||||||
 | 
					A diferencia de los recursos de `memoria` y `cpu`.
 | 
				
			||||||
 | 
					{{< /note >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CPU y memoria son colectivamente conocidos como *recursos de computación*,  o simplemente como 
 | 
				
			||||||
 | 
					*recursos*.  Los recursos de computación son cantidades medibles que pueden ser solicitadas, asignadas
 | 
				
			||||||
 | 
					y consumidas. Son distintas a los [Recursos API](/docs/concepts/overview/kubernetes-api/). Los recursos API , como {{< glossary_tooltip text="Pods" term_id="pod" >}} y 
 | 
				
			||||||
 | 
					[Services](/docs/concepts/services-networking/service/) son objetos que pueden ser leídos y modificados
 | 
				
			||||||
 | 
					a través de la API de Kubernetes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Peticiones y límites de recursos de Pods y Contenedores
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cada contenedor de un Pod puede especificar uno o más de los siguientes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* `spec.containers[].resources.limits.cpu`
 | 
				
			||||||
 | 
					* `spec.containers[].resources.limits.memory`
 | 
				
			||||||
 | 
					* `spec.containers[].resources.limits.hugepages-<size>`
 | 
				
			||||||
 | 
					* `spec.containers[].resources.requests.cpu`
 | 
				
			||||||
 | 
					* `spec.containers[].resources.requests.memory`
 | 
				
			||||||
 | 
					* `spec.containers[].resources.requests.hugepages-<size>`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Aunque las peticiones y límites pueden ser especificadas solo en contenedores individuales, es conveniente hablar
 | 
				
			||||||
 | 
					sobre los recursos de peticiones y límites del Pod. Un *limite/petición
 | 
				
			||||||
 | 
					 de recursos de un Pod* para un tipo de recurso particular es la suma de
 | 
				
			||||||
 | 
					peticiones/límites de cada tipo para cada contenedor del Pod.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Unidades de recursos en Kubernetes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Significado de CPU
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Límites y peticiones para recursos de CPU son medidos en unidades de *cpu*.
 | 
				
			||||||
 | 
					Una cpu, en Kubernetes, es equivalente a **1 vCPU/Core**  para proveedores de cloud y **1 hyperthread** en procesadores bare-metal Intel.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Las peticiones fraccionadas están permitidas. Un contenedor con `spec.containers[].resources.requests.cpu` de `0.5` tiene garantizada la mitad, tanto
 | 
				
			||||||
 | 
					CPU como otro que requiere 1 CPU. La expresión `0.1` es equivalente a la expresión `100m`, que puede ser leída como "cien millicpus". Algunas personas dicen
 | 
				
			||||||
 | 
					"cienmilicores", y se entiende que quiere decir lo mismo. Una solicitud con un punto decimal, como `0.1`,  es convertido a `100m` por la API, y no se permite
 | 
				
			||||||
 | 
					 una precisión mayor que `1m`. Por esta razón, la forma `100m` es la preferente.
 | 
				
			||||||
 | 
					CPU es siempre solicitada como una cantidad absoluta, nunca como una cantidad relativa;
 | 
				
			||||||
 | 
					0.1 es la misma cantidad de cpu que un core-simple, dual-core, o máquina de 48-core.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Significado de memoria
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Los límites y peticiones de `memoria` son medidos en bytes. Puedes expresar la memoria como
 | 
				
			||||||
 | 
					un número entero o como un número decimal usando alguno de estos sufijos:
 | 
				
			||||||
 | 
					E, P, T, G, M, K. También puedes usar los equivalentes en potencia de dos: Ei, Pi, Ti, Gi,
 | 
				
			||||||
 | 
					Mi, Ki. Por ejemplo, los siguientes valores representan lo mismo:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					128974848, 129e6, 129M, 123Mi
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Aquí un ejemplo.
 | 
				
			||||||
 | 
					El siguiente {{< glossary_tooltip text="Pod" term_id="pod" >}} tiene dos contenedores. Cada contenedor tiene una petición de 0.25 cpu
 | 
				
			||||||
 | 
					y 64MiB (2<sup>26</sup> bytes) de memoria. Cada contenedor tiene un límite de 0.5 cpu
 | 
				
			||||||
 | 
					y 128MiB de memoria. Puedes decirle al Pod que solicite 0.5 cpu y 128MiB de memoria 
 | 
				
			||||||
 | 
					y un límite de 1 cpu y 256MiB de memoria.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```yaml
 | 
				
			||||||
 | 
					apiVersion: v1
 | 
				
			||||||
 | 
					kind: Pod
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: frontend
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  containers:
 | 
				
			||||||
 | 
					  - name: app
 | 
				
			||||||
 | 
					    image: images.my-company.example/app:v4
 | 
				
			||||||
 | 
					    resources:
 | 
				
			||||||
 | 
					      requests:
 | 
				
			||||||
 | 
					        memory: "64Mi"
 | 
				
			||||||
 | 
					        cpu: "250m"
 | 
				
			||||||
 | 
					      limits:
 | 
				
			||||||
 | 
					        memory: "128Mi"
 | 
				
			||||||
 | 
					        cpu: "500m"
 | 
				
			||||||
 | 
					  - name: log-aggregator
 | 
				
			||||||
 | 
					    image: images.my-company.example/log-aggregator:v6
 | 
				
			||||||
 | 
					    resources:
 | 
				
			||||||
 | 
					      requests:
 | 
				
			||||||
 | 
					        memory: "64Mi"
 | 
				
			||||||
 | 
					        cpu: "250m"
 | 
				
			||||||
 | 
					      limits:
 | 
				
			||||||
 | 
					        memory: "128Mi"
 | 
				
			||||||
 | 
					        cpu: "500m"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Cómo son programados los Pods con solicitudes de recursos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cuando creas un {{< glossary_tooltip text="Pod" term_id="pod" >}}, el  {{< glossary_tooltip text="planificador de Kubernetes " term_id="kube-scheduler" >}} determina el nodo para correr dicho {{< glossary_tooltip text="Pod" term_id="pod" >}}.
 | 
				
			||||||
 | 
					Cada nodo tiene una capacidad máxima para cada tipo de recurso:
 | 
				
			||||||
 | 
					la cantidad de CPU y memoria que dispone para los Pods. El {{< glossary_tooltip text="planificador de Kubernetes" term_id="kube-scheduler" >}} se asegura de que,
 | 
				
			||||||
 | 
					 para cada tipo de recurso, la suma de los recursos solicitados de los contenedores programados sea menor a la capacidad del nodo. Cabe mencionar que aunque la memoria actual o CPU
 | 
				
			||||||
 | 
					en uso de los nodos sea muy baja, el {{< glossary_tooltip text="planificador" term_id="kube-scheduler" >}} todavía rechaza programar un {{< glossary_tooltip text="Pod" term_id="pod" >}} en un nodo si
 | 
				
			||||||
 | 
					la comprobación de capacidad falla. Esto protege contra escasez de recursos en un nodo
 | 
				
			||||||
 | 
					cuando el uso de recursos posterior crece, por ejemplo, durante un pico diario de
 | 
				
			||||||
 | 
					solicitud de  recursos.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Cómo corren los Pods con límites de recursos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cuando el {{< glossary_tooltip text="kubelet" term_id="kubelet" >}} inicia un {{< glossary_tooltip text="contenedor" term_id="container" >}} de un {{< glossary_tooltip text="Pod" term_id="pod" >}}, este pasa los límites de CPU y
 | 
				
			||||||
 | 
					memoria al {{< glossary_tooltip text="runtime del contenedor" term_id="container-runtime" >}}.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cuando usas Docker:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- El `spec.containers[].resources.requests.cpu` es convertido a su valor interno,
 | 
				
			||||||
 | 
					  el cuál es fraccional, y multiplicado por 1024. El mayor valor de este número o
 | 
				
			||||||
 | 
					  2 es usado por el valor de 
 | 
				
			||||||
 | 
					  [`--cpu-shares`](https://docs.docker.com/engine/reference/run/#cpu-share-constraint)
 | 
				
			||||||
 | 
					  en el comando `docker run`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- El `spec.containers[].resources.limits.cpu` se convierte a su valor en milicore y 
 | 
				
			||||||
 | 
					  multiplicado por 100. El resultado es el tiempo total de CPU que un contenedor puede usar
 | 
				
			||||||
 | 
					  cada 100ms. Un contenedor no puede usar más tiempo de CPU que del solicitado durante este intervalo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  {{< note >}}
 | 
				
			||||||
 | 
					  El período por defecto es de 100ms. La resolución mínima de cuota mínima es 1ms.
 | 
				
			||||||
 | 
					  {{</ note >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- El `spec.containers[].resources.limits.memory` se convierte a entero, y 
 | 
				
			||||||
 | 
					  se usa como valor de 
 | 
				
			||||||
 | 
					  [`--memory`](https://docs.docker.com/engine/reference/run/#/user-memory-constraints)
 | 
				
			||||||
 | 
					  del comando  `docker run`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Si el {{< glossary_tooltip text="contenedor" term_id="container" >}} excede su límite de memoria, este quizá se detenga. Si es reiniciable,
 | 
				
			||||||
 | 
					el {{< glossary_tooltip text="kubelet" term_id="kubelet" >}} lo reiniciará, así como cualquier otro error.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Si un Contenedor excede su petición de memoria, es probable que ese Pod sea
 | 
				
			||||||
 | 
					desalojado en cualquier momento que el nodo se quede sin memoria.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Un Contenedor puede o no tener permitido exceder el límite de CPU por
 | 
				
			||||||
 | 
					algunos períodos de tiempo. Sin embargo, esto no lo destruirá por uso excesivo de CPU.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Para conocer cuando un Contenedor no puede ser programado o será destruido debido a 
 | 
				
			||||||
 | 
					límite de recursos, revisa la sección de [Troubleshooting](#troubleshooting).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Monitorización del uso de recursos de computación y memoria.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					El uso de recursos de un Pod es reportado como parte del estado del Pod.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Si [herramientas opcionales para monitorización](/docs/tasks/debug-application-cluster/resource-usage-monitoring/)
 | 
				
			||||||
 | 
					están disponibles en tu cluster, entonces el uso de recursos del Pod puede extraerse directamente de
 | 
				
			||||||
 | 
					[Métricas API](/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#the-metrics-api)
 | 
				
			||||||
 | 
					o desde tus herramientas de monitorización.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Almacenamiento local efímero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- feature gate LocalStorageCapacityIsolation -->
 | 
				
			||||||
 | 
					{{< feature-state for_k8s_version="v1.10" state="beta" >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Los nodos tienen almacenamiento local efímero, respaldado por
 | 
				
			||||||
 | 
					dispositivos de escritura agregados o, a veces, por RAM.
 | 
				
			||||||
 | 
					"Efímero" significa que no se garantiza la durabilidad a largo plazo.
 | 
				
			||||||
 | 
					.
 | 
				
			||||||
 | 
					Los Pods usan el almacenamiento local efímero para añadir espacio, caché, y para logs.
 | 
				
			||||||
 | 
					Kubelet puede proveer espacio añadido a los Pods usando almacenamiento local efímero para
 | 
				
			||||||
 | 
					montar [`emptyDir`](/docs/concepts/storage/volumes/#emptydir)
 | 
				
			||||||
 | 
					 {{< glossary_tooltip term_id="volume" text="volumes" >}} en los contenedores.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Kubelet también usa este tipo de almacenamiento para guardar
 | 
				
			||||||
 | 
					[logs de contenedores a nivel de nodo](/docs/concepts/cluster-administration/logging/#logging-at-the-node-level),
 | 
				
			||||||
 | 
					imágenes de contenedores, y la capa de escritura de los contenedores.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{< caution >}}
 | 
				
			||||||
 | 
					Si un nodo falla, los datos en el almacenamiento efímero se pueden perder.
 | 
				
			||||||
 | 
					Tus aplicaciones no pueden esperar ningun SLA (IOPS de disco, por ejemplo)
 | 
				
			||||||
 | 
					del almacenamiento local efímero.
 | 
				
			||||||
 | 
					{{< /caution >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Como característica beta, Kubernetes te deja probar, reservar y limitar la cantidad
 | 
				
			||||||
 | 
					de almacenamiento local efímero que un Pod puede consumir.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Configuraciones para almacenamiento local efímero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Kubernetes soporta 2 maneras de configurar el almacenamiento local efímero en un nodo:
 | 
				
			||||||
 | 
					{{< tabs name="local_storage_configurations" >}}
 | 
				
			||||||
 | 
					{{% tab name="Single filesystem" %}}
 | 
				
			||||||
 | 
					En esta configuración, colocas todos los tipos de datos (`emptyDir` volúmenes, capa de escritura,
 | 
				
			||||||
 | 
					imágenes de contenedores, logs) en un solo sistema de ficheros.
 | 
				
			||||||
 | 
					La manera más efectiva de configurar Kubelet es dedicando este sistema de archivos para los datos de Kubernetes (kubelet).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Kubelet también escribe 
 | 
				
			||||||
 | 
					[logs de contenedores a nivel de nodo](/docs/concepts/cluster-administration/logging/#logging-at-the-node-level)
 | 
				
			||||||
 | 
					y trata estos de manera similar al almacenamiento efímero.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Kubelet escribe logs en ficheros dentro del directorio de logs (por defecto `/var/log`
 | 
				
			||||||
 | 
					); y tiene un directorio base para otros datos almacenados localmente
 | 
				
			||||||
 | 
					(`/var/lib/kubelet` por defecto).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Por lo general, `/var/lib/kubelet` y `/var/log`  están en el sistema de archivos de root,
 | 
				
			||||||
 | 
					y Kubelet es diseñado con ese objetivo en mente.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tu nodo puede tener tantos otros sistema de archivos, no usados por Kubernetes,
 | 
				
			||||||
 | 
					como quieras.
 | 
				
			||||||
 | 
					{{% /tab %}}
 | 
				
			||||||
 | 
					{{% tab name="Two filesystems" %}}
 | 
				
			||||||
 | 
					Tienes un sistema de archivos en el nodo que estás usando para datos efímeros que
 | 
				
			||||||
 | 
					provienen de los Pods corriendo: logs, y volúmenes `emptyDir`.
 | 
				
			||||||
 | 
					Puedes usar este sistema de archivos para otros datos (por ejemplo: logs del sistema no relacionados
 | 
				
			||||||
 | 
					 con Kubernetes); estos pueden ser incluso del sistema de archivos root.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Kubelet también escribe
 | 
				
			||||||
 | 
					[logs de contenedores a nivel de nodo](/docs/concepts/cluster-administration/logging/#logging-at-the-node-level)
 | 
				
			||||||
 | 
					en el primer sistema de archivos, y trata estos de manera similar al almacenamiento efímero.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					También usas un sistema de archivos distinto, respaldado por un dispositivo de almacenamiento lógico diferente.
 | 
				
			||||||
 | 
					En esta configuración, el directorio donde le dices a Kubelet que coloque
 | 
				
			||||||
 | 
					las capas de imágenes de los contenedores y capas de escritura es este segundo sistema de archivos.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					El primer sistema de archivos no guarda ninguna capa de imágenes o de escritura.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Tu nodo puede tener tantos sistemas de archivos, no usados por Kubernetes, como quieras.
 | 
				
			||||||
 | 
					{{% /tab %}}
 | 
				
			||||||
 | 
					{{< /tabs >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Kubelet puede medir la cantidad de almacenamiento local que se está usando. Esto es posible por:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- el `LocalStorageCapacityIsolation`
 | 
				
			||||||
 | 
					  [feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
 | 
				
			||||||
 | 
					  está habilitado (esta caracterísitca está habilitada por defecto), y
 | 
				
			||||||
 | 
					- has configurado el nodo usando una de las configuraciones soportadas
 | 
				
			||||||
 | 
					  para almacenamiento local efímero..
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Si tienes una configuración diferente, entonces Kubelet no aplica límites de recursos
 | 
				
			||||||
 | 
					para almacenamiento local efímero.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{< note >}}
 | 
				
			||||||
 | 
					Kubelet rastrea `tmpfs` volúmenes emptyDir como uso de memoria de contenedor, en lugar de
 | 
				
			||||||
 | 
					almacenamiento local efímero.
 | 
				
			||||||
 | 
					{{< /note >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Configurando solicitudes y límites para almacenamiento local efímero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Puedes usar _ephemeral-storage_ para manejar almacenamiento local efímero. Cada contenedor de un Pod puede especificar
 | 
				
			||||||
 | 
					uno o más de los siguientes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* `spec.containers[].resources.limits.ephemeral-storage`
 | 
				
			||||||
 | 
					* `spec.containers[].resources.requests.ephemeral-storage`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Los límites y solicitudes para `almacenamiento-efímero` son medidos en bytes. Puedes expresar el almacenamiento 
 | 
				
			||||||
 | 
					como un numero entero o flotante usando los siguientes sufijos:
 | 
				
			||||||
 | 
					E, P, T, G, M, K. También puedes usar las siguientes equivalencias: Ei, Pi, Ti, Gi,
 | 
				
			||||||
 | 
					Mi, Ki. Por ejemplo, los siguientes representan el mismo valor:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					128974848, 129e6, 129M, 123Mi
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					En el siguiente ejemplo, el Pod tiene dos contenedores. Cada contenedor tiene una petición de 2GiB de almacenamiento local efímero. Cada
 | 
				
			||||||
 | 
					contenedor tiene un límite de 4GiB de almacenamiento local efímero. Sin embargo, el Pod tiene una petición de 4GiB de almacenamiento efímero
 | 
				
			||||||
 | 
					, y un límite de 8GiB de almacenamiento local efímero.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```yaml
 | 
				
			||||||
 | 
					apiVersion: v1
 | 
				
			||||||
 | 
					kind: Pod
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: frontend
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  containers:
 | 
				
			||||||
 | 
					  - name: app
 | 
				
			||||||
 | 
					    image: images.my-company.example/app:v4
 | 
				
			||||||
 | 
					    resources:
 | 
				
			||||||
 | 
					      requests:
 | 
				
			||||||
 | 
					        ephemeral-storage: "2Gi"
 | 
				
			||||||
 | 
					      limits:
 | 
				
			||||||
 | 
					        ephemeral-storage: "4Gi"
 | 
				
			||||||
 | 
					  - name: log-aggregator
 | 
				
			||||||
 | 
					    image: images.my-company.example/log-aggregator:v6
 | 
				
			||||||
 | 
					    resources:
 | 
				
			||||||
 | 
					      requests:
 | 
				
			||||||
 | 
					        ephemeral-storage: "2Gi"
 | 
				
			||||||
 | 
					      limits:
 | 
				
			||||||
 | 
					        ephemeral-storage: "4Gi"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Como son programados los Pods con solicitudes de almacenamiento efímero
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cuando creas un Pod, el planificador de Kubernetes selecciona un nodo para el Pod donde sera creado.
 | 
				
			||||||
 | 
					Cada nodo tiene una cantidad máxima de almacenamiento local efímero que puede proveer a los Pods. Para
 | 
				
			||||||
 | 
					más información, mira [Node Allocatable](/docs/tasks/administer-cluster/reserve-compute-resources/#node-allocatable).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					El planificador se asegura de que el total de los recursos solicitados para los contenedores sea menor que la capacidad del nodo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Manejo del consumo de almacenamiento efímero {#resource-emphemeralstorage-consumption}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Si Kubelet está manejando el almacenamiento efímero local como un recurso, entonces
 | 
				
			||||||
 | 
					Kubelet mide el uso de almacenamiento en:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- volúmenes `emptyDir`, excepto _tmpfs_  volúmenes`emptyDir` 
 | 
				
			||||||
 | 
					- directorios que guardan logs de nivel de nodo
 | 
				
			||||||
 | 
					- capas de escritura de contenedores
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Si un Pod está usando más almacenamiento efímero que el permitido, Kubelet
 | 
				
			||||||
 | 
					establece una señal de desalojo que desencadena el desalojo del Pod.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Para aislamiento a nivel de contenedor, si una capa de escritura del contenedor y 
 | 
				
			||||||
 | 
					logs excede el límite de uso del almacenamiento, Kubelet marca el Pod para desalojo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Para aislamiento a nivel de Pod, Kubelet calcula un límite de almacenamiento 
 | 
				
			||||||
 | 
					general para el Pod sumando los límites de los contenedores de ese Pod.
 | 
				
			||||||
 | 
					En este caso, si la suma del uso de almacenamiento local efímero para todos los contenedores
 | 
				
			||||||
 | 
					y los volúmenes `emptyDir` de los Pods excede el límite de almacenamiento general del
 | 
				
			||||||
 | 
					Pod, Kubelet marca el Pod para desalojo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{< caution >}}
 | 
				
			||||||
 | 
					Si Kubelet no está midiendo el almacenamiento local efímero, entonces el Pod
 | 
				
			||||||
 | 
					que excede este límite de almacenamiento, no será desalojado para liberar 
 | 
				
			||||||
 | 
					el límite del recurso de almacenamiento.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Sin embargo, si el espacio del sistema de archivos para la capa de escritura del contenedor,
 | 
				
			||||||
 | 
					logs a nivel de nodo o volúmenes `emptyDir` decae, el 
 | 
				
			||||||
 | 
					{{< glossary_tooltip text="taints" term_id="taint" >}}  del nodo lanza la desalojo para 
 | 
				
			||||||
 | 
					cualquier Pod que no tolere dicho taint. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Mira las [configuraciones soportadas](#configurations-for-local-ephemeral-storage)
 | 
				
			||||||
 | 
					para almacenamiento local efímero.
 | 
				
			||||||
 | 
					{{< /caution >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Kubelet soporta diferentes maneras de medir el uso de almacenamiento del Pod:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{< tabs name="resource-emphemeralstorage-measurement" >}}
 | 
				
			||||||
 | 
					{{% tab name="Periodic scanning" %}}
 | 
				
			||||||
 | 
					Kubelet realiza frecuentemente, verificaciones programadas que revisan cada
 | 
				
			||||||
 | 
					volumen `emptyDir`, directorio de logs del contenedor, y capa de escritura
 | 
				
			||||||
 | 
					del contenedor.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					El escáner mide cuanto espacio está en uso.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{< note >}}
 | 
				
			||||||
 | 
					En este modo, Kubelet no rastrea descriptores de archivos abiertos 
 | 
				
			||||||
 | 
					para archivos eliminados.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Si tú (o un contenedor) creas un archivo dentro de un volumen `emptyDir`,
 | 
				
			||||||
 | 
					y algo mas abre ese archivo, y tú lo borras mientras este está abierto,
 | 
				
			||||||
 | 
					entonces el inodo para este archivo borrado se mantiene hasta que cierras
 | 
				
			||||||
 | 
					el archivo, pero Kubelet no cataloga este espacio como en uso.
 | 
				
			||||||
 | 
					{{< /note >}}
 | 
				
			||||||
 | 
					{{% /tab %}}
 | 
				
			||||||
 | 
					{{% tab name="Filesystem project quota" %}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{< feature-state for_k8s_version="v1.15" state="alpha" >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Las cuotas de proyecto están definidas a nivel de sistema operativo
 | 
				
			||||||
 | 
					para el manejo de uso de almacenamiento en uso de sistema de archivos.
 | 
				
			||||||
 | 
					Con Kubernetes, puedes habilitar las cuotas de proyecto para el uso
 | 
				
			||||||
 | 
					de la monitorización del almacenamiento. Asegúrate que el respaldo del
 | 
				
			||||||
 | 
					Sistema de archivos de los volúmenes `emptyDir` , en el nodo, provee soporte de
 | 
				
			||||||
 | 
					cuotas de proyecto.
 | 
				
			||||||
 | 
					Por ejemplo, XFS y ext4fs ofrecen cuotas de proyecto.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{< note >}}
 | 
				
			||||||
 | 
					Las cuotas de proyecto te permiten monitorear el uso del almacenamiento; no 
 | 
				
			||||||
 | 
					fuerzan los límites.
 | 
				
			||||||
 | 
					{{< /note >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Kubernetes usa IDs de proyecto empezando por `1048576`. Los IDs en uso
 | 
				
			||||||
 | 
					son registrados en `/etc/projects` y `/etc/projid`. Si los IDs de proyecto
 | 
				
			||||||
 | 
					en este rango son usados para otros propósitos en el sistema, esos IDs 
 | 
				
			||||||
 | 
					de proyecto deben ser registrados en `/etc/projects` y `/etc/projid` para 
 | 
				
			||||||
 | 
					que Kubernetes no los use.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Las cuotas son más rápidas y más precisas que el escáner de directorios. 
 | 
				
			||||||
 | 
					Cuando un directorio es asignado a un proyecto, todos los ficheros creados 
 | 
				
			||||||
 | 
					bajo un directorio son creados en ese proyecto, y el kernel simplemente
 | 
				
			||||||
 | 
					tiene que mantener rastreados cuántos bloques están en uso por ficheros
 | 
				
			||||||
 | 
					en ese proyecto. Si un fichero es creado y borrado, pero tiene un fichero abierto,
 | 
				
			||||||
 | 
					continúa consumiendo espacio. El seguimiento de cuotas registra ese espacio 
 | 
				
			||||||
 | 
					con precisión mientras que los escaneos de directorios pasan por alto 
 | 
				
			||||||
 | 
					el almacenamiento utilizado por los archivos eliminados
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					Si quieres usar cuotas de proyecto, debes:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Habilitar el `LocalStorageCapacityIsolationFSQuotaMonitoring=true`
 | 
				
			||||||
 | 
					  [feature gate](/docs/reference/command-line-tools-reference/feature-gates/)
 | 
				
			||||||
 | 
					  en la configuración del kubelet.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Asegúrese de que el sistema de archivos raíz (o el sistema de archivos en tiempo de ejecución opcional)
 | 
				
			||||||
 | 
					  tiene las cuotas de proyectos habilitadas. Todos los sistemas de archivos XFS admiten cuotas de proyectos.
 | 
				
			||||||
 | 
					  Para los sistemas de archivos ext4, debe habilitar la función de seguimiento de cuotas del proyecto
 | 
				
			||||||
 | 
					  mientras el sistema de archivos no está montado.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ```bash
 | 
				
			||||||
 | 
					  # For ext4, with /dev/block-device not mounted
 | 
				
			||||||
 | 
					  sudo tune2fs -O project -Q prjquota /dev/block-device
 | 
				
			||||||
 | 
					  ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Asegúrese de que el sistema de archivos raíz (o el sistema de archivos de tiempo de ejecución opcional) esté
 | 
				
			||||||
 | 
					  montado con cuotas de proyecto habilitadas. Tanto para XFS como para ext4fs, la opción de montaje 
 | 
				
			||||||
 | 
					  se llama `prjquota`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{% /tab %}}
 | 
				
			||||||
 | 
					{{< /tabs >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Recursos extendidos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Los recursos extendidos son nombres de recursos calificados fuera del
 | 
				
			||||||
 | 
					dominio `kubernetes.io`. Permiten que los operadores de clústers publiciten y los usuarios
 | 
				
			||||||
 | 
					consuman los recursos no integrados de Kubernetes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Hay dos pasos necesarios para utilizar los recursos extendidos. Primero, el operador del clúster
 | 
				
			||||||
 | 
					debe anunciar un Recurso Extendido. En segundo lugar, los usuarios deben solicitar
 | 
				
			||||||
 | 
					el Recurso Extendido en los Pods.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Manejando recursos extendidos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Recursos extendido a nivel de nodo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Los recursos extendidos a nivel de nodo están vinculados a los nodos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					##### Device plugin managed resources
 | 
				
			||||||
 | 
					Mira [Plugins de
 | 
				
			||||||
 | 
					Dispositivos](/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/)
 | 
				
			||||||
 | 
					para percibir como los plugins de dispositivos manejan los recursos
 | 
				
			||||||
 | 
					en cada nodo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					##### Otros recursos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Para anunciar un nuevo recurso extendido a nivel de nodo, el operador del clúster puede
 | 
				
			||||||
 | 
					enviar una solicitud HTTP `PATCH` al servidor API para especificar la cantidad 
 | 
				
			||||||
 | 
					disponible en el `status.capacity` para un nodo en el clúster. Después de esta
 | 
				
			||||||
 | 
					operación, el `status.capacity` del nodo incluirá un nuevo recurso. El campo 
 | 
				
			||||||
 | 
					`status.allocatable` se actualiza automáticamente con el nuevo recurso
 | 
				
			||||||
 | 
					de forma asíncrona por el {{< glossary_tooltip text="kubelet" term_id="kubelet" >}}. Tenga en cuenta que debido a que el {{< glossary_tooltip text="planificador" term_id="kube-scheduler" >}}
 | 
				
			||||||
 | 
					utiliza el valor de `status.allocatable` del nodo cuando evalúa la aptitud del {{< glossary_tooltip text="Pod" term_id="pod" >}}, puede haber un breve
 | 
				
			||||||
 | 
					retraso entre parchear la capacidad del nodo con un nuevo recurso y el primer Pod
 | 
				
			||||||
 | 
					que solicita el recurso en ese nodo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Ejemplo:**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Aquí hay un ejemplo que muestra cómo usar `curl` para formar una solicitud HTTP que
 | 
				
			||||||
 | 
					anuncia cinco recursos "example.com/foo" en el nodo `k8s-node-1` cuyo nodo master
 | 
				
			||||||
 | 
					es `k8s-master`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					curl --header "Content-Type: application/json-patch+json" \
 | 
				
			||||||
 | 
					--request PATCH \
 | 
				
			||||||
 | 
					--data '[{"op": "add", "path": "/status/capacity/example.com~1foo", "value": "5"}]' \
 | 
				
			||||||
 | 
					http://k8s-master:8080/api/v1/nodes/k8s-node-1/status
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{< note >}}
 | 
				
			||||||
 | 
					En la solicitud anterior, `~ 1` es la codificación del carácter` / `
 | 
				
			||||||
 | 
					en la ruta del parche. El valor de la ruta de operación en JSON-Patch se interpreta como un
 | 
				
			||||||
 | 
					puntero JSON. Para obtener más detalles, consulte
 | 
				
			||||||
 | 
					[IETF RFC 6901, sección 3](https://tools.ietf.org/html/rfc6901#section-3).
 | 
				
			||||||
 | 
					{{< /note >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Recursos extendidos a nivel de Clúster
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Los recursos extendidos a nivel de clúster no están vinculados a los nodos. Suelen estar gestionados
 | 
				
			||||||
 | 
					por extensores del scheduler, que manejan el consumo de recursos y la cuota de recursos.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Puedes especificar los recursos extendidos que son mantenidos por los extensores del scheduler en
 | 
				
			||||||
 | 
					[configuración de políticas del scheduler](https://github.com/kubernetes/kubernetes/blob/release-1.10/pkg/scheduler/api/v1/types.go#L31).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Ejemplo:**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					La siguiente configuración para una política del scheduler indica que el
 | 
				
			||||||
 | 
					recurso extendido a nivel de clúster "example.com/foo" es mantenido 
 | 
				
			||||||
 | 
					por el extensor del scheduler.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- El scheduler envía un Pod al extensor del scheduler solo si la solicitud del Pod "example.com/foo".
 | 
				
			||||||
 | 
					- El campo `ignoredByScheduler` especifica que el schduler no compruba el recurso
 | 
				
			||||||
 | 
					  "example.com/foo"  en su predicado `PodFitsResources`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```json
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  "kind": "Policy",
 | 
				
			||||||
 | 
					  "apiVersion": "v1",
 | 
				
			||||||
 | 
					  "extenders": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "urlPrefix":"<extender-endpoint>",
 | 
				
			||||||
 | 
					      "bindVerb": "bind",
 | 
				
			||||||
 | 
					      "managedResources": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "name": "example.com/foo",
 | 
				
			||||||
 | 
					          "ignoredByScheduler": true
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Consumiendo recursos extendidos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Los usuarios pueden consumir recursos extendidos en las especificaciones del Pod, como la CPU y la memoria.
 | 
				
			||||||
 | 
					El {{< glossary_tooltip text="planificador" term_id="kube-scheduler" >}} se encarga de la contabilidad de recursos para que no más de
 | 
				
			||||||
 | 
					la cantidad disponible sea asignada simultáneamente a los Pods.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					El servidor de API restringe las cantidades de recursos extendidos a números enteros.
 | 
				
			||||||
 | 
					Ejemplos de cantidades _validas_ son `3`,` 3000m` y `3Ki`. Ejemplos de
 | 
				
			||||||
 | 
					_cantidades no válidas_ son `0.5` y` 1500m`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{< note >}}
 | 
				
			||||||
 | 
					Los recursos extendidos reemplazan los Recursos Integrales Opacos.
 | 
				
			||||||
 | 
					Los usuarios pueden usar cualquier otro prefijo de dominio que `kubernetes.io`
 | 
				
			||||||
 | 
					tenga reservado.
 | 
				
			||||||
 | 
					{{< /note >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Para consumir un recurso extendido en un Pod, incluye un nombre de recurso
 | 
				
			||||||
 | 
					como clave en `spec.containers[].resources.limits` en las especificaciones del contenedor.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{{< note >}}
 | 
				
			||||||
 | 
					Los Recursos Extendidos no pueden ser sobreescritos, así que solicitudes y límites
 | 
				
			||||||
 | 
					deben ser iguales si ambos están presentes en las especificaciones de un contenedor.
 | 
				
			||||||
 | 
					{{< /note >}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Un pod se programa solo si se satisfacen todas las solicitudes de recursos, incluidas
 | 
				
			||||||
 | 
					CPU, memoria y cualquier recurso extendido. El {{< glossary_tooltip text="Pod" term_id="pod" >}} permanece en estado `PENDING`
 | 
				
			||||||
 | 
					siempre que no se pueda satisfacer la solicitud de recursos.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**Ejemplo:**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					El siguiente {{< glossary_tooltip text="Pod" term_id="pod" >}} solicita 2CPUs y 1 "example.com/foo" (un recurso extendido).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```yaml
 | 
				
			||||||
 | 
					apiVersion: v1
 | 
				
			||||||
 | 
					kind: Pod
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: my-pod
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  containers:
 | 
				
			||||||
 | 
					  - name: my-container
 | 
				
			||||||
 | 
					    image: myimage
 | 
				
			||||||
 | 
					    resources:
 | 
				
			||||||
 | 
					      requests:
 | 
				
			||||||
 | 
					        cpu: 2
 | 
				
			||||||
 | 
					        example.com/foo: 1
 | 
				
			||||||
 | 
					      limits:
 | 
				
			||||||
 | 
					        example.com/foo: 1
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Solución de problemas
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Mis Pods están en estado pendiente con un mensaje de failedScheduling
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Si el {{< glossary_tooltip text="planificador" term_id="kube-scheduler" >}} no puede encontrar ningún nodo donde pueda colocar un {{< glossary_tooltip text="Pod" term_id="pod" >}}, el {{< glossary_tooltip text="Pod" term_id="pod" >}} permanece
 | 
				
			||||||
 | 
					no programado hasta que se pueda encontrar un lugar. Se produce un evento cada vez que
 | 
				
			||||||
 | 
					el {{< glossary_tooltip text="planificador" term_id="kube-scheduler" >}} no encuentra un lugar para el {{< glossary_tooltip text="Pod" term_id="pod" >}}, como este:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					kubectl describe pod frontend | grep -A 3 Events
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					Events:
 | 
				
			||||||
 | 
					  FirstSeen LastSeen   Count  From          Subobject   PathReason      Message
 | 
				
			||||||
 | 
					  36s   5s     6      {scheduler }              FailedScheduling  Failed for reason PodExceedsFreeCPU and possibly others
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					En el ejemplo anterior, el Pod llamado "frontend" no se puede programar debido a
 | 
				
			||||||
 | 
					recursos de CPU insuficientes en el nodo. Mensajes de error similares también pueden sugerir
 | 
				
			||||||
 | 
					fallo debido a memoria insuficiente (PodExceedsFreeMemory). En general, si un Pod
 | 
				
			||||||
 | 
					está pendiente con un mensaje de este tipo, hay varias cosas para probar:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Añadir más nodos al clúster.
 | 
				
			||||||
 | 
					- Terminar Pods innecesarios para hacer hueco a los Pods en estado pendiente.
 | 
				
			||||||
 | 
					- Compruebe que el Pod no sea más grande que todos los nodos. Por ejemplo, si todos los
 | 
				
			||||||
 | 
					  los nodos tienen una capacidad de `cpu: 1`, entonces un Pod con una solicitud de` cpu: 1.1`
 | 
				
			||||||
 | 
					  nunca se programará.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Puedes comprobar las capacidades del nodo y cantidad utilizada con el comando 
 | 
				
			||||||
 | 
					`kubectl describe nodes`. Por ejemplo:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					kubectl describe nodes e2e-test-node-pool-4lw4
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					Name:            e2e-test-node-pool-4lw4
 | 
				
			||||||
 | 
					[ ... lines removed for clarity ...]
 | 
				
			||||||
 | 
					Capacity:
 | 
				
			||||||
 | 
					 cpu:                               2
 | 
				
			||||||
 | 
					 memory:                            7679792Ki
 | 
				
			||||||
 | 
					 pods:                              110
 | 
				
			||||||
 | 
					Allocatable:
 | 
				
			||||||
 | 
					 cpu:                               1800m
 | 
				
			||||||
 | 
					 memory:                            7474992Ki
 | 
				
			||||||
 | 
					 pods:                              110
 | 
				
			||||||
 | 
					[ ... lines removed for clarity ...]
 | 
				
			||||||
 | 
					Non-terminated Pods:        (5 in total)
 | 
				
			||||||
 | 
					  Namespace    Name                                  CPU Requests  CPU Limits  Memory Requests  Memory Limits
 | 
				
			||||||
 | 
					  ---------    ----                                  ------------  ----------  ---------------  -------------
 | 
				
			||||||
 | 
					  kube-system  fluentd-gcp-v1.38-28bv1               100m (5%)     0 (0%)      200Mi (2%)       200Mi (2%)
 | 
				
			||||||
 | 
					  kube-system  kube-dns-3297075139-61lj3             260m (13%)    0 (0%)      100Mi (1%)       170Mi (2%)
 | 
				
			||||||
 | 
					  kube-system  kube-proxy-e2e-test-...               100m (5%)     0 (0%)      0 (0%)           0 (0%)
 | 
				
			||||||
 | 
					  kube-system  monitoring-influxdb-grafana-v4-z1m12  200m (10%)    200m (10%)  600Mi (8%)       600Mi (8%)
 | 
				
			||||||
 | 
					  kube-system  node-problem-detector-v0.1-fj7m3      20m (1%)      200m (10%)  20Mi (0%)        100Mi (1%)
 | 
				
			||||||
 | 
					Allocated resources:
 | 
				
			||||||
 | 
					  (Total limits may be over 100 percent, i.e., overcommitted.)
 | 
				
			||||||
 | 
					  CPU Requests    CPU Limits    Memory Requests    Memory Limits
 | 
				
			||||||
 | 
					  ------------    ----------    ---------------    -------------
 | 
				
			||||||
 | 
					  680m (34%)      400m (20%)    920Mi (11%)        1070Mi (13%)
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EN la salida anterior, puedes ver si una solicitud de Pod mayor que 1120m
 | 
				
			||||||
 | 
					CPUs o 6.23Gi de memoria, no cabrán en el nodo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Echando un vistazo a la sección `Pods`, puedes ver qué Pods están ocupando espacio
 | 
				
			||||||
 | 
					en el nodo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					La cantidad de recursos disponibles para los pods es menor que la capacidad del nodo, porque
 | 
				
			||||||
 | 
					los demonios del sistema utilizan una parte de los recursos disponibles. El campo `allocatable`
 | 
				
			||||||
 | 
					[NodeStatus](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#nodestatus-v1-core)
 | 
				
			||||||
 | 
					indica la cantidad de recursos que están disponibles para los Pods. Para más información, mira 
 | 
				
			||||||
 | 
					[Node Allocatable Resources](https://git.k8s.io/community/contributors/design-proposals/node/node-allocatable.md).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					La característica [resource quota](/docs/concepts/policy/resource-quotas/) se puede configurar
 | 
				
			||||||
 | 
					para limitar la cantidad total de recursos que se pueden consumir. Si se usa en conjunto
 | 
				
			||||||
 | 
					con espacios de nombres, puede evitar que un equipo acapare todos los recursos.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Mi contenedor está terminado
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Es posible que su contenedor se cancele porque carece de recursos. Para verificar
 | 
				
			||||||
 | 
					si un contenedor está siendo eliminado porque está alcanzando un límite de recursos, ejecute
 | 
				
			||||||
 | 
					`kubectl describe pod` en el Pod de interés:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					kubectl describe pod simmemleak-hra99
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					Name:                           simmemleak-hra99
 | 
				
			||||||
 | 
					Namespace:                      default
 | 
				
			||||||
 | 
					Image(s):                       saadali/simmemleak
 | 
				
			||||||
 | 
					Node:                           kubernetes-node-tf0f/10.240.216.66
 | 
				
			||||||
 | 
					Labels:                         name=simmemleak
 | 
				
			||||||
 | 
					Status:                         Running
 | 
				
			||||||
 | 
					Reason:
 | 
				
			||||||
 | 
					Message:
 | 
				
			||||||
 | 
					IP:                             10.244.2.75
 | 
				
			||||||
 | 
					Replication Controllers:        simmemleak (1/1 replicas created)
 | 
				
			||||||
 | 
					Containers:
 | 
				
			||||||
 | 
					  simmemleak:
 | 
				
			||||||
 | 
					    Image:  saadali/simmemleak
 | 
				
			||||||
 | 
					    Limits:
 | 
				
			||||||
 | 
					      cpu:                      100m
 | 
				
			||||||
 | 
					      memory:                   50Mi
 | 
				
			||||||
 | 
					    State:                      Running
 | 
				
			||||||
 | 
					      Started:                  Tue, 07 Jul 2015 12:54:41 -0700
 | 
				
			||||||
 | 
					    Last Termination State:     Terminated
 | 
				
			||||||
 | 
					      Exit Code:                1
 | 
				
			||||||
 | 
					      Started:                  Fri, 07 Jul 2015 12:54:30 -0700
 | 
				
			||||||
 | 
					      Finished:                 Fri, 07 Jul 2015 12:54:33 -0700
 | 
				
			||||||
 | 
					    Ready:                      False
 | 
				
			||||||
 | 
					    Restart Count:              5
 | 
				
			||||||
 | 
					Conditions:
 | 
				
			||||||
 | 
					  Type      Status
 | 
				
			||||||
 | 
					  Ready     False
 | 
				
			||||||
 | 
					Events:
 | 
				
			||||||
 | 
					  FirstSeen                         LastSeen                         Count  From                              SubobjectPath                       Reason      Message
 | 
				
			||||||
 | 
					  Tue, 07 Jul 2015 12:53:51 -0700   Tue, 07 Jul 2015 12:53:51 -0700  1      {scheduler }                                                          scheduled   Successfully assigned simmemleak-hra99 to kubernetes-node-tf0f
 | 
				
			||||||
 | 
					  Tue, 07 Jul 2015 12:53:51 -0700   Tue, 07 Jul 2015 12:53:51 -0700  1      {kubelet kubernetes-node-tf0f}    implicitly required container POD   pulled      Pod container image "k8s.gcr.io/pause:0.8.0" already present on machine
 | 
				
			||||||
 | 
					  Tue, 07 Jul 2015 12:53:51 -0700   Tue, 07 Jul 2015 12:53:51 -0700  1      {kubelet kubernetes-node-tf0f}    implicitly required container POD   created     Created with docker id 6a41280f516d
 | 
				
			||||||
 | 
					  Tue, 07 Jul 2015 12:53:51 -0700   Tue, 07 Jul 2015 12:53:51 -0700  1      {kubelet kubernetes-node-tf0f}    implicitly required container POD   started     Started with docker id 6a41280f516d
 | 
				
			||||||
 | 
					  Tue, 07 Jul 2015 12:53:51 -0700   Tue, 07 Jul 2015 12:53:51 -0700  1      {kubelet kubernetes-node-tf0f}    spec.containers{simmemleak}         created     Created with docker id 87348f12526a
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					En el ejemplo anterior, `Restart Count:  5` indica que el contenedor `simmemleak`
 | 
				
			||||||
 | 
					del Pod se reinició cinco veces.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Puedes ejecutar `kubectl get pod` con la opción `-o go-template=...` para extraer el estado 
 | 
				
			||||||
 | 
					previos de los Contenedores terminados:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```shell
 | 
				
			||||||
 | 
					kubectl get pod -o go-template='{{range.status.containerStatuses}}{{"Container Name: "}}{{.name}}{{"\r\nLastState: "}}{{.lastState}}{{end}}'  simmemleak-hra99
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					Container Name: simmemleak
 | 
				
			||||||
 | 
					LastState: map[terminated:map[exitCode:137 reason:OOM Killed startedAt:2015-07-07T20:58:43Z finishedAt:2015-07-07T20:58:43Z containerID:docker://0e4095bba1feccdfe7ef9fb6ebffe972b4b14285d5acdec6f0d3ae8a22fad8b2]]
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Puedes ver que el Contenedor fué terminado a causa de `reason:OOM Killed`, donde `OOM` indica una falta de memoria.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## {{% heading "whatsnext" %}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Obtén experiencia práctica [assigning Memory resources to Containers and Pods](/docs/tasks/configure-pod-container/assign-memory-resource/).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Obtén experiencia práctica [assigning CPU resources to Containers and Pods](/docs/tasks/configure-pod-container/assign-cpu-resource/).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Para más detalles sobre la diferencia entre solicitudes y límites, mira
 | 
				
			||||||
 | 
					  [Resource QoS](https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Lee [Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) referencia de API
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Lee [ResourceRequirements](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#resourcerequirements-v1-core) referencia de API
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Lee sobre [project quotas](https://xfs.org/docs/xfsdocs-xml-dev/XFS_User_Guide/tmp/en-US/html/xfs-quotas.html) en XFS
 | 
				
			||||||
		Loading…
	
		Reference in New Issue