头图

BendDeploy 是 Databend 提供的一套基于 Kubernetes 的标准化私有部署管控平台,为用户提供一站式 Databend 数据库集群管理工具,能够快速、安全地实现 Databend 多集群、多租户的部署、管理。BendDeploy 借助直观的操作界面,为用户提供了简单易用的可视化运维体验,极大地提升运维效率,减少错误和中断,提高服务质量和稳定性。

在 Data Infra 第 25 期活动中 Databend 研发工程师韩山杰带来主题分享,详细介绍了该平台的功能特性,并演示几分钟内完成一套 Databend 的多租户、多集群私有化部署,以及如何通过直观的界面轻松管理数据库资源,完成从部署、扩缩、升级,到日志查看、SQL 执行等全链路操作,解决传统方法对着 Shell 敲命令的痛点。

BendDeploy 功能特性

BendDeploy 提供的主要功能如下:

  • 多租户管理: 提供多租户以及租户隔离的管理能力。
  • 集群部署 :通过 BendDeploy 可以一键拉起一套 Databend 集群。
  • 集群管理

    • 集群详情 :查看集群的运行状态、配置详情、连接信息等。
    • 集群扩缩 :一键对 warehouse 的实例数量进行扩容、缩容。
    • 集群升级 :对集群版本进行滚动升级。
    • 集群回滚: 提供对集群版本快速回滚的能力。
    • 集群重启 :对集群内的 databend query 节点进行滚动重启。
    • 节点详情 :查看节点的实时状态以及配置信息。
  • 接管外部 Meta: 假如用户已经部署过 Databend,BendDeploy 可以接管外部的 Meta ,只需再部署无状态的 Databend query 即可。
  • 参数配置 :支持计算集群自定义编辑配置文件,包括实例的资源配置以及 Databend 的参数配置。
  • 监控信息 :可以接入外部 Prometheus 查看监控信息。
  • 日志查看 :开启租户日志收集后,可以很方便地查看 Databend query log, profile log等日志。
  • SQL Worksheet :提供执行 SQL 查询的 Web UI ,选择租户内的 warehouse 去执行。
  • 用户管理 :支持对用户的管理,包括将用户添加到租户或者从租户中移除,以及用户的角色权限控制等。

可以看到,基本上所有 Databend 运维相关的操作,都可以在 BendDeploy 中使用可视化方式进行管控,再也不用对着 Shell 敲命令了,准确、方便的同时也提高了运维效率。

BendDeploy 架构

先来从组件的视角来看下 BendDeploy 的架构图

  • 对象存储:Databend 的最佳实践是将数据存储在对象存储中;
  • Meta: 一套平台目前只需安装一个 Meta 集群, 或者可以直接使用外部的 Meta 集群;
  • Warehouse:计算集群,归属于一个 Tenant,是一组 databend-query 的实例组;
  • Tenant:租户,一套管控平台可以管理多个租户,每个租户可以包含多个 Warehouse;
  • 接入层:每个租户会安装一个 Ingress 以域名的形式对外提供数据库连接服务;
  • 用户管理:该模块提供用户、角色、以及影响权限的管理;
  • WebUI:提供可视化 SQL 查询能力的 SQL IDE。

从管理员的视角看各个组件之间的关系架构是:

下面来看下如何快速地将 BendDeploy 安装部署起来。

BendDeploy 安装部署

Databend 作为云原生湖仓,推荐优先部署到 K8s 环境中, BendDeploy 目前只限定在 K8s only 的环境中部署,所以在部署 BendDeploy 之前,需要首先部署一套 K8s 集群,这里假定用户已经准备好 K8s 集群。

安装日志组件

BendDeploy 平台会收集 Databend 的日志,这里我们给 Databend 配置一个 OTLP 端点,用于收集 Databend 的 query detail log 以及 query profile log。部署日志相关的组件,需要下载 Databend logging helm chart,该 chart 已经为收集 Databend 组件的日志做好配置,其中包括 Vector、以及 log collector 的配置。只需要将用户的对象存储配置替换 values.yaml 中的 warehouseLogCollector.s3 中的 endpoint, auth 等配置即可。

