|
| 1 | +--- |
| 2 | +reviewers: |
| 3 | + - ramrodo |
| 4 | + - krol3 |
| 5 | + - electrocucaracha |
| 6 | +title: Volúmenes efímeros |
| 7 | +content_type: concept |
| 8 | +weight: 30 |
| 9 | +--- |
| 10 | + |
| 11 | +<!-- overview --> |
| 12 | + |
| 13 | +Este documento describe _volúmenes efímeros_ en Kubernetes. Se sugiere tener conocimiento previo sobre [volúmenes](/docs/concepts/storage/volumes/), en particular PersistentVolumeClaim y PersistentVolume. |
| 14 | + |
| 15 | +<!-- body --> |
| 16 | + |
| 17 | +Algunas aplicaciones requieren almacenamiento adicional, pero no les preocupa si esos datos se almacenan de manera persistente entre reinicios. Por ejemplo, los servicios de caché a menudo tienen limitaciones de tamaño de memoria y pueden trasladar datos poco utilizados a un almacenamiento más lento que la memoria, con un impacto mínimo en el rendimiento general. |
| 18 | + |
| 19 | +Otras aplicaciones esperan que algunos datos de entrada de solo lectura estén presentes en archivos, como datos de configuración o claves secretas. |
| 20 | + |
| 21 | +Los _volúmenes efímeros_ están diseñados para estos casos de uso. Debido a que los volúmenes siguen el ciclo de vida del Pod y se crean y eliminan junto con el Pod, los Pods pueden detenerse y reiniciarse sin estar limitados a la disponibilidad de algún volumen persistente. |
| 22 | + |
| 23 | +Los volúmenes efímeros se especifican _en línea_ en la especificación del Pod, lo que simplifica la implementación y gestión de aplicaciones. |
| 24 | + |
| 25 | +### Tipos de volúmenes efímeros |
| 26 | + |
| 27 | +Kubernetes admite varios tipos diferentes de volúmenes efímeros para diversos propósitos: |
| 28 | + |
| 29 | +- [emptyDir](/docs/concepts/storage/volumes/#emptydir): vacíos al inicio del Pod, con el almacenamiento proveniente localmente del directorio base de kubelet (generalmente el disco raíz) o la RAM. |
| 30 | +- [configMap](/docs/concepts/storage/volumes/#configmap), |
| 31 | + [downwardAPI](/docs/concepts/storage/volumes/#downwardapi), |
| 32 | + [secret](/docs/concepts/storage/volumes/#secret): inyectar diferentes tipos de datos de Kubernetes en un Pod. |
| 33 | + |
| 34 | +- [CSI volúmenes efímeros](#csi-ephemeral-volumes): |
| 35 | + Similar a los tipos de volumen anteriores, pero proporcionados por controladores especiales {{< glossary_tooltip text="CSI" term_id="csi" >}} que [soportan específicamente esta característica](https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html) |
| 36 | +- [volúmenes efímeros genéricos](#generic-ephemeral-volumes), que pueden proporcionar todos los controladores de almacenamiento que también admiten volúmenes persistentes |
| 37 | + |
| 38 | +`emptyDir`, `configMap`, `downwardAPI`, `secret` se proporcionan como [almacenamiento efímero local](/docs/concepts/configuration/manage-resources-containers/#local-ephemeral-storage). |
| 39 | +Ellos son administrados por kubelet en cada nodo. |
| 40 | + |
| 41 | +Los volúmenes efímeros CSI _deben_ ser proporcionados por controladores de almacenamiento CSI de terceros. |
| 42 | + |
| 43 | +Los volúmenes efímeros genéricos _pueden_ ser proporcionados por controladores de almacenamiento CSI de terceros, pero también por cualquier otro controlador de almacenamiento que admita la provisión dinámica. Algunos controladores CSI están escritos específicamente para volúmenes efímeros CSI y no admiten la provisión dinámica; por lo tanto, no se pueden utilizar para volúmenes efímeros genéricos. |
| 44 | + |
| 45 | +La ventaja de utilizar controladores de terceros es que pueden ofrecer funcionalidades que Kubernetes en sí mismo no admite, como el almacenamiento con características de rendimiento diferentes al disco gestionado por kubelet o la inyección de datos diversos. |
| 46 | + |
| 47 | +### Volúmenes efímeros de CSI |
| 48 | + |
| 49 | +{{< feature-state for_k8s_version="v1.25" state="stable" >}} |
| 50 | + |
| 51 | +{{< note >}} |
| 52 | +Los volúmenes efímeros CSI solo son compatibles con un subconjunto de controladores CSI. |
| 53 | +La [lista de controladores](https://kubernetes-csi.github.io/docs/drivers.html) CSI de Kubernetes muestra cuáles controladores admiten volúmenes efímeros. |
| 54 | +{{< /note >}} |
| 55 | +Conceptualmente, los volúmenes efímeros CSI son similares a los tipos de volumen `configMap`, |
| 56 | +`downwardAPI` y `secret`: el almacenamiento se gestiona localmente en cada nodo y se crea junto con otros recursos locales después de que un Pod ha sido programado en un nodo. Kubernetes ya no tiene ningún concepto de reprogramación de Pods en esta etapa. La creación de volúmenes debe ser poco propensa a fallos, |
| 57 | +de lo contrario, el inicio del Pod queda atascado. En particular, [la programación de Pods con conciencia de la capacidad de almacenamiento](/docs/concepts/storage/storage-capacity/) _no_ está admitida para estos volúmenes. Actualmente, tampoco están cubiertos por los límites de uso de recursos de almacenamiento de un Pod, porque eso es algo que kubelet solo puede aplicar para el almacenamiento que administra él mismo. |
| 58 | + |
| 59 | +Aquí tienes un ejemplo de manifiesto para un Pod que utiliza almacenamiento efímero CSI: |
| 60 | + |
| 61 | +```yaml |
| 62 | +kind: Pod |
| 63 | +apiVersion: v1 |
| 64 | +metadata: |
| 65 | + name: my-csi-app |
| 66 | +spec: |
| 67 | + containers: |
| 68 | + - name: my-frontend |
| 69 | + image: busybox:1.28 |
| 70 | + volumeMounts: |
| 71 | + - mountPath: "/data" |
| 72 | + name: my-csi-inline-vol |
| 73 | + command: ["sleep", "1000000"] |
| 74 | + volumes: |
| 75 | + - name: my-csi-inline-vol |
| 76 | + csi: |
| 77 | + driver: inline.storage.kubernetes.io |
| 78 | + volumeAttributes: |
| 79 | + foo: bar |
| 80 | +``` |
| 81 | +
|
| 82 | +Los `volumeAttributes` determinan qué volumen es preparado por el controlador. Estos atributos son específicos de cada controlador y no están estandarizados. Consulta la documentación de cada controlador CSI para obtener instrucciones adicionales. |
| 83 | + |
| 84 | +### Restricciones del conductor CSI |
| 85 | + |
| 86 | +Los volúmenes efímeros CSI permiten a los usuarios proporcionar `volumeAttributes` directamente al controlador CSI como parte de la especificación del Pod. Un controlador CSI que permite `volumeAttributes` que normalmente están restringidos a administradores NO es adecuado para su uso en un volumen efímero en línea. Por ejemplo, los parámetros que normalmente se definen en la clase de almacenamiento no deben estar expuestos a los usuarios a través del uso de volúmenes efímeros en línea. |
| 87 | + |
| 88 | +Los administradores del clúster que necesiten restringir los controladores CSI que se pueden utilizar como volúmenes en línea dentro de una especificación de Pod pueden hacerlo mediante: |
| 89 | + |
| 90 | +- Eliminar `Ephemeral` de `volumeLifecycleModes` en la especificación de CSIDriver, lo que evita que los controladores CSI admitan volúmenes efímeros en línea. |
| 91 | + |
| 92 | +- Usando un [webhook de admisión](/docs/reference/access-authn-authz/extensible-admission-controllers/) |
| 93 | + para restringir el uso de este controlador. |
| 94 | + |
| 95 | +### Volúmenes efímeros genéricos |
| 96 | + |
| 97 | +{{< feature-state for_k8s_version="v1.23" state="stable" >}} |
| 98 | + |
| 99 | +Los volúmenes efímeros genéricos son similares a los volúmenes `emptyDir` en el sentido de que proporcionan un directorio por Pod para datos temporales que generalmente está vacío después de la provisión. Pero también pueden tener características adicionales: |
| 100 | + |
| 101 | +- El almacenamiento puede ser local o conectado a la red. |
| 102 | +- Los volúmenes pueden tener un tamaño fijo que los Pods no pueden exceder. |
| 103 | +- Los volúmenes pueden tener algunos datos iniciales, dependiendo del controlador y los parámetros. |
| 104 | +- Se admiten operaciones típicas en los volúmenes, siempre que el controlador las soporte, incluyendo |
| 105 | + [instantáneas](/docs/concepts/storage/volume-snapshots/), |
| 106 | + [clonación](/docs/concepts/storage/volume-pvc-datasource/), |
| 107 | + [cambiar el tamaño](/docs/concepts/storage/persistent-volumes/#expanding-persistent-volumes-claims), |
| 108 | + y [seguimiento de la capacidad de almacenamiento](/docs/concepts/storage/storage-capacity/). |
| 109 | + |
| 110 | +Ejemplo: |
| 111 | + |
| 112 | +```yaml |
| 113 | +kind: Pod |
| 114 | +apiVersion: v1 |
| 115 | +metadata: |
| 116 | + name: my-app |
| 117 | +spec: |
| 118 | + containers: |
| 119 | + - name: my-frontend |
| 120 | + image: busybox:1.28 |
| 121 | + volumeMounts: |
| 122 | + - mountPath: "/scratch" |
| 123 | + name: scratch-volume |
| 124 | + command: ["sleep", "1000000"] |
| 125 | + volumes: |
| 126 | + - name: scratch-volume |
| 127 | + ephemeral: |
| 128 | + volumeClaimTemplate: |
| 129 | + metadata: |
| 130 | + labels: |
| 131 | + type: my-frontend-volume |
| 132 | + spec: |
| 133 | + accessModes: ["ReadWriteOnce"] |
| 134 | + storageClassName: "scratch-storage-class" |
| 135 | + resources: |
| 136 | + requests: |
| 137 | + storage: 1Gi |
| 138 | +``` |
| 139 | + |
| 140 | +### Ciclo de vida y reclamo de volumen persistente |
| 141 | + |
| 142 | +La idea clave de diseño es que los [parámetros para una solicitud de volumen](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#ephemeralvolumesource-v1-core) |
| 143 | +se permiten dentro de una fuente de volumen del Pod. Se admiten etiquetas, anotaciones y |
| 144 | +todo el conjunto de campos para una PersistentVolumeClaim. Cuando se crea un Pod de este tipo, el controlador de volúmenes efímeros crea entonces un objeto PersistentVolumeClaim real en el mismo espacio de nombres que el Pod y asegura que la PersistentVolumeClaim |
| 145 | +se elimine cuando se elimina el Pod. |
| 146 | + |
| 147 | +Eso desencadena la vinculación y/o aprovisionamiento de volúmenes, ya sea de inmediato si el {{< glossary_tooltip text="StorageClass" term_id="storage-class" >}} utiliza la vinculación inmediata de volúmenes o cuando el Pod está programado provisionalmente en un nodo (modo de vinculación de volumen `WaitForFirstConsumer`). Este último se recomienda para volúmenes efímeros genéricos, ya que permite al planificador elegir libremente un nodo adecuado para el Pod. Con la vinculación inmediata, el planificador está obligado a seleccionar un nodo que tenga acceso al volumen una vez que esté disponible. |
| 148 | + |
| 149 | +En términos de [propiedad de recursos](/docs/concepts/architecture/garbage-collection/#owners-dependents), |
| 150 | +un Pod que tiene almacenamiento efímero genérico es el propietario de la PersistentVolumeClaim(s) que proporciona ese almacenamiento efímero. Cuando se elimina el Pod, el recolector de basura de Kubernetes elimina la PVC, lo que suele desencadenar la eliminación del volumen, ya que la política de recuperación predeterminada de las clases de almacenamiento es eliminar los volúmenes. |
| 151 | +Puedes crear almacenamiento local cuasi-efímero utilizando una StorageClass con una política de recuperación de `retain`: el almacenamiento sobrevive al Pod y, en este caso, debes asegurarte de que la limpieza del volumen se realice por separado. |
| 152 | + |
| 153 | +Mientras estas PVC existen, pueden usarse como cualquier otra PVC. En particular, pueden ser referenciadas como fuente de datos en la clonación o creación de instantáneas de volúmenes. El objeto PVC también contiene el estado actual del volumen. |
| 154 | + |
| 155 | +### Nomenclatura de PersistentVolumeClaim. |
| 156 | + |
| 157 | +La nomenclatura de las PVC creadas automáticamente es determinista: el nombre es una combinación del nombre del Pod y el nombre del volumen, con un guion medio (`-`) en el medio. En el ejemplo anterior, el nombre de la PVC será `my-app-scratch-volume`. Esta nomenclatura determinista facilita la interacción con la PVC, ya que no es necesario buscarla una vez que se conocen el nombre del Pod y el nombre del volumen. |
| 158 | + |
| 159 | +La nomenclatura determinista también introduce un posible conflicto entre diferentes Pods (un Pod "pod-a" con el volumen "scratch" y otro Pod con nombre "pod" y volumen "a-scratch" terminan teniendo el mismo nombre de PVC "pod-a-scratch") y entre Pods y PVCs creadas manualmente. |
| 160 | + |
| 161 | +Estos conflictos se detectan: una PVC solo se utiliza para un volumen efímero si se creó para el Pod. Esta comprobación se basa en la relación de propiedad. Una PVC existente no se sobrescribe ni se modifica. Pero esto no resuelve el conflicto, ya que sin la PVC adecuada, el Pod no puede iniciarse. |
| 162 | + |
| 163 | +{{< caution >}} |
| 164 | +Ten cuidado al nombrar Pods y volúmenes dentro del mismo espacio de nombres para evitar que se produzcan estos conflictos. |
| 165 | +{{< /caution >}} |
| 166 | + |
| 167 | +### Seguridad |
| 168 | + |
| 169 | +El uso de volúmenes efímeros genéricos permite a los usuarios crear PVC de forma indirecta si pueden crear Pods, incluso si no tienen permiso para crear PVC directamente. Los administradores del clúster deben ser conscientes de esto. Si esto no encaja en su modelo de seguridad, deberían utilizar un [webhook de admisión](/docs/reference/access-authn-authz/extensible-admission-controllers/) que rechace objetos como Pods que tienen un volumen efímero genérico. |
| 170 | + |
| 171 | +La cuota normal del [espacio de nombres para PVC](/docs/concepts/policy/resource-quotas/#storage-resource-quota) sigue aplicándose, por lo que incluso si a los usuarios se les permite utilizar este nuevo mecanismo, no pueden utilizarlo para eludir otras políticas. |
| 172 | + |
| 173 | +## {{% heading "whatsnext" %}} |
| 174 | + |
| 175 | +### Volúmenes efímeros gestionados por kubelet |
| 176 | + |
| 177 | +Ver [almacenamiento efímero local](/docs/concepts/configuration/manage-resources-containers/#local-ephemeral-storage). |
| 178 | + |
| 179 | +### Volúmenes efímeros de CSI |
| 180 | + |
| 181 | +- Para obtener más información sobre el diseño, consulta el |
| 182 | + [KEP de Volúmenes efímeros en línea de CSI](https://github.com/kubernetes/enhancements/blob/ad6021b3d61a49040a3f835e12c8bb5424db2bbb/keps/sig-storage/20190122-csi-inline-volumes.md). |
| 183 | +- Para obtener más información sobre el desarrollo futuro de esta función, consulte el |
| 184 | + [problema de seguimiento de mejoras #596](https://github.com/kubernetes/enhancements/issues/596). |
| 185 | + |
| 186 | +### Volúmenes efímeros genéricos |
| 187 | + |
| 188 | +- Para obtener más información sobre el diseño, consulta el |
| 189 | + [KEP de Volúmenes efímeros genéricos en línea](https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/1698-generic-ephemeral-volumes/README.md). |
0 commit comments