De forma predeterminada, el almacenamiento de los contenedores es efímero: los datos escritos dentro de un contenedor se pierden cuando este se reinicia. Montar un volumen de disco permite que los datos persistan entre reinicios. Este tema explica cómo montar un disco como volumen al crear una elastic container instance mediante la API CreateContainerGroup.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Una elastic container instance en la zona de disponibilidad destino
Un disco pay-as-you-go en la misma zona de disponibilidad que la instancia (para aprovisionamiento estático)
Limitaciones
Solo se pueden montar discos pay-as-you-go. Consulte Block storage billing.
Un disco solo se puede montar en una elastic container instance a la vez; los discos no se pueden compartir.
Cada elastic container instance admite un máximo de seis volúmenes de disco.
El disco debe estar en la misma zona de disponibilidad que la elastic container instance. No se admite el montaje entre zonas. Cree el disco en la zona destino antes de montarlo.
No se pueden montar discos NVMe con la función de montaje múltiple habilitada (discos compartidos NVMe).
No se pueden montar discos que tengan particiones. Si utiliza una instantánea para crear el disco y este tiene particiones, tampoco se podrá montar.
Funcionamiento
Los volúmenes de disco utilizan el complemento FlexVolume con el controlador alicloud/disk. Al llamar a CreateContainerGroup, usted:
Declara un volumen mediante los parámetros
Volume.N.*y especifica el origen del disco (disco existente o disco nuevo).Monta el volumen declarado en un contenedor mediante los parámetros
Container.N.VolumeMount.N.*y especifica la ruta de montaje y el comportamiento.
Los dos modos de aprovisionamiento difieren en el origen del disco:
|
Modo |
Cuándo utilizarlo |
Parámetro clave |
|
Aprovisionamiento estático |
Cuando ya cuenta con un disco para conectar |
|
|
Aprovisionamiento dinámico |
Cuando ECI crea un disco nuevo durante el inicio |
|
Declarar un volumen
Establezca los siguientes parámetros Volume.N.* para declarar un volumen de disco.
|
Parámetro |
Tipo |
Ejemplo |
Descripción |
|
|
String |
|
Nombre del volumen. Se referencia mediante |
|
|
String |
|
Establézcalo en |
|
|
String |
|
Establézcalo en |
|
|
String |
|
Tipo de sistema de archivos. Valores válidos: |
|
|
String |
|
Cadena JSON que contiene la configuración del disco. Consulte las secciones siguientes para ver las claves disponibles. |
Aprovisionamiento estático: uso de un disco existente
Proporcione volumeId en FlexVolume.Options para conectar un disco existente. El disco debe estar en estado Pending y en la misma zona de disponibilidad que la instancia. Cuando se especifica volumeId, se ignoran todos los demás parámetros de atributos del disco (volumeSize, performanceLevel, etc.). Si no especifica volumeId, debe especificar volumeSize.
|
Clave de opción |
Descripción |
|
|
ID del disco que se va a conectar. |
Aprovisionamiento dinámico: creación de un disco nuevo
Omita volumeId y proporcione volumeSize para que ECI cree un disco nuevo durante el inicio. El sistema utiliza automáticamente un SSD mejorado (ESSD); no es posible especificar la categoría del disco.
|
Clave de opción |
Obligatorio |
Descripción |
|
|
Sí |
Tamaño del disco en GiB. Valores válidos: 20–32768. Si también especifica |
|
|
No |
Nivel de rendimiento (PL) del ESSD. Consulte ESSDs. |
|
|
No |
Indica si se debe liberar el disco cuando se libere la instancia. Valor predeterminado: |
|
|
No |
Indica si se debe cifrar el disco. Valor predeterminado: |
|
|
No |
ID de la clave de Key Management Service (KMS) utilizada para el cifrado del disco. |
|
|
No |
ID de la instantánea que se utilizará al crear el disco. Consulte Overview. |
|
|
No |
Etiquetas para asociar al disco. Se admiten hasta 20 etiquetas. Formato: |
Montar un volumen en un contenedor
Después de declarar un volumen, utilice los parámetros Container.N.VolumeMount.N.* para montarlo en un contenedor.
|
Parámetro |
Tipo |
Ejemplo |
Descripción |
|
|
String |
|
Nombre del volumen que se va a montar. Debe coincidir con un valor de |
|
|
String |
|
Ruta dentro del contenedor donde se monta el volumen. Los datos existentes en esta ruta quedan ocultos por el volumen. |
|
|
String |
|
Subdirectorio del volumen que se va a montar. Utilícelo para montar distintos subdirectorios del mismo volumen en diferentes contenedores. |
|
|
Boolean |
|
Indica si la ruta de montaje es de solo lectura. Valor predeterminado: |
|
|
String |
|
Controla si los puntos de montaje se comparten entre los contenedores y el host. Valor predeterminado: |
Modos de propagación de montaje
|
Valor |
Lo que ve el contenedor |
Lo que ve el host |
|
|
Solo los puntos de montaje presentes al momento de la conexión; no son visibles los montajes posteriores en este volumen ni en sus subdirectorios. |
Ningún punto de montaje creado dentro del contenedor es visible en el host. |
|
|
Todos los puntos de montaje posteriores realizados en este volumen o sus subdirectorios en el host son visibles dentro del contenedor. |
Ningún punto de montaje creado dentro del contenedor es visible en el host. |
|
|
Todos los puntos de montaje posteriores realizados en este volumen o sus subdirectorios en el host son visibles dentro del contenedor. |
Todos los puntos de montaje creados dentro del contenedor se propagan al host y a todos los contenedores de todas las elastic container instances que utilicen el mismo volumen. |
Para montar volúmenes en contenedores de inicialización, utilice los mismos parámetros conInitContaineren lugar deContainer.
Ejemplos
Los siguientes ejemplos muestran los parámetros clave que se deben pasar a CreateContainerGroup.
Ejemplo 1: Aprovisionamiento estático (disco existente)
ContainerGroupName=test-disk1
SecurityGroupId=sg-bp1daxpbz9lzpvvc****
VSwitchId=vsw-bp1gds63lmlm7ib05****
# Declare the volume
Volume.1.Name=disk-demo
Volume.1.Type=FlexVolume
Volume.1.FlexVolume.Driver=alicloud/disk
Volume.1.FlexVolume.FsType=ext4
Volume.1.FlexVolume.Options={"volumeId":"d-2zebuamrpar7xnj****"}
# Mount the volume to the container
Container.1.Name=nginx
Container.1.Image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2
Container.1.VolumeMount.1.Name=disk-demo
Container.1.VolumeMount.1.MountPath=/data
El disco debe estar en estado Pending y en la misma zona de disponibilidad que la instancia antes de ejecutar esta operación.
Ejemplo 2: Aprovisionamiento dinámico (disco nuevo)
ContainerGroupName=test-disk2
# Declare the volume
Volume.1.Name=disk-demo
Volume.1.Type=FlexVolume
Volume.1.FlexVolume.Driver=alicloud/disk
Volume.1.FlexVolume.FsType=ext4
Volume.1.FlexVolume.Options={"volumeSize":"50","tags":"test:eci"}
# Mount the volume to the container
Container.1.Name=nginx
Container.1.Image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2
Container.1.VolumeMount.1.Name=disk-demo
Container.1.VolumeMount.1.MountPath=/data
Se crea automáticamente un ESSD de 50 GiB cuando se inicia la instancia. De forma predeterminada, el disco se libera junto con la instancia (deleteWithInstance: true).