Opciones de almacenamiento de aplicaciones en Azure Kubernetes Service (AKS)Storage options for applications in Azure Kubernetes Service (AKS)

Las aplicaciones que se ejecutan en Azure Kubernetes Service (AKS) pueden necesitar almacenar y recuperar datos.Applications that run in Azure Kubernetes Service (AKS) may need to store and retrieve data. Para algunas cargas de trabajo de la aplicación, este almacenamiento de datos puede usar el almacenamiento rápido local en el nodo que ya no es necesario cuando se eliminan los pods.For some application workloads, this data storage can use local, fast storage on the node that is no longer needed when the pods are deleted. Otras cargas de trabajo de la aplicación pueden requerir almacenamiento que conserve en volúmenes de datos más regulares dentro de la plataforma Azure.Other application workloads may require storage that persists on more regular data volumes within the Azure platform. Es posible varios pods necesiten compartir los mismos volúmenes de datos o volver a conectar los volúmenes de datos si se vuelve a programar el pod en otro nodo.Multiple pods may need to share the same data volumes, or reattach data volumes if the pod is rescheduled on a different node. Por último, es posible que deba insertar datos confidenciales o información de configuración de la aplicación en los pods.Finally, you may need to inject sensitive data or application configuration information into pods.

Opciones de almacenamiento de aplicaciones en un clúster de Azure Kubernetes Service (AKS)

En este artículo se presentan los conceptos básicos que proporcionan almacenamiento para sus aplicaciones en AKS:This article introduces the core concepts that provide storage to your applications in AKS:

VolúmenesVolumes

A menudo, las aplicaciones necesitan poder almacenar y recuperar datos.Applications often need to be able to store and retrieve data. Dado que Kubernetes suele tratar los pods individuales como recursos efímeros y descartables, existen diferentes enfoques disponibles para usar aplicaciones y conservar datos según sea necesario.As Kubernetes typically treats individual pods as ephemeral, disposable resources, different approaches are available for applications to use and persist data as necessary. Un volumen representa una manera de almacenar, recuperar y conservar datos entre pods y durante el ciclo de vida de la aplicación.A volume represents a way to store, retrieve, and persist data across pods and through the application lifecycle.

Los volúmenes tradicionales para almacenar y recuperar datos se crean como recursos de Kubernetes respaldados por Azure Storage.Traditional volumes to store and retrieve data are created as Kubernetes resources backed by Azure Storage. Puede crear manualmente estos volúmenes de datos para que se asignen directamente a los pods, o hacer que Kubernetes los cree automáticamente.You can manually create these data volumes to be assigned to pods directly, or have Kubernetes automatically create them. Estos volúmenes de datos pueden utilizar Azure Disks o Azure Files:These data volumes can use Azure Disks or Azure Files:

  • Azure Disks puede usarse para crear un recurso DataDisk de Kubernetes.Azure Disks can be used to create a Kubernetes DataDisk resource. Azure Disks puede usar almacenamiento Premium de Azure, respaldado por SSD de alto rendimiento, o bien almacenamiento estándar de Azure, respaldado por unidades de disco duro normales.Disks can use Azure Premium storage, backed by high-performance SSDs, or Azure Standard storage, backed by regular HDDs. Para la mayoría de las cargas de trabajo de producción y desarrollo, utilice el almacenamiento Premium.For most production and development workloads, use Premium storage. Los discos de Azure Disks se montan como ReadWriteOnce, por lo que solo están disponibles para un único pod.Azure Disks are mounted as ReadWriteOnce, so are only available to a single pod. Para los volúmenes de almacenamiento a los que pueden acceder varios pods simultáneamente, use Azure Files.For storage volumes that can be accessed by multiple pods simultaneously, use Azure Files.
  • Azure Files se puede usar para montar un recurso compartido de SMB 3.0 respaldado por una cuenta de Azure Storage en los pods.Azure Files can be used to mount an SMB 3.0 share backed by an Azure Storage account to pods. Azure Files permite compartir datos entre varios nodos y pods.Files let you share data across multiple nodes and pods. Los archivos pueden usar almacenamiento Standard de Azure, respaldado por HDD normales o almacenamiento Premium de Azure respaldado por SSD de alto rendimiento.Files can use Azure Standard storage backed by regular HDDs, or Azure Premium storage, backed by high-performance SSDs.