warehouseLogCollector:
  enabled: true
  replicas: 1
  nameOverride: warehouse-log-collector
  fullnameOverride: warehouse-log-collector
  s3:
    endpoint: "S3 endpoint"
    bucket: "s3.bucket"
    region: "us-east-1"
    auth:
      accessKeyId: "access_key_id"
      secretAccessKey: "secret_key"
    batch:
      maxBytes: 10485760  # 10MB
      timeoutSecs: 60    # 1min

然后执行:

helm upgrade --install logging ./logging --namespace=logging --create-namespace

kubectl get pod -n logging 检查日志组件是否安装完成:

日志组件并不是必须项,如果不需要开启平台的日志收集功能,可以暂不安装

安装 BendDeploy

下载 helm chart & 修改 values.yaml

首先到 BendDeploy Chart下载 BendDeploy 的 Helm chart 文件,根据实际情况修改 chart 中的 values.yaml 以及 configmap-benddeploy.yaml , 比如 ingress 的 host, prometheus ,oidcProvider 的端点以及 Postgres 的连接串等。

apiVersion: v1
kind: ConfigMap
metadata:
  name: benddeploy-config
  namespace: benddeploy
data:
  config.json: |
    {
      "env": "test",
      "namespace": "benddeploy",
      "imageRegistry": "",
      "secretKey": "",
      "lokiHost": "",
      "grafanaEndpoint": "http://grafana.monitoring.svc.cluster.local:80",
      "promEndpoint": "thanos-query.monitoring.svc.cluster.local:9090",
      "logCollectorEndpoint": "http://warehouse-log-collector.logging.svc.cluster.local:4318",
      "salt": "salt",
      "jwt": {
        "kind": "static",
        "static": {
          "signingKey": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIN2zd9w6nMcFpP0FuUb3413RSgo92nhtGYlXSBfgQD9yoAoGCCqGSM49\nAwEHoUQDQgAEJI4I7jG0eVUMTo8TkrOso1VTWBddEaUD2UI7efrYzmI2zFocd7Ga\nfLbl54WFHeJ75ur0ED8EUf7QPEmgkr5QHQ==\n-----END EC PRIVATE KEY-----",
          "pubKey": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJI4I7jG0eVUMTo8TkrOso1VTWBdd\nEaUD2UI7efrYzmI2zFocd7GafLbl54WFHeJ75ur0ED8EUf7QPEmgkr5QHQ==\n-----END PUBLIC KEY-----"
        }
      },
      "db": {
        "postgresDSN": "postgres://postgres:postgres@pg-benddeploy.benddeploy.svc.cluster.local:5432/default?sslmode=disable"
      },
      "adminUsers": [
        "databend",
        "admin"
      ],
      "jwtKeyFile": "http://benddeploy-service.benddeploy.svc.cluster.local:8080/.well-known/jwks.json",
      "oidcProvider": "https://oidc.eks.us-east-2.amazonaws.com/id/120A6F5E89F8F14E7A1E5E15FE48196D/keys"
    }
oidcProvider: 允许 Kubernetes 与外部身份提供商集成,用户可以使用现有的企业身份凭证访问 Kubernetes 集群

对于生产集群,需要在 configmap-benddeploy.yaml 中使用自己的值覆盖以下参数:

  • imageRegistry:Databend docker image 的镜像仓库,需要提前部署 registry 并上传 相应的 Databend image,官方的 image repo 在 https://hub.docker.com/r/datafuselabs/databend/tags。如果部署的机器能访问公网,该参数可以为空,使用 docker hub 中的官方镜像。
  • registryUsername: image registry 的用户名。
  • registryPassword: image registry 的密码,若无 Auth 认证为空。
  • repoNamespace: registry 中存放 databend-query 和 databend-meta docker image 的 namespce。举个例子,假如 registry 为 registry.databend.local, namespace 为 datafuselabs, 则上传 image 为: registry.databend.local/datafuselabs/databend-query: tag。
  • promEndpoint:用户提供的 Prometheus 服务器的端点。
  • logCollectorEndpoint:日志收集器的端点。
  • grafanaEndpoint:用户提供的 Grafana 服务器的端点。
  • db.postgresDSN:Postgres 数据库的 DSN。如果 values.postgres.enabled 为 true,则此值将被忽略(系统将新建一个简单的 pg 服务,注意仅供测试使用,生产环境请使用外部 pg)。
  • oidcProvider:K8s 集群中用于身份验证的 OIDC 提供者。

