当前位置: 首页 > news >正文

开源的现代数据探索和可视化平台:Apache Superset 在 Kubernetes 上安装

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。

Apache Superset
Apache Superset™ 是一个开源的现代数据探索和可视化平台。对于许多团队来说,Superset 可以取代或增强专有的商业智能工具。Superset 可以与各种数据源很好地集成。

在 Kubernetes 上安装

在 Kubernetes 上运行 Superset 已获支持,可使用官方 Superset helm 仓库 中提供的 Helm chart。

前置条件

  • 一个 Kubernetes 集群
  • 已安装 Helm

对于更简单的单机环境,我们推荐使用 minikube,它在多种平台上都易于设置,并且与这里引用的 Helm chart 配合得非常好。

运行

  1. 添加 Superset helm 仓库
helm repo add superset https://apache.github.io/superset
"superset" has been added to your repositories
  1. 查看仓库中的 chart
helm search repo superset
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
superset/superset       0.1.1           1.0             Apache Superset is a modern, enterprise-ready b...
  1. 配置您的设置覆盖

就像任何典型的 Helm chart 一样,您需要编写一个 values.yaml 文件,该文件将定义/覆盖默认 values.yaml 中公开的任何值,或其依赖 chart 中的值:

  • bitnami/redis
  • bitnami/postgresql

下文将提供有关您可能需要的一些重要覆盖的更多信息。

  1. 安装并运行
helm upgrade --install --values my-values.yaml superset superset/superset

您应该会看到各种 pod 启动,例如:

kubectl get pods
NAME                                    READY   STATUS      RESTARTS   AGE
superset-celerybeat-7cdcc9575f-k6xmc    1/1     Running     0          119s
superset-f5c9c667-dw9lp                 1/1     Running     0          4m7s
superset-f5c9c667-fk8bk                 1/1     Running     0          4m11s
superset-init-db-zlm9z                  0/1     Completed   0          111s
superset-postgresql-0                   1/1     Running     0          6d20h
superset-redis-master-0                 1/1     Running     0          6d20h
superset-worker-75b48bbcc-jmmjr         1/1     Running     0          4m8s
superset-worker-75b48bbcc-qrq49         1/1     Running     0          4m12s