En Kubernetes, los volúmenes pueden representar más que un disco tradicional donde se puede almacenar y recuperar información.In Kubernetes, volumes can represent more than just a traditional disk where information can be stored and retrieved. Los volúmenes de Kubernetes pueden utilizarse también como una forma de insertar datos en un pod para su uso en contenedores.Kubernetes volumes can also be used as a way to inject data into a pod for use by the containers. Algunos tipos de volumen adicional comunes de Kubernetes son:Common additional volume types in Kubernetes include:

  • emptyDir: este volumen se suele utilizar como espacio temporal para un pod.emptyDir - This volume is commonly used as temporary space for a pod. Todos los contenedores dentro de un pod pueden acceder a los datos del volumen.All containers within a pod can access the data on the volume. Los datos escritos en este tipo de volumen se conservan únicamente para la duración del pod (cuando se elimina el pod, se elimina el volumen).Data written to this volume type persists only for the lifespan of the pod - when the pod is deleted, the volume is deleted. Este volumen suele usar el almacenamiento en disco del nodo local subyacente, aunque también puede existir solo en la memoria del nodo.This volume typically uses the underlying local node disk storage, though it can also exist only in the node's memory.
  • secreto: este volumen se usa para insertar datos confidenciales en pods, como contraseñas.secret - This volume is used to inject sensitive data into pods, such as passwords. En primer lugar, cree un secreto mediante la API de Kubernetes.You first create a Secret using the Kubernetes API. Al definir el pod o la implementación, puede solicitar un secreto específico.When you define your pod or deployment, a specific Secret can be requested. Los secretos solo se proporcionan a los nodos que tienen un pod programado que lo requiere. El secreto se almacena en el sistema tmpfs, no se escribe en el disco.Secrets are only provided to nodes that have a scheduled pod that requires it, and the Secret is stored in tmpfs, not written to disk. Cuando se elimina el último pod en un nodo que requiere un secreto, el secreto se elimina del sistema tmpfs del nodo.When the last pod on a node that requires a Secret is deleted, the Secret is deleted from the node's tmpfs. Los secretos se almacenan en un espacio de nombres determinado y solo son accesibles para los pods del mismo espacio de nombres.Secrets are stored within a given namespace and can only be accessed by pods within the same namespace.
  • configMap: este tipo de volumen se usa para insertar las propiedades de pares clave-valor en pods, como la información de configuración de la aplicación.configMap - This volume type is used to inject key-value pair properties into pods, such as application configuration information. En lugar de definir la información de configuración de la aplicación dentro de una imagen de contenedor, puede definirla como un recurso de Kubernetes que se pueda actualizar fácilmente y aplicarse a las nuevas instancias de pods a medida que se implementan.Rather than defining application configuration information within a container image, you can define it as a Kubernetes resource that can be easily updated and applied to new instances of pods as they are deployed. Al igual que con un secreto, primero se crea el volumen ConfigMap mediante la API de Kubernetes.Like using a Secret, you first create a ConfigMap using the Kubernetes API. Posteriormente, el volumen ConfigMap se puede solicitar al definir un pod o una implementación.This ConfigMap can then be requested when you define a pod or deployment. Los volúmenes ConfigMap se almacenan en un espacio de nombres determinado y solo son accesibles para los pods del mismo espacio de nombres.ConfigMaps are stored within a given namespace and can only be accessed by pods within the same namespace.

Volúmenes persistentesPersistent volumes

