ECI支持云盘作为数据卷,其采用FlexVolume的方式将阿里云云盘挂载到容器内:FlexVolume.Driver的值设定为:alicloud/disk,标识采用阿里云云盘。

其中数据卷类型为:

  • FlexVolume

OpenAPI直接调用方式

对于openapi方式CreateContainerGroup接口提供了更加灵活的使用云盘作为后端存储的方法:静态&动态。

静态云盘使用场景:

已经购买了云盘实例的情况,希望写入云盘的数据可以在ECI销毁的时候依然保留,如MySql、Redis等,此时可以通过 Options.volumeId参数传入云盘实例ID。

Volume.N.Name=my-disk-volume
Volume.N.Type=FlexVolume
Volume.N.FlexVolume.Driver=alicloud/disk
Volume.N.FlexVolume.FsType=ext4
Volume.N.FlexVolume.Options={"volumeId":"d-2zebuamrpar7xnj****"}

动态云盘使用场景:

ECI实例运行期间对磁盘有较高的IO要求,同时有大量的临时数据需要存放,实例销毁后不需要保存数据,如运行时产生的log文件;可以通过 Options.volumeSize 传入希望随实例一起创建的云盘容量。随实例一起创建云盘同时支持性能等级、加密等参数,详情参考:Options参数说明

Volume.N.Name=my-disk-volume
Volume.N.FlexVolume.Driver=alicloud/disk
Volume.N.FlexVolume.FsType=ext4
Volume.N.FlexVolume.Options={"volumeSize":"200"}
说明 如果给定的云盘未格式化,则系统会自动格式化为 FsType 指定的类型,目前仅支持ext3、ext4、xfs
注意
  • 动态创建的云盘默认随ECI实例一起创建,一起销毁。
  • 当volumeId为空,volumeSize字段为必填,当2个字段都有值,则volumeSize将被忽略
  • 动态创建的云盘默认随ECI实例一起创建,一起销毁。
  • 动态创建的云盘默认采用:ESSD云盘,暂不支持指定云盘种类。
  • 单ECI实例最大支持挂载6块云盘作为数据卷。
  • 同一云盘同一时刻只能挂载在一个ECI/ECS实例中。

示例

  • 通过PythonSDK(版本>=1.0.8)创建应用Mysql,其中数据文件保存在d-2zefzudpm3649e****的云盘中

    from aliyunsdkeci.request.v20180808.CreateContainerGroupRequest import CreateContainerGroupRequest
    request = CreateContainerGroupRequest()
    request.set_SecurityGroupId(secureGroup-xxx)
    request.set_VSwitchId(vSwitch-xxx)
    request.set_ContainerGroupName(name-xxx)
    request.set_EipInstanceId(eip-xxx)
    request.set_RestartPolicy('Always')
    #volumes,第一个为云盘卷,用于保存Mysql数据文件;第二个为ConfigFileVolume,保存配置文件
    volume1 = {
        'Name': 'mysql-data-volume',
        'Type': 'FlexVolume',
        'FlexVolume.Driver': 'alicloud/disk'
        'FlexVolume.FsType': 'ext4',
        'FlexVolume.Options': '{\"volumeId\": \"d-2zefzudpm3649e****\"}',
    }
    #Content需要BASE64编码
    configFileToPath = {
        'Path': 'my.cnf',
        'Content': 'aGVsbG8gd29ybGQ=',
    }
    volume2 = {
        'Name': 'mysql-config-volume',
        'Type': 'ConfigFileVolume',
        'ConfigFileVolume.ConfigFileToPaths': [configFileToPath],
    }
    #安装volume到containerGroup
    request.set_Volumes([volume1, volume2])
    
    #volumeMounts,挂载containerGroup安装的数据卷到容器的目录
    volume_mount1 = {
        'Name': 'mysql-data-volume',
        'MountPath': '/var/lib/mysql',
        'ReadOnly': False,
    }
    volume_mount2 = {
        'Name': 'mysql-config-volume',
        'MountPath': '/etc/mysql/conf.d/',
        'ReadOnly': False,
    }
    #environment variable
    env ={
        'Key': 'MYSQL_ROOT_PASSWORD',
        'Value': '123456',
    }
    #container ports
    port = {
        'Protocol':'TCP',
        'Port': 3306,
    }
    # containers
    container = {
        'Image': 'mysql:5.7',
        'Name': 'mysql',
        'Cpu': 0.5,
        'Memory': 1.0,
        'ImagePullPolicy': 'Always',
        'VolumeMounts': [volume_mount1, volume_mount2],
        'EnvironmentVars': [env],
        'Ports': [port],
    }
    request.set_Containers([container])
    response = eciClient.do_action_with_exception(request)
    print response
    					

virtual kubelet方式

详细请参考:云盘(FlexVolume)。

Options参数说明

名称 类型 必选 示例值 描述
volumeId String d-2zebuamrpar7xnjfc810 已有云盘实例ID。
volumeSize Integer 100 单盘容量(GiB),取值范围为:20~32768。动态创建云盘必填参数。
performanceLevel String PL1 性能等级,参考:云盘性能,动态创建云盘可选参数,默认值:PL1。
deleteWithInstance Boolean false

是否随实例释放,动态创建云盘可选参数,默认值为:true。
encrypted Boolean false 是否加密云盘,动态创建云盘可选参数,默认值:false。

详细请参见:加密云盘

kmsKeyId 2ea91e17-6de6-4b4f-a3ea-0e382cc8199f 云盘使用的KMS密钥ID。动态创建云盘可选参数。