在Kubernetes上安装Alluxio

本文档展示了如何通过 Operator(Kubernetes 管理应用程序的扩展)在 Kubernetes 上安装 Alluxio。

系统要求

  • Kubernetes

    • 至少1.19版本的 Kubernetes 集群,支持特性门控

    • 确保集群的 Kubernetes 网络策略允许应用程序(Alluxio 客户端)与定义端口上的 Alluxio Pods 之间建立连接

    • Kubernetes 集群已安装至少3.6.0版本的 Helm 3

    • 用于存储和管理容器镜像的镜像仓库

  • 硬件

    • 每个节点至少 8个 CPU 和 32GB 内存

    • 每个节点至少100GB 的存储空间

  • 权限。参考:使用 RBAC 授权

    • 创建 CRD(自定义资源定义)的权限

    • 为 Operator Pod 创建 ServiceAccount、ClusterRole 和 ClusterRoleBinding 的权限

    • 创建 operator 所在命名空间的权限

准备

下载 Alluxio operator 和 Alluxio 集群的安装包

联系您的 Alluxio 客户经理(邮箱:[email protected]),获取 Alluxio Enterprise DA 的试用版本。按照说明将文件下载到准备好的目录中。

获取下列文件:

  • alluxio-operator-3.0.2-helmchart.tgz 用于部署 Alluxio operator 的 Helm chart

  • alluxio-operator-3.0.2-docker.tar包含所有 Alluxio operator 组件的 Docker 镜像

  • alluxio-enterprise-DA-3.5-10.2.0-docker.tarAlluxio 的 Docker 镜像

  • alluxio-enterprise-DA-3.5-10.2.0-release.tar.gz包含与特定计算集成的 JAR 文件的压缩包,使计算能够连接到 Alluxio 集群。 该文件不会在本文档说明中使用,但在准备计算集群时需要确保其可用。

此外,还需获取后续章节提到的名为 <ALLUXIO_LICENSE_STRING>的许可证字符串。

将镜像上传到镜像仓库

镜像仓库是存储和共享容器镜像的中心化位置。镜像仓库可以是公共的,也可以是私有的。云服务厂商会提供容器镜像仓库服务作为其云服务的一部分, 包括

Amazon Elastic Container Registry(ECR),Azure Container Registry (ACR),Google Container Registry (GCR)。 您甚至可以在本地系统或组织内部运行私有镜像仓库。

以下示例展示了如何上传 Alluxio operator 镜像。

为 operator 解压 Helm chart

解压后的alluxio-operator 目录包含用于部署 operator 的 Helm chart 文件。

部署

部署 Alluxio operator

创建 alluxio-operator/alluxio-operator.yaml 文件,以指定用于部署 operator 的镜像和版本。 以下示例演示了如何指定 operatorcsi 镜像及其版本:

进入到 alluxio-operator 目录,执行以下命令来部署 operator:

部署 Alluxio

创建alluxio-operator/alluxio-cluster.yaml, 用于部署 Alluxio 集群。下面的文件展示了最简配置。

请参阅资源需求和兼容性,获取资源规划建议。 默认情况下,operator 已按照生产部署的推荐配置进行设置。如果您需要修改配置,可以编辑 alluxio-cluster.yaml 文件中的 .spec.properties 字段。常见用例章节描述了修改这些属性的部分场景。

.spec.properties 字段下指定的属性将附加到 alluxio-site.properties 配置文件中,Alluxio 进程将读取该文件。您可以通过查看/opt/alluxio/conf/alluxio-site.properties 来找到您在 Alluxio coordinator或 worker pod 中的配置。