Los volúmenes que se definen y se crean como parte del ciclo de vida del pod solo existen hasta que se elimina este.Volumes that are defined and created as part of the pod lifecycle only exist until the pod is deleted. Los pods suelen esperar que su almacenamiento se conserve si un pod se vuelve a programar en un host diferente durante un evento de mantenimiento, especialmente en StatefulSets.Pods often expect their storage to remain if a pod is rescheduled on a different host during a maintenance event, especially in StatefulSets. Un volumen persistente es un recurso de almacenamiento creado y administrado por la API de Kubernetes, que puede existir más allá de la duración de un pod individual.A persistent volume (PV) is a storage resource created and managed by the Kubernetes API that can exist beyond the lifetime of an individual pod.

Se usan Azure Disks o Azure Files para proporcionar el volumen PersistentVolume.Azure Disks or Files are used to provide the PersistentVolume. Como se indicó en la sección anterior sobre los volúmenes, la elección de Azure Disks o Azure Files suele venir determinada por la necesidad de acceso simultáneo a los datos o al nivel de rendimiento.As noted in the previous section on Volumes, the choice of Disks or Files is often determined by the need for concurrent access to the data or the performance tier.

Volúmenes persistentes en un clúster de Azure Kubernetes Service (AKS)

Un volumen PersistentVolume puede crearlo de forma estática un administrador de clústeres o de forma dinámica el servidor de API de Kubernetes.A PersistentVolume can be statically created by a cluster administrator, or dynamically created by the Kubernetes API server. Si un pod está programado y solicita almacenamiento que no está disponible actualmente, Kubernetes puede crear el almacenamiento subyacente de Azure Disks o Azure Files y conectarlo al pod.If a pod is scheduled and requests storage that is not currently available, Kubernetes can create the underlying Azure Disk or Files storage and attach it to the pod. El aprovisionamiento dinámico usa StorageClass para identificar el tipo de almacenamiento que Azure Storage debe crear.Dynamic provisioning uses a StorageClass to identify what type of Azure storage needs to be created.

Clases de almacenamientoStorage classes

Para definir niveles de almacenamiento diferentes, como Premium y Estándar, puede crear una clase StorageClass.To define different tiers of storage, such as Premium and Standard, you can create a StorageClass. La clase StorageClass también define la directiva reclaimPolicy.The StorageClass also defines the reclaimPolicy. Esta directiva reclaimPolicy controla el comportamiento del recurso de almacenamiento subyacente de Azure cuando se elimina el pod y el volumen persistente puede dejar de ser necesario.This reclaimPolicy controls the behavior of the underlying Azure storage resource when the pod is deleted and the persistent volume may no longer be required. El recurso de almacenamiento subyacente se puede eliminar o conservar para su uso con un pod futuro.The underlying storage resource can be deleted, or retained for use with a future pod.

En AKS, se crean cuatro StorageClasses iniciales para el clúster mediante los complementos de almacenamiento en árbol:In AKS, four initial StorageClasses are created for cluster using the in-tree storage plugins:

  • default: usa el almacenamiento SSD estándar de Azure para crear un disco administrado.default - Uses Azure StandardSSD storage to create a Managed Disk. La directiva de reclamación garantiza que el almacenamiento de Azure Disks subyacente se elimina cuando se elimina el volumen persistente que lo utiliza.The reclaim policy ensures that the underlying Azure Disk is deleted when the persistent volume that used it is deleted.
  • managed-premium: usa almacenamiento Premium de Azure para crear un disco administrado.managed-premium - Uses Azure Premium storage to create a Managed Disk. De nuevo, la directiva de reclamación garantiza que el almacenamiento de Azure Disks subyacente se elimina cuando se elimina el volumen persistente que lo utiliza.The reclaim policy again ensures that the underlying Azure Disk is deleted when the persistent volume that used it is deleted.
  • azurefile: usa almacenamiento Estándar de Azure para crear un recurso compartido de archivos de Azure.azurefile - Uses Azure Standard storage to create an Azure File Share. La directiva de reclamación garantiza que el recurso compartido de archivos de Azure subyacente se elimina cuando se elimina el volumen persistente que lo usa.The reclaim policy ensures that the underlying Azure File Share is deleted when the persistent volume that used it is deleted.
  • azurefile-premium: usa almacenamiento Premium de Azure para crear un recurso compartido de archivos de Azure.azurefile-premium - Uses Azure Premium storage to create an Azure File Share. La directiva de reclamación garantiza que el recurso compartido de archivos de Azure subyacente se elimina cuando se elimina el volumen persistente que lo usa.The reclaim policy ensures that the underlying Azure File Share is deleted when the persistent volume that used it is deleted.

