阿里云对象存储服务OSS(Object Storage Service)是阿里云提供的一种分布式、高可靠和低成本的云存储解决方案,适用于存储海量非结构化数据(例如图片、音视频等)。本文介绍如何在ACS集群中通过PVC的方式挂载OSS到ACS Pod上。
前提条件
已创建ACS集群。具体操作,请参见创建ACS集群。
注意事项
OSS为共享存储,一个OSS存储卷可以挂载到多个Pod上。
在使用OSS Bucket作为Kubernetes持久化存储时,如果某个目录下存在大量文件(典型情况下超过1000个),当执行
ls
等readdir
操作读取该目录内容时,会发起大量HTTP请求到OSS获取文件元数据信息。这种情况下,会消耗大量的系统内存资源,可能导致Pod发生内存不足(Out Of Memory)错误而被终止。为了避免上述问题,您可以采取以下两种方式:
挂载OSS Bucket子目录。
将Kubernetes存储卷挂载到OSS Bucket的子目录路径,而不是根目录,这样可以将大量文件分散到不同的子目录中,避免单个目录下文件过多。
对文件目录进行分级存储。
在存储文件时,根据一定规则(如日期、类型等)对文件进行分类。
将不同类别的文件存储在不同的子目录中,避免单个目录中文件过多。
可借助脚本或工具自动实现文件的分级存储。
操作步骤
获取OSS Bucket信息。
如果您没有创建OSS Bucket,请先在OSS管理控制台创建OSS Bucket。具体操作,请参见创建存储空间。
登录OSS管理控制台,在左侧导航栏单击Bucket列表。
在Bucket列表页面,单击目标Bucket名称。
在Bucket详情页面,单击概览页签,然后在访问端口区域,复制目标Endpoint。
Bucket和集群属于相同地域时,请复制内网的Endpoint。
Bucket和集群属于不同地域时,请复制外网的Endpoint。
授权方式。
使用AccessKey直接授权。
说明获取AccessKey ID和AccessKey Secret。具体操作,请参见获取AccessKey。
登录容器计算服务控制台,在左侧导航栏选择集群。在集群列表页面中,单击目标集群右侧操作列下的更多 > 通过CloudShell管理集群。 使用以下内容,创建test-acs-oss.yaml。
说明本文示例以VPC内网环境为例,内网访问需确保实例、OSS的Endpoint处于同一region(例如北京)。
如果您需要跨Region挂载OSS,则需要配置公网,同时将OSS URL更改为相应的公网访问格式,公网访问时需要修改如下代码中的
url
。url
:替换为外网访问的Endpoint。
说明若您需要跨账号挂载OSS,请配置跨账号的AK/SK。
volumeAttributes中需配置OSS相关参数,参数说明如下:
参数
说明
bucket
OSS Bucket的名称。目前只支持挂载Bucket,不支持挂载Bucket下的子目录或者文件。
url
OSS的接入域名(Endpoint),由步骤一获取。
Bucket和集群属于相同地域时,请使用内网地址。
Bucket和集群属于不同地域时,请使用外网地址。
otherOpts
挂载OSS时支持输入定制化参数,格式为-o *** -o ***,例如:-o max_stat_cache_size=0 -o allow_other。
akId
使用AccessKey直接授权时,对应的AccessKey ID。
akSecret
使用AccessKey直接授权时,对应的AccessKey Secret。
执行以下命令,创建ACS Pod并挂载OSS。
kubectl create -f test-acs-oss.yaml
执行以下命令,查看Pod。
kubectl get pods -o wide
预期输出:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-acs-oss-5df67d6465-5cpfp 1/1 Running 0 46s 172.16.XX.XXX virtual-kubelet-cn-****-k <none> <none> test-acs-oss-5df67d6465-mwcs9 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存储卷概述。