配置修改完成后,执行:

helm install benddeploy -n benddeploy --create-namespace ./chart --set image=public.ecr.aws/databendlabs/benddeploy:v1.0
你可以在 https://gallery.ecr.aws/databendlabs/benddeploy 找到 BendDeploy 所有已经发布版本的 docker image

运行成功后,检查 BendDeploy 安装情况:

浏览器访问 Web 界面

部署成功后,访问在 ingress 中配置的域名即可打开 BendDeploy 页面:


Databend 默认的初始化用户名密码为: databend/Databend@1*

进入到系统后可以在用户管理模块进行密码修改。

请注意,该账户密码仅适用于 BendDeploy 管理平台,并非 Databend 数据库的账户名和密码!

平台配置

云原生技术发展已经非常成熟,相信每个公司的云管理平台中都会安装 Grafana, Prometheus 等监控告警组件,所以 BendDeploy 不再内置,但是提供了一个入口可以让用户去配置。

配置确认的同时会校验与服务端的连通性。

BendDeploy 使用手册

新建租户

部署完成后,我们来新建第一个租户。

指定外部的 Meta 或者创建 Meta 集群

如果在 BendDeploy 中创建过 Meta 集群,这里可以选择内置的 Meta。或者如果你有外部的 Meta 集群想接入到 BendDeploy 中,也可以填写自建 Meta 的信息。

这里点击下一步的同时,这里会执行校验所填写 Meta 集群的可用性,检验通过后继续后面的流程。

配置对象存储

Databend 最佳实践是将数据存到对象存储中,所以这里我们配置用户的对象存储相关信息。

配置完对象存储点击下一步的时候会做一个校验,确保配置的准确性。

Databend Query 配置

这里我们配置 Databend Query 的初始用户名和密码,用来第一次连接到 Databend。

如果勾选了 启用负载均衡 ,会在 databend-query 的 ingress 上配置负载均衡策略,这样会使得流量均匀打到后端 databend-query 节点上。

配置泛解析域名

由用户提供的泛解析域名,提供每个 warehouse 的访问入口。比如这里填写的域名是 *.databend.com,那么在创建 名字为 test-1 的 warehouse 后,就可以通过 test-1.databend.com 连接到 Databend。

配置 Databend Enterprise License

如何是购买的 Databend 企业版,这一步会将 Databend License 填入,然后就可以使用 Databend 中企业级特性了。

新建 Databend 计算集群

我们可以在上面新建的租户下,新建一个 Databend 计算集群。

点击 Create Warehouse , 填写 warehouse 名称,选择版本,集群的实例数量、资源配置,为集群设置标签后即可创建。

注意需要提前将 Databend docker image 上传到 K8s 集群内的 registry 中,这样在 image 的下拉列表中就可以选择你想部署的 Databend 版本。

更多关于 Databend 的运行参数和设置可以参考文档 https://docs.databend.com/guides/deploy/references/node-confi...

创建完成后,点击返回集群,可以看到成功创建的计算集群:

操作计算集群

点击右侧下拉菜单后,可以对计算集群进行扩缩容、滚动重启、更新、删除以及查看详情等操作操作。

如果 ingress 域名配置正确,可以使用 BendSQL 直接连接到集群。

点击 connect 获取连接串:

执行

bendsql -u databend -h test-warehouse.for-test.a -P 8000 -p databend

即可连接到 test-warehouse 进行数据库查询。

开启日志

BendDeploy 的日志模块比较特殊,由于 Databend 本身就具有很强的日志存储、查询、分析能力,所以我们直接将 warehouse 相关的日志都存储到 Databend 中,而且可以按照租户来开启是否收集该租户的日志,进一步降低用户的日志存储成本。

日志模块初始化