En el caso de los clústeres que usan los nuevos complementos externos de interfaz de almacenamiento de contenedores (CSI) (versión preliminar), se crean las siguientes StorageClasses adicionales:For clusters using the new Container Storage Interface (CSI) external plugins (preview) the following additionalStorageClasses are created:

  • managed-csi: usa almacenamiento con redundancia local (LRS) SSD Estándar de Azure para crear un disco administrado.managed-csi - Uses Azure StandardSSD locally redundant storage (LRS) to create a Managed Disk. La directiva de reclamación garantiza que el almacenamiento de Azure Disks subyacente se elimina cuando se elimina el volumen persistente que lo utiliza.The reclaim policy ensures that the underlying Azure Disk is deleted when the persistent volume that used it is deleted. La clase de almacenamiento también configura los volúmenes persistentes para que se puedan expandir, solo es necesario editar la notificación de volumen persistente con el nuevo tamaño.The storage class also configures the persistent volumes to be expandable, you just need to edit the persistent volume claim with the new size.
  • managed-csi-premium: usa almacenamiento con redundancia local (LRS) Premium de Azure para crear un disco administrado.managed-csi-premium - Uses Azure Premium locally redundant storage (LRS) to create a Managed Disk. De nuevo, la directiva de reclamación garantiza que el almacenamiento de Azure Disks subyacente se elimina cuando se elimina el volumen persistente que lo utiliza.The reclaim policy again ensures that the underlying Azure Disk is deleted when the persistent volume that used it is deleted. De forma similar, esta clase de almacenamiento permite expandir los volúmenes persistentes.Similarly, this storage class allows for persistent volumes to be expanded.
  • azurefile-csi: usa almacenamiento Estándar de Azure para crear un recurso compartido de archivos de Azure.azurefile-csi - Uses Azure Standard storage to create an Azure File Share. La directiva de reclamación garantiza que el recurso compartido de archivos de Azure subyacente se elimina cuando se elimina el volumen persistente que lo usa.The reclaim policy ensures that the underlying Azure File Share is deleted when the persistent volume that used it is deleted.
  • azurefile-csi-premium: usa almacenamiento Premium de Azure para crear un recurso compartido de archivos de Azure.azurefile-csi-premium - Uses Azure Premium storage to create an Azure File Share. La directiva de reclamación garantiza que el recurso compartido de archivos de Azure subyacente se elimina cuando se elimina el volumen persistente que lo usa.The reclaim policy ensures that the underlying Azure File Share is deleted when the persistent volume that used it is deleted.

Si no se especifica ninguna clase StorageClass para un volumen persistente, se usa el valor de StorageClass predeterminado.If no StorageClass is specified for a persistent volume, the default StorageClass is used. Tenga cuidado cuando solicite volúmenes persistentes y compruebe que usan el almacenamiento adecuado que necesita.Take care when requesting persistent volumes so that they use the appropriate storage you need. Puede crear una clase StorageClass para satisfacer necesidades adicionales mediante kubectl.You can create a StorageClass for additional needs using kubectl. En el siguiente ejemplo se utilizan discos administrados Premium y se especifica que el disco de Azure Disks subyacente debe conservarse cuando se elimine el pod:The following example uses Premium Managed Disks and specifies that the underlying Azure Disk should be retained when the pod is deleted:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: managed-premium-retain
provisioner: kubernetes.io/azure-disk
reclaimPolicy: Retain
parameters:
  storageaccounttype: Premium_LRS
  kind: Managed

