资讯详情

资讯详情

使用 Helm 在 Kubernetes 上自托管部署 ZenML Pro 控制平面

使用 Helm 在 Kubernetes 上自托管部署 ZenML Pro 控制平面【免费下载链接】zenmlZenML : One AI Platform from Pipelines to Agents. https://zenml.io.项目地址: https://gitcode.com/GitHub_Trending/ze/zenmlZenML Pro 支持完全自托管的部署形态控制平面、工作区服务器、数据库、存储与计算全部运行在你自己的 Kubernetes 集群与基础设施内部实现零外部依赖与数据主权。本文以仓库中 部署文档 为主线完整讲解从前置条件、Helm Values 配置、控制平面安装上线、超级用户引导到工作区接入与 CLI 登录的全流程并结合仓库内 Helm Chart 与源码给出参数背后的实现细节。部署架构一切组件都运行在你的基础设施中自托管部署的核心特征在 Self-hosted Deployment Overview 中定义得很明确所有组件、元数据与 ML 制品都留在你的基础设施边界之内运行不需要任何互联网连接适用于有数据驻留、合规或完全隔离网络要求的场景。架构组件按命名空间划分的职责从 部署文档 的架构描述可以拆出如下四类运行单元命名空间 / 层承载组件职责客户端访问层浏览器访问的 ZenML UI 控制台开发者笔记本或 CI 系统到工作区的连接用户交互与 API 调用入口zenml-controlplane-namespaceUI PodZenML Pro UI连接控制平面与所有工作区Control Plane PodAPI Server 与用户管理 / RBAC控制平面组织、用户、RBAC、工作区协调zenml-workspace-namespaceWorkspace Server PodZenML API Server与 Workload Manager管理流水线、Stack 与快照工作区流水线元数据与执行管理zenml-runners-namespace/orchestrator-namespace按需创建的 Runner Pod快照执行、使用 Kubernetes orchestrator 时的 Orchestrator Pod流水线实际执行数据与存储层MySQL 数据库TCP 3306存储控制平面与工作区的元数据可选 Secrets 后端如 AWS Secrets Manager 或 HashiCorp Vault集中存放凭据制品存储S3、GCS 或 Azure Blob保存模型、数据集与流水线制品容器镜像仓库AWS ECR、Google Artifact Registry 或 Azure Container Registry存放流水线镜像。与仓库 Helm Chart 的对应关系仓库自带的开源 ZenML Helm ChartChart.yaml当前版本0.96.3是工作区服务器部署的基础。在 server-deployment.yaml 中可以看到 API Server 容器实际以uvicorn zenml.zen_server.zen_server_api:app启动监听8080端口并通过/health与/ready探针做存活与就绪检查——这也对应了控制平面部署后“等待所有 Pod 处于 Running 且健康”的验证步骤。前置条件在动手之前应先阅读 自托管部署通用前置条件收集好制品与信息。针对 Kubernetes Helm 部署本指南列出的特定要求如下基础设施Kubernetes 集群1.24网络负载均衡器、网络网关或 Ingress 控制器等内部 DNS 解析由内部 CA 签发的 TLS 证书或自签名证书集群组件之间的网络连通性工具在可访问互联网的机器上用于初始安装Helm3.0镜像仓库访问先申请再拉取ZenML Pro 控制平面的两个组件zenml-pro-api与zenml-pro-dashboard共用同一版本号如0.13.0镜像私有托管在 ZenML 的 GCP Artifact Registry 与 AWS ECR 仓库中访问权限按申请授予联系 cloudzenml.ioGCP Artifact Registryeurope-west3-docker.pkg.dev/zenml-cloud/zenml-pro/zenml-pro-api:version、europe-west3-docker.pkg.dev/zenml-cloud/zenml-pro/zenml-pro-dashboard:versionAWS ECR715803424590.dkr.ecr.eu-west-1.amazonaws.com/zenml-pro-api:version、715803424590.dkr.ecr.eu-west-1.amazonaws.com/zenml-pro-dashboard:version认证方式有三种AWS IAM Role推荐给 AWS 工作负载支持 EKS IRSA / ECS 任务执行角色 / EC2 实例配置角色、GCP Service Account推荐给 GCP 工作负载支持 Workload Identity / Cloud Run / Compute Engine、Docker 凭据其他环境。zenml-proHelm Chart 则公开托管于 ECR 的oci://public.ecr.aws/zenml/zenml-pro。关于镜像 Tag 的版本同步前置条件文档强调了一个容易踩坑的点控制平面镜像 Tag 与 ZenML Pro Helm Chart 版本是同步的。若使用内部镜像仓库重新打 Tag 时务必保留原版本号以维持组件间兼容。安装 ZenML Pro 控制平面安装过程分为五个步骤创建 Kubernetes Secrets、配置 Helm Values、用 Helm 部署、引导控制平面创建超级用户、部署并注册工作区。Step 1创建 Kubernetes Secrets如果使用内部容器镜像仓库需要先创建 Secret 以允许控制平面与工作区服务器拉取镜像# 为 ZenML Pro 创建命名空间 kubectl create namespace zenml-pro # 为内部仓库凭据创建 Secret如需 kubectl -n zenml-pro create secret docker-registry image-pull-secret \ --docker-serverinternal-registry.mycompany.com \ --docker-usernameyour-username \ --docker-passwordyour-password该 Secret 会在下一步 Helm Values 的imagePullSecrets中被引用。在仓库的 server-deployment.yaml 中imagePullSecrets会被直接渲染进 Pod 规格因此集群节点从私有仓库拉取镜像时会自动带上这些凭据。Step 2配置控制平面的 Helm Values以下是控制平面 Helm Chart 的基础配置。完整可配置项可查阅 ZenML Pro Helm Chart 参考ArtifactHub 上的zenml-pro/zenml-pro。# 设置 imagePullSecrets 以认证到存放 ZenML Pro 容器镜像的仓库见上一步 imagePullSecrets: - name: image-pull-secret # ZenML Pro 服务器相关选项。 zenml: image: api: # 改成你自己的容器仓库 repository: internal-registry.mycompany.com/zenml/zenml-pro-api # 或直接使用 GAR # repository: europe-west3-docker.pkg.dev/zenml-cloud/zenml-pro/zenml-pro-api # 或直接使用 AWS ECR # repository: 715803424590.dkr.ecr.eu-west-1.amazonaws.com/zenml-pro-api # 仅当需要覆盖默认 Tag 时使用默认值等于 Helm Chart 的 appVersion。 # tag: ZENML_PRO_VERSION dashboard: repository: internal-registry.mycompany.com/zenml/zenml-pro-dashboard # repository: europe-west3-docker.pkg.dev/zenml-cloud/zenml-pro/zenml-pro-dashboard # repository: 715803424590.dkr.ecr.eu-west-1.amazonaws.com/zenml-pro-dashboard # tag: ZENML_PRO_VERSION # 控制平面 API 与 UI 可达的外部 URL。 # 应设置为与 Ingress 控制器、负载均衡器或任何网络网关关联的主机名。 serverURL: https://zenml-pro.internal.mycompany.com # 数据库配置。 database: # 连接外部 Postgres 或 MySQL 数据库的凭据。 external: # 外部数据库服务类型 # - postgres: 外部 Postgres 数据库 # - mysql: 外部 MySQL 数据库 type: mysql # 外部数据库服务主机 host: mysql.internal.mycompany.com # 连接数据库的用户名 username: zenml_pro_user # 连接数据库的密码 password: secure-password # 使用的数据库名。若不存在首次运行时会自动创建。 # 注意若数据库用户没有创建数据库的权限需在安装 Helm Chart 前手动创建。 database: zenml_pro auth: sso: # 若使用外部 OIDC 身份提供商启用 SSO 认证。 # 前置条件与配置细节见 SSO 指南。 enabled: true oidcConfigurationEndpoint: https://idp.example.com/.well-known/openid-configuration clientID: your-oidc-client-id clientSecret: your-oidc-client-secret password: # 若使用本地账户启用密码认证。 # 部署完成后会创建一个 admin 账户并生成随机密码。 enabled: true # 自定义安装时创建的默认 admin 用户密码。 # 若不指定则生成随机密码。 adminPassword: # Ingress 配置若使用 Ingress 控制器。 ingress: enabled: true # 使用与 serverURL 相同的主机名 host: zenml-pro.internal.mycompany.com最少必需设置数据库凭据zenml.database.external控制平面 API 与 UI 的可达 URLzenml.serverURL可能相关的进阶设置配置容器仓库凭据imagePullSecrets注入自定义 CA 证书zenml.certificates——当 ZenML Pro 服务的 TLS 证书由自定义 CA 签发时尤其重要配置 HTTP 代理zenml.proxy自定义镜像仓库位置zenml.image.api与zenml.image.dashboard默认 admin 账户的用户名密码zenml.auth.passwordSSO 认证设置zenml.auth.sso——前置条件与从密码认证迁移见 Single Sign-On (SSO) 指南更多 Ingress 设置zenml.ingressPod 的 Kubernetes 资源配额resources若为所有 ZenML Pro 服务规划了公共 DNS 前缀可通过zenml.auth.authCookieDomain将 Dashboard 的 HTTP Cookie 域配置为该前缀例如.my.domain而非zenml-pro.my-domain自定义 CA 证书的底层实现文档特别强调zenml.certificates对于内部 CA 签名的场景至关重要。仓库的 server-deployment.yaml 展示了它的实现方式当配置了customCAs或secretRefs时Chart 会注入一个名为update-ca-certificates的 initContainer将系统 CA 包与所有自定义证书合并追加到/updated-certs/ca-certificates.crt再挂载进主容器。也就是说自定义 CA 会在服务启动前被烘焙进容器的信任链中。Step 3使用 Helm 部署控制平面使用远程 Helm Chart可访问互联网时helm install zenml-pro oci://public.ecr.aws/zenml/zenml-pro \ --namespace zenml-pro \ --create-namespace \ --values zenml-pro-values.yaml \ --version ZENML_PRO_VERSION使用本地 Helm Chart已提前下载 Chart 时helm install zenml-pro ./zenml-pro-ZENML_PRO_VERSION.tgz \ --namespace zenml-pro \ --create-namespace \ --values zenml-pro-values.yaml验证部署kubectl -n zenml-pro get pods kubectl -n zenml-pro get svc kubectl -n zenml-pro get ingress等待所有 Pod 处于 Running 且健康状态。Step 4引导 ZenML Pro 控制平面创建首个超级用户下一步是创建你的第一个超级用户账户。什么是超级用户超级用户是拥有额外权限的特殊账户可以绕过 RBAC 限制为整个 ZenML Pro 实例创建和管理其他用户账户、组织与工作区资源。超级用户权限之后可以授予其他用户也可以在不需要时收回。你将使用该账户登录 ZenML Pro UI 完成上线引导任务创建一个或多个组织。配置 SSO 后组织的可信域名通过 API可以改变用户发现方式以及部分邀请是否需要显式接受。创建用户账户和/或邀请其他用户加入组织。为用户分配角色与权限或将用户分组为团队。在组织中注册工作区。创建初始超级用户的方式取决于你使用的是 SSO 认证还是密码认证。方式一使用 SSO 认证如果启用了 SSO直接访问 ZenML Pro UI通过 SSO 登录流程向身份提供商完成认证即可。使用 SSO 登录的第一个账户将被自动授予超级用户权限。方式二使用密码认证如果只启用了密码认证系统会保留一个 admin 账户用于创建第一个本地超级用户。如何访问该 admin 账户的说明会打印在 Helm Chart 部署后的输出中You may access the ZenML Pro server at: https://zenml-pro.my.domain Use the following credentials: Username: admin Password: fetch the password by running: kubectl get secret --namespace zenml-pro zenml-pro -o jsonpath{.data.ZENML_CLOUD_ADMIN_PASSWORD} | base64 --decode; echo警告admin 账户只应用于初始引导与涉及超级用户管理的应急运维操作创建第一个超级用户、在需要时授予其他用户超级用户权限。其他所有操作请使用普通用户账户。创建和管理本地用户账户目前只能通过 ZenML Pro OpenAPI 接口或编程方式访问 ZenML Pro API 完成ZenML Pro UI 暂不支持。OpenAPI 接口方式在浏览器中访问 ZenML Pro 服务器 URL 并追加/api/v1路径例如https://zenml-pro.my.domain/api/v1然后在 OpenAPI UI 中用 admin 用户名和密码认证。通过向/api/v1/users端点发起请求即可管理本地用户账户。curl 方式先获取 bearer token再用它创建超级用户# 用 admin 凭据获取 bearer token curl -X POST https://zenml-pro.my.domain/api/v1/auth/login \ -H Content-Type: application/x-www-form-urlencoded \ -d usernameadminpasswordadmin-password响应中包含access_token字段用它创建新的超级用户账户# 创建新的超级用户账户 curl -X POST https://zenml-pro.my.domain/api/v1/users?usernamesuperuserpasswordpasswordis_superusertrue \ -H Authorization: Bearer access-tokenStep 5部署并注册工作区控制平面引导完成后即可部署并注册一个或多个工作区。工作区的部署与注册流程见 在 Kubernetes 上部署工作区其中需要用到自托管部署时使用的控制平面 URLZenML Pro 控制平面 UIhttps://zenml-pro.internal.mycompany.comZenML Pro 控制平面 APIhttps://zenml-pro.internal.mycompany.com/api/v1s补充说明工作区服务器构建在开源 ZenML 服务器之上使用开源zenmlHelm Chart 部署核心差异仅在于连接控制平面的server.pro.*配置apiURL、dashboardURL、enrollmentKey、organizationID/Name、workspaceID/Name且其数据库仅支持 MySQL。仓库的 values.yaml 中server.pro段即为此而设pro.enabled: true时会覆盖zenml段中的部分默认配置。从 ZenML CLI 访问工作区要用 ZenML CLI 登录工作区需要传入自定义的 ZenML Pro API URLzenml login --pro-api-url https://zenml-pro.internal.mycompany.com/api/v1或者设置ZENML_PRO_API_URL环境变量export ZENML_PRO_API_URLhttps://zenml-pro.internal.mycompany.com/api/v1 zenml login这个机制在源码层面有明确对应src/zenml/login/pro/constants.py定义了ZENML_PRO_API_URL环境变量默认值为https://cloudapi.zenml.io即 SaaS 场景当环境变量或--pro-api-url参数传入自托管地址时cli/login.py 中的--pro-api-url选项就会覆盖默认值把 CLI 指向你的自托管控制平面。Day 2 运维ZenML Pro 各组件的升级操作参见 Upgrades Updates 指南。自托管场景下升级通常以离线 Bundle 的形式提供先接收新版本 Bundle通常通过经批准的传输方式拉取 Docker 镜像审阅发布说明与迁移指南在预发布环境测试备份当前数据库与配置状态再用 Helm upgrade 命令或 IaC 工具应用更新最后通过健康检查与测试验证功能并监控升级后的异常。支持与更多资源自托管部署可联系 ZenML 支持cloudzenml.io并提供部署状态、配置细节与错误日志。可向 ZenML 申请部署前架构咨询、离线支持包、更新 Bundle 与发布说明、安全文档SBOM、漏洞报告。相关资源自托管部署总览部署前置条件与准备在 Kubernetes 上部署工作区ZenML 开源 Helm Chart 的默认 Values 参考【免费下载链接】zenmlZenML : One AI Platform from Pipelines to Agents. https://zenml.io.项目地址: https://gitcode.com/GitHub_Trending/ze/zenml创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →