OSS是阿里云提供的一个海量、安全、低成本、高可靠的存储空间,适合存储非结构化数据(例如图片、音视频等)。本文介绍如何在ACK Serverless集群中通过PVC的方式挂载OSS到ECI Pod上。
前提条件
已创建ACK Serverless集群。具体操作,请参见创建集群。
注意事项
OSS为共享存储,一个OSS可以挂载到多个Pod上。
挂载目录中建议存放的文件数不要超过1000个。文件数量过多时,OSSFS会占用大量内存,可能会导致Pod发生OOM(Out Of Memory)事件。
操作步骤
获取OSS Bucket信息。
如果您没有创建OSS Bucket,请先在OSS管理控制台创建OSS Bucket。具体操作,请参见创建存储空间。
登录OSS管理控制台,在左侧导航栏单击Bucket列表。
在Bucket列表页面,单击目标Bucket名称。
在Bucket详情页面,单击概览页签,然后在访问端口区域,复制目标Endpoint。
Bucket和集群属于相同地域时,请复制内网的Endpoint。
Bucket和集群属于不同地域时,请复制外网的Endpoint。
选择授权方式。
方式一:(推荐)使用RAM角色授权。
创建RAM角色并为该角色授权。创建时,选择可信实体类型为阿里云服务,角色类型为普通服务角色,受信服务为云服务器;为角色授权时,选择AliyunOSSFullAccess权限策略。具体操作,请参见创建可信实体为阿里云服务的RAM角色和为RAM角色授权。
方式二:使用AccessKey直接授权。
获取AccessKey ID和AccessKey Secret。具体操作,请参见获取AccessKey。
使用以下内容,创建test-ack-oss.yaml。
说明本文示例以VPC内网环境为例,内网访问需确保实例、镜像仓库、OSS的Endpoint处于同一region(例如北京)。
如果您需要跨Region挂载OSS或拉取镜像,则需要配置公网,同时将image地址或OSS URL更改为相应的公网访问格式,公网访问时需要修改如下代码中的
image
和url
。image
:替换为registry.cn-beijing.aliyuncs.com/eci_open/nginx:1.14.2
。url
:替换为外网访问的Endpoint。
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 persistentVolumeClaim: claimName: oss-pvc --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: oss-pvc namespace: test spec: storageClassName: test accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-oss --- apiVersion: v1 kind: PersistentVolume metadata: name: oss-csi-pv labels: alicloud-pvname: pv-oss spec: storageClassName: test capacity: storage: 5Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain csi: driver: ossplugin.csi.alibabacloud.com volumeHandle: oss-csi-pv 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>"
说明若您需要跨账号挂载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。
执行以下命令,创建ECI Pod并挂载OSS。
kubectl create -f test-ack-oss.yaml
执行以下命令,查看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存储。
相关文档
如需了解OSS存储卷的更多信息,请参见OSS存储卷概述。