使用自签名 TLS 将 Dremio 连接到 MinIO

Connect Dremio to MinIO with Self-Signed TLS

Dremio 是一个开源的分布式分析引擎,为数据探索、转换和协作提供了简单、自助式的界面。Dremio 的架构建立在 Apache Arrow 之上,Apache Arrow 是一种高性能的列式内存格式,并利用 Parquet 文件格式进行高效存储。有关 Dremio 的更多信息,请参见 Dremio 入门

MinIO 是一款为云原生应用程序设计的,高性能的分布式对象存储系统。它将可扩展性和高性能相结合,使各种工作负载(无论多么苛刻)都触手可及。一个 最近的基准测试 在仅使用 32 个节点的现成 NVMe SSD 上,在 GET 操作中获得了 325 GiB/s(349 GB/s)的性能,在 PUT 操作中获得了 165 GiB/s(177 GB/s)的性能。

在本教程中,我们将向您展示如何将 Dremio 配置为连接到 MinIO,该 MinIO 使用自签名 TLS 证书。这是一种更常见的使用场景,我们已经收到来自 SUBNET 的客户反复询问如何配置类似的内容。

MinIO 和 Dremio

让我们使用以下配置创建一个 kind 集群

kind: Cluster

apiVersion: kind.x-k8s.io/v1alpha4

nodes

  - role: control-plane

  - role: worker

  - role: worker

  - role: worker

  - role: worker

kind create cluster --config kind-config.yml

将 MinIO 运算符部署到我们上面创建的 kind 集群中。

kubectl minio init

创建一个 MinIO 租户,以便我们可以为 Demio 创建一个存储桶。

kubectl create ns tenant-ns

kubectl minio tenant create tenant-1 --servers 4 --volumes 4 --capacity 4Gi --namespace tenant-ns

获取 MinIO 租户凭据并将其记下。

kubectl get secrets/tenant-1-user-1 -n tenant-ns -oyaml | yq '.data."CONSOLE_ACCESS_KEY"' | base64 -d

kubectl get secrets/tenant-1-user-1 -n tenant-ns -oyaml | yq '.data."CONSOLE_SECRET_KEY"' | base64 -d

将端口转发到租户的 minio 服务,以便我们可以在接下来的步骤中使用 mc 访问它。

kubectl port-forward svc/minio -n tenant-ns 9443:443

为租户创建一个别名,并为 Dremio 创建一个用于测试的示例存储桶。

mc alias set myminio https://localhost:9443/ WZaBqLMGYViJ0Sba XMPAlfUUM4rnaAnGTxPKzeYYcBiRlUVr --insecure

mc mb myminio/openlake --insecure

克隆 openlakedremio github 代码库。

git clone https://github.com/minio/openlake

git clone https://github.com/dremio/dremio-cloud-tools

复制 MinIO helm 值 YAML 并按如下所示更新它们。

cp ~/openlake/dremio/charts/values.minio.yaml ~/dremio-cloud-tools/charts/dremio_v2/

distStorage

  type: "aws"


  aws

bucketName: "openlake"

path: "/dremio"

authentication: "accessKeySecret"

credentials:

  accessKey: "9RW081BM1STLAWQHXS07"

  secret: "L2GCeGRpHUbaQwrCEcW7tnmExuhmUkYN4c2ly49E"


extraProperties: |

  <property>

    <name>fs.s3a.endpoint</name>

    <value>minio.tenant-ns.svc.cluster.local</value>

  </property>

  <property>

    <name>fs.s3a.path.style.access</name>

    <value>true</value>

  </property>

  <property>

    <name>dremio.s3.compat</name>

    <value>true</value>

  </property>

更新 dremio helm 模板以禁用证书检查。请注意,需要更新多个文件。

dremio_v2/templates/dremio-coordinator.yaml

    - name: DREMIO_JAVA_SERVER_EXTRA_OPTS

       value: >-

         {{- include "dremio.coordinator.extraStartParams" $ | nindent 12 -}}

         -Dzookeeper=zk-hs:2181

         -Dservices.coordinator.enabled=true

         -Dservices.coordinator.master.enabled=false

         -Dservices.coordinator.master.embedded-zookeeper.enabled=false

         -Dservices.executor.enabled=false

         -Dservices.conduit.port=45679

         -Dcom.amazonaws.sdk.disableCertChecking=true

dremio_v2/templates/dremio-executor.yaml

    - name: DREMIO_JAVA_SERVER_EXTRA_OPTS

       value: >-

         {{- include "dremio.executor.extraStartParams" (list $ $engineName) | nindent 12 -}}

         -Dzookeeper=zk-hs:2181

         -Dservices.coordinator.enabled=false

         -Dservices.coordinator.master.enabled=false

         -Dservices.coordinator.master.embedded-zookeeper.enabled=false

         -Dservices.executor.enabled=true

         -Dservices.conduit.port=45679

         -Dservices.node-tag={{ $engineName }}

         -Dcom.amazonaws.sdk.disableCertChecking=true

dremio_v2/templates/dremio-master.yaml

    - name: DREMIO_JAVA_SERVER_EXTRA_OPTS

       value: >-

         {{- include "dremio.coordinator.extraStartParams" $ | nindent 12 -}}

         -Dzookeeper=zk-hs:2181

         -Dservices.coordinator.enabled=true

         -Dservices.coordinator.master.enabled=true

         -Dservices.coordinator.master.embedded-zookeeper.enabled=false

         -Dservices.executor.enabled=false

         -Dservices.conduit.port=45679

         -Dcom.amazonaws.sdk.disableCertChecking=true

所有配置更新完成后,使用 helm charts 安装 Dremio。

helm install dremio dremio_v2 -f dremio_v2/values.minio.yaml --namespace dremio --create-namespace

您可能需要等待几分钟才能确保所有 Dremio pod 运行。

Dremio 启动后,验证 openlake 存储桶中创建的新前缀。

mc ls myminio/openlake/dremio/uploads --insecure

端口转发 dremio-client 以在 http://localhost:9047 访问 Dremio 控制台。

kubectl port-forward svc/dremio-client -n dremio 9047

要访问 Dremio 门户,请创建用户并加载样本文件以运行查询,以验证以下屏幕截图。

创建一个新用户。

添加一个新作业。

设置格式。


测试要运行的查询

验证上传到存储桶的示例 CSV 文件。

mc ls --summarize --recursive myminio/openlake/dremio/uploads --insecure

就这么简单。

最后的想法

MinIO 是为了为 现代数据湖 以及运行在它们之上的数据分析和 AI/ML 工作负载提供动力而构建的。MinIO 包含许多用于处理由许多小文件组成的大型数据集的 优化,这在现代数据湖中很常见。

对于数据湖来说,可能更重要的是,MinIO 保证了 持久性不变性。此外,MinIO 在 传输中驱动器上 对数据进行加密,并使用 IAM 和基于策略的访问控制 (PBAC) 来调节对数据的访问。

如果您想将 MinIO 与 Dremio 配置或有任何问题,请务必在 Slack 上联系我们!