挂载OSS(非PVC)

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

前提条件

  • 自建Kubernetes集群中已部署VNode。

  • 如果您的Kubernetes集群部署在线下IDC,请确保已打通IDC与阿里云的网络。

注意事项

  • OSS为共享存储,一个OSS可以挂载到多个Pod上。

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

操作步骤

  1. 创建OSS Bucket。

    1. 登录OSS管理控制台

    2. 创建OSS Bucket。

      关于如何创建OSS Bucket,请参见创建存储空间

  2. 选择授权方式。

    • 使用RAM角色授权。

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

      具体操作,请参见创建RAM角色为RAM角色授权

    • (不推荐)使用AccessKey直接授权。

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

  3. 准备YAML。

    将以下内容保存到test-csi-oss.yaml。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: test-csi-oss
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:    
            k8s.aliyun.com/vnode: "true"
          tolerations:     
          - key: k8s.aliyun.com/vnode
            operator: "Equal"
            value: "true"
            effect: "NoSchedule"
          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"
                  ramRole: "<your RAM Role Name>"

    上述示例采用RAM角色来授权。如果您想要使用AccessKey直接授权,请将ramRole: "<your RAM Role Name>"替换为以下YAML:

          akId: "<your AccessKey ID>"
          akSecret: "<your AccessKey Secret>"

    volumeAttributes中需配置OSS相关参数,说明如下:

    参数

    描述

    bucket

    OSS Bucket的名称。

    目前只支持挂载Bucket,不支持挂载Bucket下的子目录或者文件。

    url

    OSS的接入域名(Endpoint)。

    • 挂载节点(即VNode)和Bucket相同地域时,请使用私网地址。

    • 挂载节点(即VNode)和Bucket不同地域时,请使用公网地址。

    otherOpts

    挂载OSS时支持输入定制化参数,格式为-o *** -o ***,例如:-o max_stat_cache_size=0 -o allow_other

    ramRole

    使用RAM角色授权时,对应的RAM角色。

    akId和akSecret

    使用AccessKey直接授权时,对应的AccessKey ID和AccessKey Secret。

  4. 创建ECI Pod并挂载OSS。

    kubectl create -f test-csi-oss.yaml
  5. 查看结果。

    kubectl get pods -o wide

    预期返回:

    NAME                            READY   STATUS    RESTARTS   AGE    IP              NODE                                  NOMINATED NODE   READINESS GATES
    
    test-csi-oss-79d5cd89c9-x24lc   1/1     Running   0          84s    172.16.XX.XXX   cn-beijing.vnd-2zedtmwhcv8kbuou****   <none>           <none>
    test-csi-oss-79d5cd89c9-z5gl2   1/1     Running   0          84s    172.16.XX.XXX   cn-beijing.vnd-2zedtmwhcv8kbuou****   <none>           <none>

    查看Pod中的文件目录,可以看到已生成OSS对应的挂载目录/cache-test,且第一个Pod中写入的文件可以在第二个Pod中查看,即两个Pod共享使用OSS存储。

    OSS存储
阿里云首页 弹性容器实例 相关技术圈