在Kubernetes上安装Alluxio
本文档展示了如何通过 Operator(Kubernetes 管理应用程序的扩展)在 Kubernetes 上安装 Alluxio。
准备工作
有关资源规划建议,请参阅资源需求和兼容性。
假定 Kubernetes 集群可访问 Alluxio 和第三方组件所需的容器镜像。
有关如何从提供的 tarball 软件包中提取和上传 Alluxio 镜像的说明,以及在 Kubernetes 集群无法访问公共镜像存储库的情况下需要上传哪些第三方镜像,请参阅 处理镜像。
提取 Operator 的 Helm 图表
将 Operator 的 Helm 图表 tarball 下载到可访问正在运行的 Kubernetes 集群并进行部署的位置。
# 以下命令将会将文件解压缩到 alluxio-operator/ 目录
$ tar zxf alluxio-operator-3.2.1-helmchart.tgz提取出的 alluxio-operator 目录包含用于部署 Operator 的 Helm 图表文件。
部署
部署 Alluxio operator
创建 alluxio-operator/alluxio-operator.yaml 文件指定镜像和版本,用于部署 operator。 以下示例展示了如何指定 operator 镜像和版本:
global:
image: <PRIVATE_REGISTRY>/alluxio-operator
imageTag: 3.2.1进入到 alluxio-operator 目录,执行以下命令部署 operator:
部署 alluxio operator 需要从公共镜像仓库拉取依赖镜像, 如果您因为网络环境无法访问公共镜像仓库导致部署
alluxio-operator失败, 请参考配置 alluxio-operator 镜像。
部署 Alluxio
创建 alluxio-operator/alluxio-cluster.yaml 文件以部署 Alluxio 集群。
以下文件展示了最低配置,建议用于测试场景。
上述提供的最低配置可帮助您快速部署 Alluxio 集群以进行测试和验证。
在预期会有重启的生产环境中,我们建议使用标签(labels)和选择器(selectors)部署 Alluxio 集群,并在PVCs上持久化信息。
选择一组 Kubernetes 节点来运行 Alluxio 集群,并为节点添加相应标签:
以下配置是适用于生产场景的起始模板,其中添加了 nodeSelector 和 metastore 字段。
切换到 alluxio-operator 目录并执行以下命令来部署 Alluxio 集群:
在 Alluxio 3.x 中,Coordinator是无状态的控制组件,充当整个集群的接口,例如处理分布式负载等任务。
如果集群中的某些组件未能进入
Running状态,您可以使用kubectl describe pod命令查看详细信息并定位问题。 针对部署过程中遇到的具体问题,请参考常见问题解答FAQ部分。
Alluxio 集群还包含 etcd 和监控组件。 如果无法从公共镜像仓库拉取镜像导致 etcd 或监控组件启动失败,请参考配置 Alluxio 集群镜像
将存储挂载到Alluxio
Alluxio 支持与多种底层存储系统集成,包括 S3、HDFS、OSS、COS 和 TOS。\
通过使用 Operator,你可以通过创建UnderFileSystem资源来挂载底层存储。
一个UnderFileSystem对应 Alluxio 的一个挂载点。
关于 Alluxio 与底层存储的命名空间关系,请参考 Alluxio 命名空间与底层文件系统命名空间文档。\
创建 alluxio-operator/ufs.yaml 文件,用于指定 UFS 的配置。
以下示例展示了如何将一个 S3 桶挂载到 Alluxio。
关于挂载S3到Alluxio中,请在Amazon AWS S3中寻找更多细节。
执行挂载
首先,请确保 Alluxio 集群已启动运行,并处于 Ready 或 WaitingForReady 状态。
执行以下命令以创建 UnderFileSystem 资源,并将其挂载到 Alluxio 命名空间:
监控
部署 Alluxio 集群默认开启监控,通过 Grafana 可以直观地查看 Alluxio 各种指标, 请参考监控和指标中的 Kubernetes Operator 章节。
数据访问加速
上述步骤中,您部署了 Alluxio 集群,并将底层存储挂载到 Alluxio 中。训练任务通过 Alluxio 读取数据,可以提升训练速度和 GPU 利用率。 Alluxio 提供了3种数据访问方式:
基于FUSE 的 POSIX API: 请参考基于FUSE 的POSIX API.
S3 API: 请参考 S3 API.
FSSpec Python API: 请参考 FSSPEC Python API.
常见问题
etcd pod 一直处于 Pending 状态
比如三个 etcd pod 一直处于 Pending 状态,可以通过 kubectl describe pod 查看详细信息:
根据错误信息可知,etcd Pod 处于 Pending 状态的原因是未设置 storage class。可通过在 alluxio-operator/alluxio-cluster.yaml 文件中指定 etcd 的storage class 来解决。
我们需要先删除 Alluxio 集群, 并且删除 etcd 的 pvc,然后重新创建 Alluxio 集群:
另外一种情况是 etcd pvc 指定了 storage class,但是 etcd pod 和 pvc 依然是 pending 状态。例如下面的 pvc 详细信息中所展示, etcd pvc 指定的 storage class 不支持动态制备,存储卷需要由集群管理员手动创建。
类似的 etcd pod 一直处于 Pending 状态的问题,可以通过上述方法进行排查。
alluxio-cluster-fuse PVC 一直处于 Pending 状态
当我们创建集群之后,发现alluxio-cluster-fuse 一直处于 Pending 状态, 这是正常现象。当 alluxio-cluster-fuse 被业务 pod 使用时,pvc 会自动绑定 pv,pvc 的状态会变为 Bound。
Last updated