确切的列表将取决于您的特定配置覆盖,但您通常应该预期:

  • N 个 superset-xxxx-yyyysuperset-worker-xxxx-yyyy pod(取决于您的 supersetNode.replicaCountsupersetWorker.replicaCount 值)
  • 1 个 superset-postgresql-0(取决于您的 postgres 设置)
  • 1 个 superset-redis-master-0(取决于您的 redis 设置)
  • 1 个 superset-celerybeat-xxxx-yyyy pod(如果您在值覆盖中设置了 supersetCeleryBeat.enabled = true
  1. 访问它

该 chart 将发布适当的服务以在您的 k8s 集群内部公开 Superset UI。要在外部访问它,您必须:

  • 将 Service 配置为 LoadBalancerNodePort
  • 为其设置一个 Ingress - chart 包含一个定义,但需要根据您的需求进行调整(主机名、tls、注释等…)
  • 运行 kubectl port-forward superset-xxxx-yyyy :8088 以直接将一个 pod 的端口隧道到您的本地主机

根据您配置外部访问的方式,URL 会有所不同。一旦您确定了适当的 URL,您可以使用以下凭据登录:

  • 用户名: admin
  • 密码: admin

重要设置

安全设置

包含默认安全设置和密码,但您 必须 更新它们以运行 prod 实例,特别是:

postgresql:postgresqlPassword: superset

确保为您设置了一个唯一且强的复杂字母数字字符串作为 SECRET_KEY,并使用工具帮助您生成一个足够随机的序列。

  • 要生成一个好的密钥,您可以运行 openssl rand -base64 42
configOverrides:secret: |SECRET_KEY = 'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY'

如果您想更改之前的密钥,那么您应该轮换密钥。
Kubernetes 部署的默认密钥为 thisISaSECRET_1234

configOverrides:my_override: |PREVIOUS_SECRET_KEY = 'YOUR_PREVIOUS_SECRET_KEY'SECRET_KEY = 'YOUR_OWN_RANDOM_GENERATED_SECRET_KEY'
init:command:- /bin/sh- -c- |. {{ .Values.configMountPath }}/superset_bootstrap.shsuperset re-encrypt-secrets. {{ .Values.configMountPath }}/superset_init.sh

Superset 使用 Scarf Gateway 收集遥测数据。了解不同 Superset 版本的安装计数有助于项目决定修补和长期支持。Scarf 会清除个人身份信息 (PII) 并仅提供聚合统计。

要在基于 Helm 的安装中选择退出此数据收集,请编辑您的 helm/superset/values.yaml 文件中的 repository: 行,将 apachesuperset.docker.scarf.sh/apache/superset 替换为 apache/superset 以直接从 Docker Hub 拉取镜像。

依赖项

在引导脚本中安装附加包并执行任何其他引导配置。
对于生产集群,建议在 CI 中构建自己的镜像并完成此步骤。

Superset 需要为每个您想要连接的数据存储安装一个 Python DB-API 数据库驱动程序和一个 SQLAlchemy 方言。

有关更多信息,请参阅安装数据库驱动程序。
建议您参考 pyproject.toml 中列出的版本,而不是在引导脚本中硬编码它们,如下所示。

以下示例安装 BigQuery 和 Elasticsearch 的驱动程序,允许您在 Superset 设置中连接到这些数据源:

bootstrapScript: |#!/bin/bashuv pip install .[postgres] \.[bigquery] \.[elasticsearch] &&\if [ ! -f ~/bootstrap ]; then echo "Running Superset with uid {{ .Values.runAsUser }}" > ~/bootstrap; fi

superset_config.py

默认的 superset_config.py 非常简洁,您很可能需要扩展它。这可以通过在 configOverrides 中指定一个或多个键/值条目来完成,例如:

configOverrides:my_override: |# 这将确保即使使用 SSL 卸载也能正确计算 redirect_uriENABLE_PROXY_FIX = TrueFEATURE_FLAGS = {"DYNAMIC_PLUGINS": True}

这些将作为 Helm 模板进行求值,因此将能够引用其他 values.yaml 变量,例如 {{ .Values.ingress.hosts[0] }} 将解析为您的 ingress 外部域。

整个 superset_config.py 将作为密钥安装,因此直接传递敏感参数是安全的…但是使用密钥环境变量可能更具可读性。

可以通过运行 helm upgrade --install --values my-values.yaml --set-file configOverrides.oauth=set_oauth.py 来提供完整的 python 文件。

环境变量

这些可以作为键/值通过 extraEnv 传递,如果它们是敏感的,则通过 extraSecretEnv 传递。然后可以从 superset_config.py 中使用例如 os.environ.get("VAR") 引用它们。

extraEnv:SMTP_HOST: smtp.gmail.comSMTP_USER: user@gmail.comSMTP_PORT: "587"SMTP_MAIL_FROM: user@gmail.comextraSecretEnv:SMTP_PASSWORD: xxxxconfigOverrides:smtp: |import astSMTP_HOST = os.getenv("SMTP_HOST","localhost")SMTP_STARTTLS = ast.literal_eval(os.getenv("SMTP_STARTTLS", "True"))SMTP_SSL = ast.literal_eval(os.getenv("SMTP_SSL", "False"))SMTP_USER = os.getenv("SMTP_USER","superset")SMTP_PORT = os.getenv("SMTP_PORT",25)SMTP_PASSWORD = os.getenv("SMTP_PASSWORD","superset")

系统包

如果需要新的系统包,可以通过覆盖容器的 command 在应用程序启动前安装它们,例如:

supersetWorker:command:- /bin/sh- -c- |apt updateapt install -y somepackageapt autoremove -yqq --purgeapt clean# 运行 celery worker. {{ .Values.configMountPath }}/superset_bootstrap.sh; celery --app=superset.tasks.celery_app:app worker

数据源

数据源定义可以通过在 extraConfigs 中提供键/值 yaml 定义来自动声明:

extraConfigs:import_datasources.yaml: |databases:- allow_file_upload: trueallow_ctas: trueallow_cvas: truedatabase_name: example-dbextra: "{\r\n    \"metadata_params\": {},\r\n    \"engine_params\": {},\r\n    \"\metadata_cache_timeout\": {},\r\n    \"schemas_allowed_for_file_upload\": []\r\n\}"sqlalchemy_uri: example://example-db.localtables: []

这些也将作为密钥挂载,并且可以包含敏感参数。

配置示例

设置 OAuth

:::note

OAuth 设置需要安装 authlib Python 库。这可以通过更新 bootstrapScript 使用 pip 来完成。有关更多信息,请参阅依赖项部分。

:::

extraEnv:AUTH_DOMAIN: example.comextraSecretEnv:GOOGLE_KEY: xxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.comGOOGLE_SECRET: xxxxxxxxxxxxxxxxxxxxxxxxconfigOverrides:enable_oauth: |# 这将确保即使使用 SSL 卸载也能正确计算 redirect_uriENABLE_PROXY_FIX = Truefrom flask_appbuilder.security.manager import AUTH_OAUTHAUTH_TYPE = AUTH_OAUTHOAUTH_PROVIDERS = [{"name": "google","icon": "fa-google","token_key": "access_token","remote_app": {"client_id": os.getenv("GOOGLE_KEY"),"client_secret": os.getenv("GOOGLE_SECRET"),"api_base_url": "https://www.googleapis.com/oauth2/v2/","client_kwargs": {"scope": "email profile"},"request_token_url": None,"access_token_url": "https://accounts.google.com/o/oauth2/token","authorize_url": "https://accounts.google.com/o/oauth2/auth","authorize_params": {"hd": os.getenv("AUTH_DOMAIN", "")}},}]# 将 Authlib 角色映射到 superset 角色AUTH_ROLE_ADMIN = 'Admin'AUTH_ROLE_PUBLIC = 'Public'# 将允许用户自我注册,允许从授权用户创建 Flask 用户AUTH_USER_REGISTRATION = True# 默认的用户自我注册角色AUTH_USER_REGISTRATION_ROLE = "Admin"

启用警报和报告

为此,根据警报和报告文档,您将需要:

在 Celery worker 中安装支持的 webdriver

这可以通过使用预安装了 webdriver 的自定义镜像来完成,或通过覆盖 command 在启动时安装。以下是 chromedriver 的工作示例:

supersetWorker:command:- /bin/sh- -c- |# 安装 chrome webdriver# 请参阅 https://github.com/apache/superset/blob/4fa3b6c7185629b87c27fc2c0e5435d458f7b73d/docs/src/pages/docs/installation/email_reports.mdxapt-get updateapt-get install -y wgetwget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.debapt-get install -y --no-install-recommends ./google-chrome-stable_current_amd64.debwget https://chromedriver.storage.googleapis.com/88.0.4324.96/chromedriver_linux64.zipapt-get install -y zipunzip chromedriver_linux64.zipchmod +x chromedrivermv chromedriver /usr/binapt-get autoremove -yqq --purgeapt-get cleanrm -f google-chrome-stable_current_amd64.deb chromedriver_linux64.zip# 运行. {{ .Values.configMountPath }}/superset_bootstrap.sh; celery --app=superset.tasks.celery_app:app worker
运行 Celery beat

此 pod 将触发在警报和报告 UI 部分中配置的预定任务:

supersetCeleryBeat:enabled: true
配置适当的 Celery 作业和 SMTP/Slack 设置
extraEnv:SMTP_HOST: smtp.gmail.comSMTP_USER: user@gmail.comSMTP_PORT: "587"SMTP_MAIL_FROM: user@gmail.comextraSecretEnv:SLACK_API_TOKEN: xoxb-xxxx-yyyySMTP_PASSWORD: xxxx-yyyyconfigOverrides:feature_flags: |import astFEATURE_FLAGS = {"ALERT_REPORTS": True}SMTP_HOST = os.getenv("SMTP_HOST","localhost")SMTP_STARTTLS = ast.literal_eval(os.getenv("SMTP_STARTTLS", "True"))SMTP_SSL = ast.literal_eval(os.getenv("SMTP_SSL", "False"))SMTP_USER = os.getenv("SMTP_USER","superset")SMTP_PORT = os.getenv("SMTP_PORT",25)SMTP_PASSWORD = os.getenv("SMTP_PASSWORD","superset")SMTP_MAIL_FROM = os.getenv("SMTP_MAIL_FROM","superset@superset.com")SLACK_API_TOKEN = os.getenv("SLACK_API_TOKEN",None)celery_conf: |from celery.schedules import crontabclass CeleryConfig:broker_url = f"redis://{env('REDIS_HOST')}:{env('REDIS_PORT')}/0"imports = ("superset.sql_lab","superset.tasks.cache","superset.tasks.scheduler",)result_backend = f"redis://{env('REDIS_HOST')}:{env('REDIS_PORT')}/0"task_annotations = {"sql_lab.get_sql_results": {"rate_limit": "100/s",},}beat_schedule = {"reports.scheduler": {"task": "reports.scheduler","schedule": crontab(minute="*", hour="*"),},"reports.prune_log": {"task": "reports.prune_log",'schedule': crontab(minute=0, hour=0),},'cache-warmup-hourly': {"task": "cache-warmup","schedule": crontab(minute="*/30", hour="*"),"kwargs": {"strategy_name": "top_n_dashboards","top_n": 10,"since": "7 days ago",},}}CELERY_CONFIG = CeleryConfigreports: |EMAIL_PAGE_RENDER_WAIT = 60WEBDRIVER_BASEURL = "http://{{ template "superset.fullname" . }}:{{ .Values.service.port }}/"WEBDRIVER_BASEURL_USER_FRIENDLY = "https://www.example.com/"WEBDRIVER_TYPE= "chrome"WEBDRIVER_OPTION_ARGS = ["--force-device-scale-factor=2.0","--high-dpi-support=2.0","--headless","--disable-gpu","--disable-dev-shm-usage",# 这是必需的,因为我们的进程以 root 身份运行(为了安装 pip 包)"--no-sandbox","--disable-setuid-sandbox","--disable-extensions",]

加载示例数据和仪表板

如果您正在试用 Superset 并希望有一些数据和仪表板可供探索,您可以通过创建 my_values.yaml 并将其部署到上述运行部分的配置您的设置覆盖步骤中所述来加载一些示例。
要加载示例,请将以下内容添加到 my_values.yaml 文件中:

init:loadExamples: true

风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。

http://www.dtcms.com/a/313964.html

相关文章:

  • Seurat的FetchData()函数
  • Redis缓存详解及常见问题解决方案
  • 【编号443】黄河中上游极端降水指数数据(1961-2020年)
  • 安全扫描:目标主机支持RSA密钥交换问题
  • Ubuntu24.04的VSCode中安装MoonBit和MoonBit Toolchain(moon-pilot)
  • 存储函数与触发器:数据库自动化与业务逻辑封装的核心技术
  • ES-301A :让 Modbus 设备无缝接入工业以太网的高效桥梁
  • 408数据结构排序部分知识的复盘:从原理到辨析的系统化梳理
  • Calcite自定义扩展SQL案例详细流程篇
  • Mac中M系列芯片采用rbenv管理ruby版本
  • Tomcat虚拟主机配置详解和多实例部署
  • ubuntu22.04系统实践 linux基础入门命令(三) 用户管理命令
  • 基于Mediapipe_Unity_Plugin实现手势识别
  • 笔记:webpack项目优化图片体积大小时 遇到 图片无法正常显示
  • 可信数据库大会现场,TDengine 时序数据库展示核电场景下的高性能与 AI 创新
  • 小程序七牛云文件上传封装js
  • 入门MicroPython+ESP32:PC远程控制ESP32 LED灯
  • 百度翻译详解:包括PaddleNLP、百度AI开放平台、接口逆向(包括完整代码)
  • 四、Linux 的实用操作
  • 基于开源AI智能名片链动2+1模式与S2B2C商城小程序的客户关系深化研究
  • 【高等数学】第八章 向量代数与空间解析几何——第一节 向量及其线性运算
  • 菜鸟集团招Java研发啦
  • Kubernetes RBAC 鉴权:构建安全的集群访问控制体系
  • k8s常见问题
  • 力扣热题100——数组
  • 关于Npm和Nvm的用法
  • 华为云产品图解
  • falsk windows 服务器部署-解决服务器外无法访问
  • 零售行业线上线下融合趋势,华为云智能零售解决方案,在门店运营与电商业务中的技术应用与场景实践
  • LLM大模型时代:生活服务领域的“生存革命“与新生态重构