高级配置:服务存储挂载

本文为您介绍OSS、NAS、Git代码仓库、Docker镜像和EmptyDir四种形式的存储挂载,帮助您灵活选择挂载的存储类型。

背景信息

当前EAS支持四种形式的存储挂载:OSS、NAS、Git代码仓库、Docker镜像和EmptyDir。在服务运行时将指定的存储路径挂载到服务的实例中,用户可根据场景需求灵活选择挂载的存储类型,也支持多种存储类型同时挂载。挂载方式是在服务的配置文件中增加storage字段,用于指定存储类型、存储源地址和目标挂载目录等信息。

OSS挂载

OSS挂载需要用户在EAS控制台EAS进行一键授权,授权EAS读取用户的OSS目录,详情请参见开通并授权依赖的阿里云产品

  • 配置文件如下所示。

    {
      "name": "service_name",
      "storage": [
            {
                "mount_path": "/data_oss",
                "oss": {
                    "endpoint": "oss-cn-shanghai-internal.aliyuncs.com",
                    "path": "oss://bucket/path/"
                }
            }
        ]
    }
  • 参数说明。

    参数名

    含义

    mount_path

    挂载服务实例中的目标路径。

    oss.endpoint

    OSSEndpoint地址,仅支持同区域内网地址挂载,需使用-internal地址的OSS Endpoint。

    oss.path

    OSS的源地址路径,需以oss://开头。

说明

OSS挂载仅支持专属资源组服务,公共资源组暂时不支持。

NFS挂载

NFS挂载仅支持同地域内网地址挂载,可以使用内网NAS地址,且需要打通到NAS所在vSwitch的直连网络,资源组中网络打通请参见配置网络连通

  • 配置文件如下所示。

    {
        "name": "service_name",
        "storage": [
            {
                "mount_path": "/data_nas",
                "nfs": {
                    "path": "/",
                    "readOnly": false,
                    "server": "xxx.cn-shanghai.nas.aliyuncs.com"
                }
            }
        ]
    }
                            
  • 参数说明。

    参数名

    含义

    mount_path

    挂载服务实例中的目标路径。

    nfs.path

    需要挂载的NAS中的源路径。

    nfs.readOnly

    是否以只读的方式挂载。

    nfs.server

    NAS挂载点的地址。

Git代码仓库挂载

Git代码仓库挂载可以将一个Git仓库中的代码以只读的方式直接挂载到服务实例中,在实例启动阶段会对代码进行拉取。目前不会实时同步最新代码,如果代码仓库中的代码发生变更,需要重启服务实例才能生效。

  • 配置文件如下所示。

    {
      "name": "service_name",
      "storage": [
        {
          "mount_path": "/data_git",
          "git": {
            "repo": "https://codeup.aliyun.com/xxx/eas/aitest.git",
            "username": "username",
            "password": "password or access token"
          }
        }
      ]
    }
  • 参数说明。

    参数名

    是否必选

    含义

    mount_path

    挂载服务实例中的目标路径。

    git.repo

    需要挂载的Git仓库的HTTPS地址。暂不支持Git协议。

    git.username

    私有Git仓库的登录用户名。

    git.password

    私有Git仓库的登录密码。

    git.branch

    需要拉取的Git仓库的分支,默认为master。

    git.commit

    需要拉取的Git仓库的commit ID。

镜像挂载

Docker Image的方式挂载并非直接将镜像中的目录直接挂载到服务实例中,而是通过Shared Volume先将要挂载的镜像中的指定目录中的文件拷贝至本地Shared Volume中,在服务运行时挂载本地的Shared Volume,因此当要挂载的目录中数据量较大时,会消耗较多的本地存储,且会使服务实例启动时间加长,请根据需要来使用该功能。

  • {
        "name": "service_name",
        "storage": [
            {
                "image": {
                    "image": "registry-vpc.cn-shanghai.aliyuncs.com/eas/test_image:v1",
                    "path": "/path/to/mount/"
                },
                "mount_path": "/data_image"
            }
        ]
    }
    说明

    仅支持同区域内网地址挂载,如要挂载的镜像是private的时,需通过dockerAuth参数来指定镜像仓库的鉴权信息。镜像部署中关于dockerAuth参数的使用说明,请参见服务部署:自定义镜像

  • 参数说明。

    参数名

    含义

    mount_path

    挂载服务实例中的目标路径。

    image.image

    需要挂载的内网镜像仓库地址。

    image.path

    需要挂载到服务实例中的镜像中的路径。

EmptyDir挂载

如果您希望实例运行时读写本地磁盘目录,且实例异常重启后写入的内容不会丢失,则可以使用EmptyDir的存储挂载方式。

  • 配置文件如下所示。

    {
        "name": "service_name",
        "storage": [
            {
                "empty_dir": {},
                "mount_path": "/data_image"
            }
        ]
    }
  • 参数说明。

    参数名

    含义

    mount_path

    挂载服务实例中的目标路径。

    empty_dir

    表示类型为EmptyDir、值为空的Map。暂不支持其他属性的配置。

配置共享内存

您可以使用以下配置文件来配置共享内存。

{
    "name": "service_name",
    "storage": [
        {
            "empty_dir": {
              "medium": "memory",
              "size_limit": 20
            },
            "mount_path": "/dev/shm"
        }
    ]
}

其中:

  • medium:指定为memory

  • mount_path:指定为/dev/shm

  • size_limit:用来限制内存上限,单位为GB。

完整配置示例

OSS、NFS、Git代码仓库、镜像及EmptyDir挂载,完整配置示例如下所示。

{
    "name": "service_name",
    "model_path": "http://path/to/model",
    "processor": "pmml",
    "storage": [
        {
            "mount_path": "/data_oss1",
            "oss": {
                "endpoint": "oss-cn-shanghai-internal.aliyuncs.com",
                "path": "oss://bucket1/path/"
            }
        },
        {
            "mount_path": "/data_oss2",
            "oss": {
                "endpoint": "oss-cn-shanghai-internal.aliyuncs.com",
                "path": "oss://bucket2/path/"
            }
        },
        {
            "mount_path": "/data_nfs1",
            "nfs": {
                "path": "/",
                "readOnly": false,
                "server": "xxx.cn-shanghai.nas.aliyuncs.com"
            }
        },
        {
            "mount_path": "/data_nfs2",
            "nfs": {
                "path": "/",
                "readOnly": true,
                "server": "yyy.cn-shanghai.nas.aliyuncs.com"
            }
        },
        {
            "image": {
                "image": "registry-vpc.cn-shanghai.aliyuncs.com/eas/test_image:v1",
                "path": "/path/to/mount/"
            },
            "mount_path": "/data_image"
        },
        {
            "empty_dir": {
              "medium": "memory",
              "size_limit": 20
            },
            "mount_path": "/dev/shm"
        },
        {
            "mount_path": "/data_git",
            "git": {
                "repo": "https://codeup.aliyun.com/xxx/eas/aitest.git",
                "username": "username",
                "password": "password or access token"
            }
         }
    ],
    "metadata": {
        "cpu": 1,
        "instance": 1,
        "resource": "eas-r-xxx"
    }
}