Par défaut, le stockage des conteneurs est éphémère : les données écrites dans un conteneur sont perdues lorsque celui-ci redémarre. Le montage d'un volume de disque permet aux données de persister entre les redémarrages. Cette rubrique explique comment monter un disque en tant que volume lors de la création d'une instance de conteneur élastique via l'API CreateContainerGroup.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Une instance de conteneur élastique dans la zone de disponibilité cible
Un disque en paiement à l'utilisation dans la même zone de disponibilité que l'instance (pour le provisionnement statique)
Limitations
Seuls les disques en paiement à l'utilisation peuvent être montés. Consultez la section Facturation du stockage par blocs.
Un disque ne peut être monté que sur une seule instance de conteneur élastique à la fois ; le partage de disques n'est pas possible.
Chaque instance de conteneur élastique prend en charge un maximum de six volumes de disque.
Le disque doit se trouver dans la même zone de disponibilité que l'instance de conteneur élastique. Le montage inter-zones n'est pas pris en charge. Créez le disque dans la zone cible avant de le monter.
Les disques NVMe avec la fonctionnalité de multi-montage activée (disques partagés NVMe) ne peuvent pas être montés.
Les disques comportant des partitions ne peuvent pas être montés. Si vous utilisez un snapshot pour créer le disque et que le disque basé sur ce snapshot contient des partitions, le montage échouera également.
Fonctionnement
Les volumes de disque utilisent le plug-in FlexVolume avec le pilote alicloud/disk. Lorsque vous appelez CreateContainerGroup, vous devez :
Déclarer un volume à l'aide des paramètres
Volume.N.*en spécifiant la source du disque (disque existant ou nouveau disque).Monter le volume déclaré sur un conteneur à l'aide des paramètres
Container.N.VolumeMount.N.*en spécifiant le chemin de montage et le comportement.
Les deux modes de provisionnement diffèrent par la manière dont le disque est approvisionné :
| Mode | Cas d'utilisation | Paramètre clé |
|---|---|---|
| Provisionnement statique | Vous disposez déjà d'un disque à attacher | volumeId dans FlexVolume.Options |
| Provisionnement dynamique | ECI crée un nouveau disque au moment du lancement | volumeSize dans FlexVolume.Options |
Déclarer un volume
Définissez les paramètres Volume.N.* suivants pour déclarer un volume de disque.
| Paramètre | Type | Exemple | Description |
|---|---|---|---|
Volume.N.Name |
String | disk-demo |
Nom du volume. Il est référencé par Container.N.VolumeMount.N.Name lors du montage. |
Volume.N.Type |
String | FlexVolume |
Définissez cette valeur sur FlexVolume pour utiliser le plug-in FlexVolume. |
Volume.N.FlexVolume.Driver |
String | alicloud/disk |
Définissez cette valeur sur alicloud/disk pour monter un disque Alibaba Cloud. |
Volume.N.FlexVolume.FsType |
String | ext4 |
Type de système de fichiers. Valeurs valides : ext4, ext3, xfs, vfat. Valeur par défaut : ext4. |
Volume.N.FlexVolume.Options |
String | {"volumeId":"d-bp1****"} |
Chaîne JSON contenant la configuration du disque. Consultez les sections suivantes pour connaître les clés disponibles. |
Provisionnement statique — utiliser un disque existant
Indiquez volumeId dans FlexVolume.Options pour attacher un disque existant. Le disque doit être à l'état Pending et se trouver dans la même zone de disponibilité que l'instance. Lorsque volumeId est spécifié, tous les autres paramètres d'attribut de disque (volumeSize, performanceLevel, etc.) sont ignorés. Si vous ne spécifiez pas volumeId, vous devez spécifier volumeSize.
| Clé d'option | Description |
|---|---|
volumeId |
ID du disque à attacher. |
Provisionnement dynamique — créer un nouveau disque
Omettez volumeId et fournissez volumeSize pour qu'ECI crée un nouveau disque au moment du lancement. Le système utilise automatiquement un SSD amélioré (ESSD) ; vous ne pouvez pas spécifier la catégorie de disque.
| Clé d'option | Requis | Description |
|---|---|---|
volumeSize |
Oui | Taille du disque en GiB. Valeurs valides : 20–32768. Si vous spécifiez également snapshotId, la taille réelle du disque correspond à la valeur la plus élevée entre volumeSize et la taille du disque basé sur le snapshot. |
performanceLevel |
Non | Niveau de performance (PL) de l'ESSD. Consultez la section Disques ESSD. |
deleteWithInstance |
Non | Indique si le disque doit être libéré lors de la libération de l'instance. Valeur par défaut : true. |
encrypted |
Non | Indique si le disque doit être chiffré. Valeur par défaut : false. Consultez la section Présentation du chiffrement. |
kmsKeyId |
Non | ID de la clé Key Management Service (KMS) utilisée pour le chiffrement du disque. |
snapshotId |
Non | ID du snapshot à utiliser lors de la création du disque. Consultez la section Présentation. |
tags |
Non | Tags à associer au disque. Jusqu'à 20 tags. Format : "tagkey1:tagvalue1,tagkey2:tagvalue2". |
Monter un volume sur un conteneur
Après avoir déclaré un volume, utilisez les paramètres Container.N.VolumeMount.N.* pour le monter sur un conteneur.
| Paramètre | Type | Exemple | Description |
|---|---|---|---|
Container.N.VolumeMount.N.Name |
String | disk-demo |
Nom du volume à monter. Doit correspondre à une valeur Volume.N.Name. |
Container.N.VolumeMount.N.MountPath |
String | /data |
Chemin d'accès à l'intérieur du conteneur où le volume est monté. Les données existantes à cet emplacement sont masquées par le volume. |
Container.N.VolumeMount.N.SubPath |
String | /logs |
Sous-répertoire du volume à monter. Utilisez cette option pour monter différents sous-répertoires du même volume sur différents conteneurs. |
Container.N.VolumeMount.N.ReadOnly |
Boolean | false |
Indique si le chemin de montage est en lecture seule. Valeur par défaut : false. |
Container.N.VolumeMount.N.MountPropagation |
String | None |
Contrôle le partage des montages entre les conteneurs et l'hôte. Valeur par défaut : None. Consultez le tableau suivant. |
Modes de propagation du montage
| Valeur | Ce que voit le conteneur | Ce que voit l'hôte |
|---|---|---|
None |
Uniquement les montages présents au moment de l'attachement ; les montages ultérieurs sur ce volume ou ses sous-répertoires ne sont pas visibles. | Aucun montage créé à l'intérieur du conteneur n'est visible sur l'hôte. |
HostToContainer |
Tous les montages ultérieurs effectués sur ce volume ou ses sous-répertoires sur l'hôte sont visibles à l'intérieur du conteneur. | Aucun montage créé à l'intérieur du conteneur n'est visible sur l'hôte. |
Bidirectional |
Tous les montages ultérieurs effectués sur ce volume ou ses sous-répertoires sur l'hôte sont visibles à l'intérieur du conteneur. | Tous les montages créés à l'intérieur du conteneur sont propagés vers l'hôte et vers tous les conteneurs de toutes les instances de conteneur élastique qui utilisent le même volume. |
Pour monter des volumes sur des conteneurs d'initialisation, utilisez les mêmes paramètres en remplaçantContainerparInitContainer.
Exemples
Les exemples suivants présentent les paramètres clés à transmettre à CreateContainerGroup.
Exemple 1 : Provisionnement statique (disque existant)
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
Le disque doit être à l'état Pending et se trouver dans la même zone de disponibilité que l'instance avant d'exécuter cette opération.
Exemple 2 : Provisionnement dynamique (nouveau disque)
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
Un SSD amélioré (ESSD) de 50 GiB est créé automatiquement au lancement de l'instance. Par défaut, le disque est libéré avec l'instance (deleteWithInstance: true).