OSS是阿里云提供的一个海量、安全、低成本、高可靠的存储空间,适合存储非结构化数据(如图片、音视频等)。在ASK集群中挂载OSS到ECI Pod时,您可以通过PVC或非PVC的方式。本文介绍如何使用非PVC方式,挂载OSS到ECI Pod上。

前提条件

已创建ASK集群。具体操作,请参见创建ASK集群

注意事项

  • OSS为共享存储,一个OSS可以挂载到多个Pod上。
  • 挂载目录中建议存放的文件数不要超过1000个。文件数量过多时,OSSFS会占用大量内存,可能会导致Pod发生OOM(Out Of Memory)事件。

操作步骤

  1. 获取OSS Bucket信息。
    如果您没有创建OSS Bucket,请先在OSS管理控制台创建OSS Bucket。具体操作,请参见创建存储空间
    1. 登录OSS管理控制台,在左侧导航栏单击Bucket列表
    2. Bucket列表页面,单击目标Bucket名称。
    3. 在Bucket详情页面,单击概览页签,然后在访问端口区域,复制目标Endpoint。
      • Bucket和集群属于相同地域时,请复制内网的Endpoint。
      • Bucket和集群属于不同地域时,请复制外网的Endpoint。
  2. 选择授权方式。
    • 方式一:(推荐)使用RAM角色授权。

      创建RAM角色并为该角色授权。创建时,选择可信实体类型为阿里云服务,角色类型为普通服务角色,受信服务为云服务器;为角色授权时,选择AliyunOSSFullAccess权限策略。具体操作,请参见创建可信实体为阿里云服务的RAM角色为RAM角色授权

    • 方式二:使用AccessKey直接授权。

      获取AccessKey ID和AccessKey Secret。具体操作,请参见获取AccessKey

  3. 使用以下内容,创建test-ack-oss.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test-ack-oss
      labels:
        alibabacloud.com/eci: "true"
    spec:
      replicas: 2
      selector:
        matchLabels:
          alibabacloud.com/eci: "true"
      template:
        metadata:
          labels:
            alibabacloud.com/eci: "true"
        spec:
          containers:
          - name: nginx
            image: registry-vpc.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
            ports:
            - containerPort: 80
            volumeMounts:
              - name: cache-volume
                mountPath: /cache-test
          volumes:
            - name: cache-volume
              csi:
                driver: ossplugin.csi.alibabacloud.com
                fsType: fuse
                volumeAttributes:
                  bucket: "oss-test"
                  url: "oss-cn-beijing-internal.aliyuncs.com"
                  otherOpts: "-o max_stat_cache_size=0 -o allow_other -o connect_timeout=5 -o readwrite_timeout=5"
                  ramRole: "<your RAM Role Name>"
    上述示例采用RAM角色来授权。如果您想要使用AccessKey直接授权,请将ramRole: "<your RAM Role Name>"替换为以下YAML:
          akId: "<your AccessKey ID>"
          akSecret: "<your AccessKey Secret>"
    说明 若您需要跨账号挂载OSS,请配置跨账号的AK/SK。
    volumeAttributes中需配置OSS相关参数,参数说明如下:
    参数 说明
    bucket OSS Bucket的名称。目前只支持挂载Bucket,不支持挂载Bucket下的子目录或者文件。
    url OSS的接入域名(Endpoint),由步骤1获取。
    • Bucket和集群属于相同地域时,请使用内网地址。
    • Bucket和集群属于不同地域时,请使用外网地址。
    otherOpts 挂载OSS时支持输入定制化参数,格式为-o *** -o ***,例如:-o max_stat_cache_size=0 -o allow_other
    ramRole 使用RAM角色授权时,对应的RAM角色。
    akId 使用AccessKey直接授权时,对应的AccessKey ID。
    akSecret 使用AccessKey直接授权时,对应的AccessKey Secret。
  4. 执行以下命令,创建ECI Pod并挂载OSS。
    kubectl create -f test-ack-oss.yaml
  5. 执行以下命令,查看Pod。
    kubectl get pods -o wide
    预期输出:
    NAME                              READY   STATUS    RESTARTS   AGE     IP              NODE                           NOMINATED NODE   READINESS GATES
    test-ack-oss-655db9d64d-5q7d9     1/1     Running   0          46s     172.16.XX.XXX   virtual-kubelet-cn-****-k   <none>           <none>
    test-ack-oss-655db9d64d-m5vct     1/1     Running   0          46s     172.16.XX.XXX   virtual-kubelet-cn-****-k   <none>           <none>
    查看Pod中的文件目录,可以看到已生成OSS对应的挂载目录/cache-test,且第一个Pod中写入的文件可以在第二个Pod中查看,即两个Pod共享使用OSS存储。查看Pod