请注意,默认情况下 page store 的缓存目录位于宿主机的 /mnt/alluxio/pagestore 路径下。缓存的大小可以通过 .spec.pagestore.size 属性设置。保留空间的大小可以通过 .spec.pagestore.reservedSize 属性设置,通常建议将保留空间的大小设置为缓存空间大小的 5% 至 10%。请根据宿主机 的存储设备大小合理设置缓存和预留空间的大小。

  • 如果您的数据存储在 S3 等存储中,并且计算任务可以通过 s3://访问数据,您可以通过在启动 Alluxio 集群后通过创建 UFS 资源, 实现将底层文件系统挂载到 Alluxio 中,从而加速工作负载。

进入到 alluxio-operator目录,执行以下命令来部署 Alluxio 集群:

在 Alluxio 3.x 中,coordinator 是一个无状态的控制组件,用于托管如分布式加载这样的任务,以及作为 operator 调用 API 的 gateway。

如果集群中的有些组件状态无法达到 Running 状态,可以通过kubectl describe pod查看详细信息,找到问题所在。 部署过程中遇到的具体问题, 可以参考常见问题

启动 Alluxio 集群还包括 etcd 和监控组件,如果无法从公共镜像仓库拉取镜像导致 etcd 和监控启动失败, 请参考配置 Alluxio 集群镜像

将底层存储挂载到 Alluxio

Alluxio 支持对接多种底层存储,包括 S3HDFS等。

通过 operator 我们可以通过创建 UnderFileSystem 资源来挂载底层存储。一个 UnderFileSystem 资源对应 Alluxio 中的一个挂载点。 关于 Alluxio 以及底层存储命名空间, 请参考Alluxio 命名空间和底层文件系统命名空间

下面我们提供了将S3作为底层存储挂载的示例。

创建alluxio-operator/ufs.yaml文件来指定UFS配置。下述示例展示如何将一个S3存储桶挂载到Alluxio:

有关将S3挂载到Alluxio的更多详细信息,请参阅 Amazon AWS S3

挂载操作

首先需要确认 Alluxio 集群已经启动,状态为 Ready。(或者状态为 WaitingForReady 也可以挂载 UFS)

在创建 UnderFileSystem 资源后,执行以下命令将底层存储挂载到 Alluxio 命名空间:

监控

部署 Alluxio 集群默认开启监控,通过 Grafana 可以直观地查看 Alluxio 各种指标, 请参考监控和指标中的 Kubernetes Operator 章节。

常见用例

更改资源限制

对于每个组件,如 worker 和 coordinator ,我们都可以通过以下配置更改资源的使用量 :

  • 容器将永远无法访问超过限制的资源,这个请求限制会在调度过程中生效。如需了解更多信息,请参阅 为 Pod 和容器管理资源

  • 内存限制应略大于堆内存(-Xmx)和直接内存(-XX:MaxDirectMemorySize=10g)的大小之和,以避免内存不足。

  • 为便于演示,建议设置较小的资源限制,例如:

将 PVC 用于 page store

这里的 page store 是指Alluxio使用的缓存。

  • PVC 由 operator 创建

  • storageClass 默认设置为standard,但可以指定为空字符串进行静态绑定

  • size 属性设置了缓存空间的大小,reservedSize 属性设置了保留空间的大小。保留空间是用于临时存放数据的内部缓冲空间,建议其大小是缓存空间大小 的 5% 至 10%。最终PVC的总大小是缓存空间和保留空间大小之和。

挂载自定义配置映射

在Pods上可以使用自定义configmap提供配置文件。虽然也可以用于其他用途,例如环境变量,但以下示例重点关注文件。

从本地文件创建一个新的 configmap

声明(declare)配置映射及其挂载点。

  • 键是 ConfigMap 的名称,值是容器中的挂载路径

  • 默认情况下,/opt/alluxio/conf 已被挂载。这意味着其他文件无法直接挂载到 conf/目录内。自定义配置映射需要挂载到其他路径。

    • 以缓存过滤器的json文件为例,将其挂载到 /opt/alluxio/conf/cachefilter/cache_filter.json, 并将此路径设置为 alluxio.user.client.cache.filter.config.file的值,以便Alluxio读取该文件。

