k8s部署Superset文档(2主3从)

84 阅读2分钟

一.Superset 简介

Apache Superset 是一个现代化的 开源数据可视化与数据探索平台。它最初由 Airbnb 开发,现在由 Apache 基金会托管和维护。它的定位是 轻量级 BI 商业智能 )工具,帮助用户快速把数据转化为图表和仪表盘,用于分析和决策支持

二.环境准备

  1.Kubernetes集群(本文使用k8s-1.32版本集群)

  2.superset版本选择5.0

  3.已安装 Helm

  4.官方文档:superset.apache.ac.cn/docs/intro/

三. 安装与初始化

添加 Superset helm 仓库
helm repo add superset https://apache.github.io/superset
#就像任何典型的 Helm 图表一样,您需要编写一个 values.yaml 文件,
#该文件将定义/覆盖默认的 values.yaml 中公开的任何值,或其依赖的任何子图表中的值
#本文采用官方默认配置values.yaml
helm upgrade --install --values my-values.yaml superset superset/superset
#!但由于官方镜像缺少部分依赖,需要自行构建镜像Dockerfile
# 基础镜像,可以改成你需要的 Superset 版本
FROM apache/superset:5.0.0

USER root

# 安装 mysqlclient 所需的系统依赖
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
        default-libmysqlclient-dev \
        build-essential \
        pkg-config \
    && rm -rf /var/lib/apt/lists/*

# 设置 Playwright 浏览器路径
ENV PLAYWRIGHT_BROWSERS_PATH=/usr/local/share/playwright-browsers

# 激活 Superset 虚拟环境并安装额外 Python 包
RUN . /app/.venv/bin/activate && \
    uv pip install \
        # PostgreSQL 驱动
        psycopg2-binary \
        # SQL Server 驱动
        pymssql \
        # SSO 认证
        Authlib \
        # Excel 上传
        openpyxl \
        # PDF 截图
        Pillow \
        # Playwright 截图
        playwright \
        # MySQL 驱动
        mysqlclient \
    && playwright install-deps \
    && PLAYWRIGHT_BROWSERS_PATH=/usr/local/share/playwright-browsers playwright install chromium

# 切回 superset 用户
USER superset

# 启动 Superset
CMD ["/app/docker/entrypoints/run-server.sh"]

将构建镜像替换supersetsuperset-worker服务的镜像,即可正式启动服务

启动后可以使用以下默认凭据登录

  • 用户:admin
  • 密码:admin

四. 核心组件配置

因为部分功能superset并未开启,所以需要调整superset-config配置文件来开启变量筛选等功能


import os
from flask_caching.backends.rediscache import RedisCache

#ENABLE_TEMPLATE_PROCESSING = True
#PUBLIC_ROLE_LIKE_GAMMA = True

#开启筛选等功能
FEATURE_FLAGS = {
    "DASHBOARD_NATIVE_FILTERS": True,
    "DASHBOARD_NATIVE_FILTERS_SET": True,
    "ENABLE_TEMPLATE_PROCESSING": True,
    "DASHBOARD_CROSS_FILTERS": True, 
    "HORIZONTAL_FILTER_BAR": True
}

EMBEDDED_SUPERSET = True
WTF_CSRF_ENABLED = False

def env(key, default=None):
    return os.getenv(key, default)

#没有的话,就手动生成一个
SECRET_KEY = ""

# Redis Base URL
REDIS_BASE_URL=f"{env('REDIS_PROTO')}://{env('REDIS_HOST')}:{env('REDIS_PORT')}"

# Redis URL Params
REDIS_URL_PARAMS = ""

# Build Redis URLs
CACHE_REDIS_URL = f"{REDIS_BASE_URL}/{env('REDIS_DB', 1)}{REDIS_URL_PARAMS}"
CELERY_REDIS_URL = f"{REDIS_BASE_URL}/{env('REDIS_CELERY_DB', 0)}{REDIS_URL_PARAMS}"

MAPBOX_API_KEY = env('MAPBOX_API_KEY', '')
CACHE_CONFIG = {
      'CACHE_TYPE': 'RedisCache',
      'CACHE_DEFAULT_TIMEOUT': 300,
      'CACHE_KEY_PREFIX': 'superset_',
      'CACHE_REDIS_URL': CACHE_REDIS_URL,
}
DATA_CACHE_CONFIG = CACHE_CONFIG

SQLALCHEMY_DATABASE_URI = f"postgresql+psycopg2://{env('DB_USER')}:{env('DB_PASS')}@{env('DB_HOST')}:{env('DB_PORT')}/{env('DB_NAME')}"
SQLALCHEMY_TRACK_MODIFICATIONS = True

class CeleryConfig:
  imports  = ("superset.sql_lab", )
  broker_url = CELERY_REDIS_URL
  result_backend = CELERY_REDIS_URL

CELERY_CONFIG = CeleryConfig
RESULTS_BACKEND = RedisCache(
      host=env('REDIS_HOST'),
      port=env('REDIS_PORT'),
      key_prefix='superset_results',
)

配置完成后重启supersetsuperset-worker服务

同时为了可以公共读(不登陆),需要配置Public角色下列权限(因需要可自行调整权限)

配置完成后superset图表可以实现匿名访问