Secara default, penyimpanan kontainer bersifat sementara—data yang ditulis di dalam kontainer akan hilang ketika kontainer dimulai ulang. Memasang volume disk memungkinkan data tetap tersimpan meskipun terjadi restart. Topik ini menjelaskan cara memasang disk sebagai volume saat membuat instans Elastic Container Instance (ECI) melalui API CreateContainerGroup.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Instans Elastic Container Instance (ECI) di zona ketersediaan target
Disk pay-as-you-go di zona ketersediaan yang sama dengan instans (untuk provisioning statis)
Batasan
Hanya disk pay-as-you-go yang dapat dipasang. Lihat Penagihan block storage.
Satu disk hanya dapat dipasang ke satu instans Elastic Container Instance (ECI) pada satu waktu—disk tidak dapat dibagikan.
Setiap instans Elastic Container Instance (ECI) mendukung maksimal enam volume disk.
Disk harus berada di zona ketersediaan yang sama dengan instans Elastic Container Instance (ECI). Pemasangan lintas zona tidak didukung. Buat disk di zona target sebelum memasangnya.
Disk NVMe yang memiliki fitur multi-mount diaktifkan (NVMe shared disks) tidak dapat dipasang.
Disk yang memiliki partisi tidak dapat dipasang. Jika Anda menggunakan snapshot untuk membuat disk dan disk berbasis snapshot tersebut memiliki partisi, maka disk tersebut juga tidak dapat dipasang.
Cara kerja
Volume disk menggunakan Plugin FlexVolume dengan driver alicloud/disk. Saat Anda memanggil CreateContainerGroup, Anda:
Mendeklarasikan volume menggunakan parameter
Volume.N.*—menentukan sumber disk (disk yang sudah ada atau disk baru).Memasang volume yang dideklarasikan ke kontainer menggunakan parameter
Container.N.VolumeMount.N.*—menentukan path pemasangan dan perilakunya.
Kedua mode provisioning berbeda dalam cara disk disediakan:
| Mode | Kapan digunakan | Parameter utama |
|---|---|---|
| Static provisioning | Anda sudah memiliki disk yang akan disambungkan | volumeId dalam FlexVolume.Options |
| Dynamic provisioning | ECI membuat disk baru saat launch | volumeSize dalam FlexVolume.Options |
Deklarasi volume
Tetapkan parameter Volume.N.* berikut untuk mendeklarasikan volume disk.
| Parameter | Tipe | Contoh | Deskripsi |
|---|---|---|---|
Volume.N.Name | String | disk-demo | Nama volume. Dirujuk oleh Container.N.VolumeMount.N.Name saat pemasangan. |
Volume.N.Type | String | FlexVolume | Tetapkan ke FlexVolume untuk menggunakan Plugin FlexVolume. |
Volume.N.FlexVolume.Driver | String | alicloud/disk | Tetapkan ke alicloud/disk untuk memasang disk Alibaba Cloud. |
Volume.N.FlexVolume.FsType | String | ext4 | Jenis sistem file. Nilai yang valid: ext4, ext3, xfs, vfat. Default: ext4. |
Volume.N.FlexVolume.Options | String | {"volumeId":"d-bp1****"} | String JSON yang berisi konfigurasi disk. Lihat bagian berikut untuk kunci yang tersedia. |
Static provisioning — gunakan disk yang sudah ada
Sediakan volumeId dalam FlexVolume.Options untuk menyambungkan disk yang sudah ada. Disk harus berada dalam status Pending dan berada di zona ketersediaan yang sama dengan instans. Ketika volumeId ditentukan, semua parameter atribut disk lainnya (volumeSize, performanceLevel, dan sebagainya) diabaikan. Jika Anda tidak menentukan volumeId, Anda harus menentukan volumeSize.
| Option key | Deskripsi |
|---|---|
volumeId | ID disk yang akan disambungkan. |
Dynamic provisioning — buat disk baru
Abaikan volumeId dan sediakan volumeSize agar ECI membuat disk baru saat launch. Sistem secara otomatis menggunakan enhanced SSD (ESSD)—Anda tidak dapat menentukan kategori disk.
| Option key | Wajib | Deskripsi |
|---|---|---|
volumeSize | Ya | Ukuran disk dalam GiB. Nilai yang valid: 20–32768. Jika Anda juga menentukan snapshotId, ukuran disk aktual adalah nilai terbesar antara volumeSize dan ukuran disk berbasis snapshot. |
performanceLevel | Tidak | Tingkat kinerja (PL) ESSD. Lihat ESSDs. |
deleteWithInstance | Tidak | Apakah disk dilepas saat instans dilepas. Default: true. |
encrypted | Tidak | Apakah disk dienkripsi. Default: false. Lihat Ikhtisar enkripsi. |
kmsKeyId | Tidak | ID kunci Key Management Service (KMS) yang digunakan untuk enkripsi disk. |
snapshotId | Tidak | ID snapshot yang digunakan saat membuat disk. Lihat Ikhtisar. |
tags | Tidak | Tag yang dilampirkan ke disk. Maksimal 20 tag. Format: "tagkey1:tagvalue1,tagkey2:tagvalue2". |
Memasang volume ke kontainer
Setelah mendeklarasikan volume, gunakan parameter Container.N.VolumeMount.N.* untuk memasangnya ke kontainer.
| Parameter | Tipe | Contoh | Deskripsi |
|---|---|---|---|
Container.N.VolumeMount.N.Name | String | disk-demo | Nama volume yang akan dipasang. Harus sesuai dengan nilai Volume.N.Name. |
Container.N.VolumeMount.N.MountPath | String | /data | Path di dalam kontainer tempat volume dipasang. Data yang sudah ada di path ini akan disembunyikan oleh volume. |
Container.N.VolumeMount.N.SubPath | String | /logs | Subdirektori dari volume yang akan dipasang. Gunakan ini untuk memasang subdirektori berbeda dari volume yang sama ke kontainer yang berbeda. |
Container.N.VolumeMount.N.ReadOnly | Boolean | false | Apakah path pemasangan bersifat read-only. Default: false. |
Container.N.VolumeMount.N.MountPropagation | String | None | Mengontrol apakah pemasangan dibagikan antara kontainer dan host. Default: None. Lihat tabel berikut. |
Mode propagasi mount
| Nilai | Yang dilihat kontainer | Yang dilihat host |
|---|---|---|
None | Hanya pemasangan yang ada saat penyambungan—pemasangan selanjutnya ke volume ini atau subdirektorinya tidak terlihat. | Pemasangan yang dibuat di dalam kontainer tidak terlihat di host. |
HostToContainer | Semua pemasangan selanjutnya yang dilakukan ke volume ini atau subdirektorinya di host terlihat di dalam kontainer. | Pemasangan yang dibuat di dalam kontainer tidak terlihat di host. |
Bidirectional | Semua pemasangan selanjutnya yang dilakukan ke volume ini atau subdirektorinya di host terlihat di dalam kontainer. | Semua pemasangan yang dibuat di dalam kontainer dipropagasikan kembali ke host dan ke semua kontainer dari semua instans Elastic Container Instance (ECI) yang menggunakan volume yang sama. |
Untuk memasang volume ke init container, gunakan parameter yang sama denganInitContainermenggantikanContainer.
Contoh
Contoh berikut menunjukkan parameter utama yang perlu diteruskan ke CreateContainerGroup.
Contoh 1: Static provisioning (disk yang sudah ada)
ContainerGroupName=test-disk1
SecurityGroupId=sg-bp1daxpbz9lzpvvc****
VSwitchId=vsw-bp1gds63lmlm7ib05****
# Deklarasi 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****"}
# Pasang volume ke kontainer
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=/dataDisk harus berada dalam status Pending dan berada di zona ketersediaan yang sama dengan instans sebelum menjalankan operasi ini.
Contoh 2: Dynamic provisioning (disk baru)
ContainerGroupName=test-disk2
# Deklarasi 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"}
# Pasang volume ke kontainer
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=/dataDisk ESSD berukuran 50 GiB dibuat secara otomatis saat instans diluncurkan. Disk dilepas bersama instans secara default (deleteWithInstance: true).