将文件作为 Secret 添加至 Pods

该机制可以用于在 Pods 上提供凭证文件。

从本地文件创建一个新的 secret

指定要加载哪些 secret 以及在 Pods 上的文件路径。

使用 root 用户

进程默认使用 uid 为1000的用户。在容器中,用户名为 alluxio。 要将其更改为 root 用户,请使用此配置:

  • 如果文件可由 root 用户组访问,指定 .spec.fsGroup = 0 即可。

  • 如果将挂载主机路径(如页面存储路径和日志路径)的所有权更改为 root 用户,则其所有权将转移到 root。

使用外部 ETCD

如果有外部的 ETCD 集群,可以指定 Alluxio 使用的端点。

当客户端与服务器之间通过 HTTPS 进行安全传输时,SSL/TLS和ETCD的连接会使用证书。因此,请准备好一个已签名的 key pair(client.crt, pkcs8_key_encrypted.pem)和 CA证书(ca.crt)。

注意:pkcs8_key_encrypted.pem 需要是 PKCS8 格式的密钥,可以通过以下命令转换密钥:

注意:如果使用命令 openssl pkcs8 -topk8 -nocrypt -in client.key -out pkcs8_key.pem 生成的未加密key file,无需配置alluxio.etcd.tls.client.key.password

在Kubernetes中使用已创建的ca.crt, client.crtpkcs8_key_encrypted.pem来创建 secret。

alluxio-cluster.yaml文件中配置 etcd 属性,并为 coordinator 和 worker 指定 secret.

在具有不同磁盘规格的节点上部署 Worker

Operator 支持 Worker 的异构配置,特别是配置不同的磁盘规格。 通常,Worker 配置中的不一致可能会导致严重的意外错误,除以下使用场景外,我们不支持其他情况。

  1. 根据磁盘规格对节点进行分类。例如:我们有 10 个 配备1块1TB 磁盘的节点, 以及12 个配备 2 块 800GB 磁盘的节点。

  2. 给节点打 label,对不同的 Worker 组进行唯一标识,每个组的配置需保持一致。

  1. 使用 .workerGroups 列出 Worker 配置,定义通过 nodeSelector 进行过滤的label及其对应的配置。

在运行中的集群中动态更新 Alluxio 配置

  1. 获取 ConfigMap

  1. 编辑 ConfigMap 以更新 Alluxio 配置

ConfigMap 中应包含以下四个文件:alluxio-env.shalluxio-site.propertieslog4j2.xmlmetrics.properties。根据需要进行编辑后,保存 ConfigMap。

  1. 根据需要重启 Alluxio 组件 假设集群名称为 alluxio:

  • coordinator: kubectl rollout restart statefulset alluxio-coordinator

  • worker: kubectl rollout restart deployment alluxio-worker

常见问题

etcd pod 一直处于 Pending 状态

比如三个 etcd pod 一直处于 Pending 状态,可以通过 kubectl describe pod 查看详细信息:

由报错信息可知,etcd Pods 处于 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 集群还包括 etcd 和监控组件。如果无法访问公共镜仓库,则需要从私有镜像仓库拉取这些组件的镜像。

您可以将依赖镜像下载到本地,上传到您的私有镜像仓库,然后修改 alluxio-operator.yaml 文件中的镜像地址,再重新部署 operator。

组件
镜像名
版本
用途

集群 ETCD

docker.io/bitnami/etcd

3.5.9-debian-11-r24

etcd 依赖

集群 ETCD

docker.io/bitnami/os-shell

11-debian-11-r2

os-shell 依赖

集群监控

grafana/grafana

10.4.5

监控仪表盘

集群监控

prom/prometheus

v2.52.0

指标采集

拉取 docker 镜像并且上传到私有镜像仓库的命令如下:

相应地修改 alluxio-operator/alluxio-cluster.yaml 文件中的镜像地址。

Last updated