BendDeploy 刚部署完成的时候,日志模块默认是没有开启的,需要用户先新建至少一个租户之后,才能开启日志收集。这是因为需要在租户中创建一个专门用户日志收集的 warehouse。

点击 Enable logs 按钮后,开始初始化日志组件。

选择用户收集日志的 warehouse 的租户,可以使用租户内现有的 warehouse 的 host,如果不填写 warehouse host 系统会自动创建一个名为 internale-log-collector 的 warehouse。同时,需要填写对象存储的相关配置用于存储日志。

初始化日志模块之后,就会开启日志收集。日志的刷新可能会有延迟,如果想立即查到日志,可以点击租户上的 flush 按钮会立即将日志刷新到 Databend。

目前存储三种 log ,query_logs ,query_profiles ,query_details, query_profiles 日志本质上是 EXPLAIN 命令的图形化版本,提供对查询的执行计划和性能细节,日志中可以跳转到每条 SQL 请求的 profile 图表。


也可以根据 query_id 或者日志中的关键字进行查询。

BendDeploy 将日志查询收拢到一个平台中,无须再配置 ES 或者 grafana,极大地简化了操作。

用户管理

用户模块用来管理用户的创建、删除,用户名密码修改等。在创建用户的同时,可以将用户加入指定的租户,选择用户运行 SQL 的角色(role),只有管理员才具有管理用户的权限。

切换用户

用户可以通过点击左下角的三个点,查看用户详情和退出切换用户并重新登录。

SQL IDE

BendDeploy 在左侧导航栏中提供了便捷的 SQL IDE 访问入口。在 IDE 中,用户可以查看数据库中的数据以及选择数据库,还可以进行 SQL 查询、数据查看、权限管理等操作。

升级 BendDeploy

升级 BendDeploy 只需要在 aws ecr 上找到最新的 Docker image,然后 helm upgrade 升级即可。

未来演进计划

随着数据基础设施向云原生方向发展,对数据隐私有较高要求的用户对私有化部署的需求日益增长。为满足这些需求,我们将持续优化 Benddeploy 的用户体验,近期的演进路线如下:

  1. 集成 Databend Cloud 同等级的Task 功能,支持定时任务和基于 DAG 的任务流编排,实现自动化数据处理流程;
  2. 升级控制面板,引入 **Databend Operator** ——这是一款完全 Kubernetes 原生的可扩展运维工具,通过自定义资源定义(CRD)将租户配置与计算资源抽象为声明式对象,让用户在任何 Kubernetes 集群中都能获得与云服务同级的自动化、弹性和可观测能力;
  3. 全面提升 Benddeploy 的稳定性和可靠性,确保企业级生产环境的平稳运行。

这些改进将使 Benddeploy 成为企业私有化部署 Databend 的首选解决方案,无论是功能丰富度还是运维便捷性都将与云服务保持一致。

总结

Databend 提供了一套基于 Kubernetes 的标准化私有部署管控平台——BendDeploy,帮助用户快速、安全地实现 Databend 多集群、多租户的部署和管理。BendDeploy 提供了简单易用的可视化运维体验,极大地提升运维效率,减少错误和中断。通过 BendDeploy,用户可以实现多租户管理、集群部署、集群扩缩、集群升级、节点管理等操作。

此外,BendDeploy 还提供了日志收集、查询和分析能力,将日志收拢到一个平台中,简化了操作。用户可以通过 BendDeploy 进行用户管理、SQL 查询和数据查看等操作。而且得益于整个云原生的架构,BendDeploy 的部署非常方便。

总的来说,BendDeploy 为 Databend 用户提供了一个全面、易用的管控平台。欢迎大家来试用!

现在安装试用,可获得 BendDeploy 三个月免费 License!

关于 Databend

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式湖仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

👨‍💻‍ Databend Cloud:databend.cn

📖 Databend 文档:docs.databend.cn

💻 Wechat:Databend

✨ GitHub:github.com/databendlab...


databend
20 声望10 粉丝

Databend 旨在成为一个 开源、弹性、可靠 的无服务器数仓,查询快如闪电,与 弹性、简单、低成本 的云服务有机结合。数据云的构建,从未如此简单!