在Kubernetes上运行Alluxio
Alluxio可以在Kubernetes上运行。这个指南演示了如何使用Alluxio Github库中的说明来在Kubernetes上运行Alluxio。
基础教程
本教程将介绍Kubernetes上的基本Alluxio安装。
前提条件
- 一个Kubernetes集群 (版本 >= 1.8). Alluxio workers将使用
sizeLimit
参数来限制使用emptyDir
卷的大小。这是Kubernetes 1.8的一个alpha特性。 请确保该功能已启用。 - 一个Alluxio Docker镜像。请参阅用Docker运行Alluxio了解如何构建镜像。该镜像必须可以从运行Alluxio进程的所有Kubernetes主机提取。这可以通过将镜像推送到可访问的Docker注册表来实现,或者将镜像单独推送到所有主机。如果使用私人Docker注册表,请参阅Kubernetes 文档。
克隆Alluxio库
$ git clone https://github.com/Alluxio/alluxio.git
$ cd integration/kubernetes
可以在integration/kubernetes
下找到部署Alluxio所需的Kubernetes说明。
启用短路操作
短路访问使客户端可以直接对worker的内存执行读取和写入操作,而不必经过worker进程。在所有有资格运行Alluxio worker进程的主机上设置一个域套接字来启用这种操作模式。
在主机上,为共享域套接字创建一个目录。
$ mkdir /tmp/domain
$ chmod a+w /tmp/domain
如果不需要或不能设置短路访问,则可以跳过此步骤。要禁用此功能,请根据下面的配置部分中的说明设置属性 alluxio.user.short.circuit.enabled=false
。
默认情况下,如果客户端的 hostname 与 worker 的 hostname 一致,它们之间就会启用短路操作。但是若客户端运行在一个虚拟网络下的容器中,则短路操作不一定会启用。在这种情况下,需要设置以下属性来使用文件系统检查以启用短路操作。如果工作节点的UUID位于客户端文件系统上,短路写操作就可以启用。
alluxio.worker.data.server.domain.socket.as.uuid=true
alluxio.worker.data.server.domain.socket.address=/path/to/domain/socket/directory
提供持久性卷
Alluxio master可以配置为使用持久性卷来存储日志。一旦使用,在master进程的重启之间该卷将被持久化。
从模板创建持久性卷。访问模式ReadWriteMany
用于允许多个Alluxio master节点访问共享卷。
$ cp alluxio-journal-volume.yaml.template alluxio-journal-volume.yaml
注意:提供的说明是使用hostPath
卷在单节点部署上进行演示。对于多节点集群,可以选择使用NFS,AWSElasticBlockStore,GCEPersistentDisk或其他可用的持久性卷插件。
创建持久性卷。
$ kubectl create -f alluxio-journal-volume.yaml
配置Alluxio属性
Kubernetes中的Alluxio容器使用环境变量来设置Alluxio属性。有关conf/alluxio-site.properties
中的Alluxio属性的相应环境变量名称,请参阅用Docker运行Alluxio。
在一个文件中定义所有的环境变量。复制integration/kubernetes/conf
中的属性模板,并根据需要修改或添加配置属性。 请注意,在与主机联网运行Alluxio时,分配给Alluxio服务的端口不能事先被占用。
$ cp conf/alluxio.properties.template conf/alluxio.properties
创建一个ConfigMap。
$ kubectl create configmap alluxio-config --from-env-file=ALLUXIO_CONFIG=conf/alluxio.properties
部署
从模板准备Alluxio部署。 修改所需的参数,例如Docker映像的位置,以及Pod的CPU和内存要求。
$ cp alluxio-master.yaml.template alluxio-master.yaml
$ cp alluxio-worker.yaml.template alluxio-worker.yaml
一旦所有的前提条件和配置已经建立,部署Alluxio。
$ kubectl create -f alluxio-master.yaml
$ kubectl create -f alluxio-worker.yaml
验证Alluxio部署的状态。
$ kubectl get pods
如果为Alluxio master使用持久卷,卷的状态应该变为 CLAIMED
。
$ kubectl get pv alluxio-journal-volume
验证
准备就绪后,从master pod 访问Alluxio CLI并运行基本的I/O测试。
$ kubectl exec -ti alluxio-master-0 /bin/bash
从master pod执行以下操作:
$ cd /opt/alluxio
$ ./bin/alluxio runTests
卸载
卸载Alluxio:
$ kubectl delete -f alluxio-worker.yaml
$ kubectl delete -f alluxio-master.yaml
$ kubectl delete configmaps alluxio-config
执行以下命令来清理储存Alluxio journal数据的持久化卷。注意:Alluxio的元数据会丢失!
$ kubectl delete -f alluxio-journal-volume.yaml