Nota

AKS concilia las clases de almacenamiento predeterminadas y sobrescribirá los cambios que realice en ellas.AKS reconciles the default storage classes and will overwrite any changes you make to those storage classes.

Notificaciones de volúmenes persistentesPersistent volume claims

Una notificación PersistentVolumeClaim solicita almacenamiento en disco o archivo de una clase StorageClass, un modo de acceso y un tamaño determinados.A PersistentVolumeClaim requests either Disk or File storage of a particular StorageClass, access mode, and size. El servidor de API de Kubernetes puede aprovisionar dinámicamente el recurso de almacenamiento subyacente de Azure si no hay ningún recurso existente para satisfacer la notificación de acuerdo con la clase StorageClass definida.The Kubernetes API server can dynamically provision the underlying storage resource in Azure if there is no existing resource to fulfill the claim based on the defined StorageClass. La definición del pod incluye el montaje del volumen una vez que se este se ha conectado al pod.The pod definition includes the volume mount once the volume has been connected to the pod.

Notificaciones de volúmenes persistentes en un clúster de Azure Kubernetes Service (AKS)

Un volumen PersistentVolume se enlaza a una notificación PersistentVolumeClaim cuando se asigna un recurso de almacenamiento disponible al pod que lo solicita.A PersistentVolume is bound to a PersistentVolumeClaim once an available storage resource has been assigned to the pod requesting it. Existe una asignación de 1:1 de volúmenes a notificaciones.There is a 1:1 mapping of persistent volumes to claims.

El manifiesto YAML de ejemplo siguiente muestra una notificación de volumen persistente que usa la clase StorageClass managed-premium y solicita un disco de 5 Gi de tamaño:The following example YAML manifest shows a persistent volume claim that uses the managed-premium StorageClass and requests a Disk 5Gi in size:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: azure-managed-disk
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: managed-premium
  resources:
    requests:
      storage: 5Gi

Cuando se crea una definición de pod, se especifica la notificación de volumen persistente para solicitar el almacenamiento deseado.When you create a pod definition, the persistent volume claim is specified to request the desired storage. A continuación, se especifica el campo volumeMount para que sus aplicaciones lean y escriban datos.You also then specify the volumeMount for your applications to read and write data. El siguiente manifiesto YAML de ejemplo muestra cómo se puede usar la notificación de volumen persistente anterior para montar un volumen en /mnt/azure:The following example YAML manifest shows how the previous persistent volume claim can be used to mount a volume at /mnt/azure:

kind: Pod
apiVersion: v1
metadata:
  name: nginx
spec:
  containers:
    - name: myfrontend
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      volumeMounts:
      - mountPath: "/mnt/azure"
        name: volume
  volumes:
    - name: volume
      persistentVolumeClaim:
        claimName: azure-managed-disk

Para montar un volumen en un contenedor de Windows, especifique la letra de unidad y la ruta de acceso.For mounting a volume in a Windows container, specify the drive letter and path. Por ejemplo:For example:

...      
       volumeMounts:
        - mountPath: "d:"
          name: volume
        - mountPath: "c:\k"
          name: k-dir
...

Pasos siguientesNext steps

Para consultar los procedimientos recomendados asociados, consulte Procedimientos recomendados para el almacenamiento y las copias de seguridad en Azure Kubernetes Service (AKS).For associated best practices, see Best practices for storage and backups in AKS.

Para ver cómo crear volúmenes dinámicos y estáticos que usen Azure Disks o Azure Files, consulte los artículos de procedimientos siguientes:To see how to create dynamic and static volumes that use Azure Disks or Azure Files, see the following how-to articles:

Para obtener más información sobre los conceptos básicos de Kubernetes y AKS, consulte los artículos siguientes:For additional information on core Kubernetes and AKS concepts, see the following articles: