ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Helm 部署 JFrog Distribution:stable/distribution Chart 完整安装、外部数据库与 TLS 配置实战指南

Helm 部署 JFrog Distribution:stable/distribution Chart 完整安装、外部数据库与 TLS 配置实战指南 【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载本指南以当前仓库中 stable/distribution/README.md 为核心系统讲解如何在 Kubernetes 上通过 Helm 部署 JFrog Distribution包含 distribution 与 distributor 两个核心组件及其依赖的 MongoDB、Redis并深入剖析 values.yaml 中的全部配置参数、外部数据库接入方式、Master Key 唯一化以及 Ingress/TLS 配置。读者读完本文将能够独立完成该 Chart 的安装、升级、参数定制与问题排查并理解其底层模板实现templates 目录的运作原理。注意本 Chart 已在仓库中被标记为DEPRECATED详见 Chart.yaml 中的deprecated: true与注释说明新版本由 jfrog/charts 项目维护。若用于新环境建议优先使用上游新 Chart本文所述内容以当前仓库中 0.4.3 版本的实现为准仍可作为理解 JFrog Distribution 在 Kubernetes 上部署架构与配置原理的参考资料。Chart 组件架构一次部署四个核心组件依据 Chart Details 一节 的定义本 Chart 在helm install后会在集群内完成以下四类组件的部署MongoDB 数据库由子 Chart 提供用于存储 Distribution 的业务数据Redis由子 Chart 提供作为缓存与任务队列存储distributor负责将制品从源 Artifactory 分发到目标边缘节点EdgedistributionJFrog Distribution 主服务对外提供分发任务的编排与管理 API。这四个组件通过 requirements.yaml 以依赖方式引入子 Chartdependencies: - name: mongodb version: 2.0.5 repository: https://kubernetes-charts.storage.googleapis.com/ condition: mongodb.enabled - name: redis version: 1.1.21 repository: https://kubernetes-charts.storage.googleapis.com/ condition: redis.enabled注意其中的condition: mongodb.enabled与condition: redis.enabled这正是 README 中外部数据库章节能够通过--set mongodb.enabledfalse或--set redis.enabledfalse关闭内置子 Chart 的底层机制——Helm 会根据该 condition 判断是否渲染对应的依赖 Chart。从模板实现看distribution-statefulset.yaml、distributor-statefulset.yamldistribution 与 distributor 均以StatefulSet方式部署apiVersion: apps/v1beta2updateStrategy: RollingUpdate默认replicas: 1并各自挂载独立的数据卷。主服务通过 Service 暴露distribution-svc.yaml默认端口映射为外部 80 → 内部 8080。前置条件Prerequisites根据 README 的 Prerequisites Details 与 Requirements 章节部署前需满足Kubernetes 1.8一个正在运行的 Kubernetes 集群已启用动态存储供给Dynamic storage provisioning且已设置默认 StorageClass以便服务能够通过默认 StorageClass 申请持久化存储一个正在运行的Artifactory Enterprise Plus实例Distribution 依赖 Artifactory 作为制品源已安装并配置好可访问集群的kubectl已安装并配置好helm对应用户需先执行helm init。安装 Chart以 release 名称distribution安装helm install --name distribution stable/distribution访问 Distribution安装完成后Distribution 的对外 IP 可能需要在几分钟后才可用节点完成初始化也需要一定时间。请根据安装命令输出的指引获取 Distribution 的 IP 与访问 URL。实际模板在 NOTES.txt 中会根据distribution.service.type的取值输出三种不同的访问方式LoadBalancerkubectl get svc -w release观察 Service 状态然后通过SERVICE_IP访问http://$SERVICE_IP:80/NodePort通过NODE_IP:NODE_PORT访问ClusterIP使用kubectl port-forward将本地端口转发到 Pod 后访问。模板中的默认凭据为用户名admin密码password仅适用于初始登录生产环境务必修改。升级 Distribution当获取到新的 Chart 版本后可通过以下命令升级已有部署helm upgrade distribution stable/distribution生成唯一 Master KeyJFrog Distribution 要求集群内所有微服务共享同一个Master Key。Chart 默认在 values.yaml 中内置了一个用于演示的 Keydistribution.masterKey字段值为一串B字符占位该 Key 仅用于演示严禁在生产环境使用建议在安装/升级时生成唯一 Key 并通过--set传入# 生成 256 位64 个十六进制字符随机 Key $ export MASTER_KEY$(openssl rand -hex 32) $ echo ${MASTER_KEY} # 将生成的 Key 传给 Helm $ helm install --set distribution.masterKey${MASTER_KEY} -n distribution stable/distribution注意后续所有helm install与helm upgrade调用都必须携带相同的--set distribution.masterKey${MASTER_KEY}否则会导致各微服务之间密钥不一致而无法通信。从源码看Master Key 的注入发生在 distribution-statefulset.yaml 的DEFAULT_JAVA_OPTS环境变量中模板会渲染出-Djfrog.master.keymasterKey的 JVM 参数该文件同时渲染-Ddistribution.homemountPath、-Duser.timezoneUTC与-Dspring.profiles.activeproduction等生产环境参数并支持通过distribution.javaOpts.xms/distribution.javaOpts.xmx注入-Xms/-Xmx堆内存配置注意注释中的提醒xmx不应高于resources.limits.memory。使用外部数据库External DatabasesChart 支持为 Distribution 接入外部 MongoDB 或 PostgreSQL经由连接 URL 语义也支持接入外部 Redis。核心思路是关闭内置子 Chart并传入对应的连接 URL。外部 MongoDB使用外部 MongoDB 时需要关闭内置 MongoDB 子 Chart并通过global.mongoUrl与global.mongoAuditUrl传入业务库与审计库两个连接串参数mongodb.enabledfalse,global.mongoUrl${DISTRIBUTION_MONGODB_CONN_URL},global.mongoAuditUrl${DISTRIBUTION_MONGODB_AUDIT_URL}重要在部署 Distribution 服务之前请确保外部数据库已提前创建完成。# 为 Distribution 传入自定义 MongoDB # 示例 # MongoDB 主机: custom-mongodb.local # MongoDB 端口: 27017 # MongoDB 用户: distribution # MongoDB 密码: password1_X $ export DISTRIBUTION_MONGODB_CONN_URLmongodb://${MONGODB_USER}:${MONGODB_PASSWORD}custom-mongodb.local:27017/${MONGODB_DATABSE} $ export DISTRIBUTION_MONGODB_AUDIT_URLmongodb://${MONGODB_USER}:${MONGODB_PASSWORD}custom-mongodb.local:27017/audit?maxpoolsize500 $ helm install -n distribution --set global.mongoUrl${DISTRIBUTION_MONGODB_CONN_URL},global.mongoAuditUrl${DISTRIBUTION_MONGODB_AUDIT_URL} stable/distribution注意示例中的${MONGODB_USER}、${MONGODB_PASSWORD}、${MONGODB_DATABSE}为占位符实际使用时请替换为真实值。从模板实现看连接串并非直接注入环境变量而是先由 _helpers.tpl 中的mongodb.url/mongodb.audit.url两个模板函数计算最终 URL优先取global.mongoUrl/global.mongoAuditUrl否则基于内置 MongoDB 的用户名密码拼装再经 mongo-connection-secret.yaml 以Opaque Secret的mongo_connectionString/audit_mongo_connectionString两个 key 存储最终由 distribution 的 StatefulSet 通过secretKeyRef挂载为mongo_connectionString与audit_mongo_connectionString环境变量。外部 Redis使用外部 Redis 时需要禁用内置 Redis 子 Chart并通过global.redisUrl传入连接串参数redis.enabledfalse与global.redisUrl${DISTRIBUTION_REDIS_CONN_URL}重要部署前请确保外部数据库已提前创建完成。# 为 Distribution 传入自定义 Redis # 示例 # Redis 主机: custom-redis.local # Redis 端口: 6379 # Redis 密码: password2_X $ export DISTRIBUTION_REDIS_CONN_URLredis://:${REDIS_PASSWORD}custom-redis.local:6379 $ helm install -n distribution --set redis.enabledfalse,global.redisUrl${DISTRIBUTION_REDIS_CONN_URL} stable/distributionRedis 连接串的生成逻辑同样位于 _helpers.tpl 的redis.url模板函数中优先global.redisUrl否则使用内置 Redis 的密码与端口拼装并经 redis-connection-secret.yaml 以 Secret 的redis_connectionString注入到 distribution 与 distributor 两个组件的redis_connectionString环境变量。关于内置子 Chart 的密码约束若使用内置 MongoDB/Redis即不设置global.mongoUrl等_helpers.tpl中的mongodb.url、mongodb.audit.url、redis.url模板函数会通过required强制要求提供密码.Values.mongodb.mongodbPassword必填否则渲染时报A valid .Values.mongodb.mongodbPassword entry required!.Values.redis.redisPassword必填否则报A valid .Values.redis.redisPassword entry required!。因此使用内置数据库时务必通过--set mongodb.mongodbPassword... --set redis.redisPassword...或自定义 values.yaml 提供密码。仓库中 ci/test-values.yaml 给出了 CI 验证用的最小取值示例mongodb: mongodbRootPassword: password mongodbPassword: password redis: redisPassword: password distributor: token: JWT token 示例完整配置参数表README 的 Configuration 章节 给出了核心参数表。以下在完整继承该表的基础上补充 values.yaml 中实际存在但 README 未列出的参数以「(values.yaml 补充)」标注。所有参数均可通过--set keyvalue[,keyvalue]传递给helm install。参数说明默认值imagePullSecretsDocker registry 拉取密钥空serviceAccount.create是否创建 ServiceAccounttrueserviceAccount.name使用的 ServiceAccount 名称由 fullname 模板生成rbac.create是否创建 RBAC 资源truerbac.role.rules要创建的 RBAC 规则[]values.yaml 中默认含 services/endpoints/pods 的 get/watch/list 权限ingress.enabled是否创建 Ingressfalseingress.annotationsIngress 注解{}ingress.hostsIngress 主机名列表[]values.yaml 中示例为distribution.domain.exampleingress.tlsIngress TLS 配置YAML[]mongodb.enabled是否启用内置 MongoDBtruemongodb.image.tagMongoDB 镜像 tag3.6.3mongodb.image.pullPolicyMongoDB 拉取策略IfNotPresentmongodb.persistence.enabled是否启用 MongoDB 持久化truemongodb.persistence.existingClaim使用已有 PVC 持久化nilmongodb.persistence.storageClass底层 PVC 的 StorageClassgenericmongodb.persistence.sizeMongoDB 持久化卷大小10Gimongodb.livenessProbe.initialDelaySecondsliveness 探针启动延迟40mongodb.readinessProbe.initialDelaySecondsreadiness 探针启动延迟30mongodb.mongodbExtraFlagsMongoDB 附加命令行参数[--wiredTigerCacheSizeGB1]mongodb.usePassword是否启用密码认证falsemongodb.mongodbDatabaseDistribution 使用的数据库名bintraymongodb.mongodbRootPasswordroot 用户密码空mongodb.mongodbUsernameDistribution 数据库用户distributionmongodb.mongodbPasswordDistribution 数据库用户密码空redis.enabled是否启用内置 Redistrueredis.redisPasswordRedis 密码空redis.master.portRedis 端口6379redis.persistence.enabled是否使用 PVC 持久化trueredis.persistence.existingClaim使用已有 PVC 持久化nilredis.persistence.storageClass底层 PVC 的 StorageClassgenericredis.persistence.sizeRedis 数据卷大小10Gidistribution.nameDistribution 组件名称distributiondistribution.replicaCount(values.yaml 补充)Distribution 副本数1distribution.image.pullPolicy容器拉取策略IfNotPresentdistribution.image.repository容器镜像docker.bintray.io/jfrog/distribution-distributionREADME 中写作docker.jfrog.io/jf-distribution以 values.yaml 实际值为准distribution.image.version容器镜像 tag默认取 ChartappVersion: 1.1.0distribution.service.typeService 类型LoadBalancerdistribution.externalPortService 对外端口80distribution.internalPort容器内部端口8080distribution.masterKey(values.yaml 补充)集群统一 Master Key演示用占位 Key生产必须替换distribution.env.artifactoryUrlArtifactory 地址空distribution.env.btServerUrl(values.yaml 补充)BT Server 地址空distribution.env.artifactoryEdge1Url/2/3Url、artifactoryCi1Url(values.yaml 补充)各 Edge / CI Artifactory 地址空distribution.persistence.mountPath数据卷挂载路径/var/opt/jfrog/distributionREADME 中写作/jf-distribution以 values.yaml 实际值为准distribution.persistence.enabled是否启用持久化truedistribution.persistence.storageClass持久化卷 StorageClassnil使用默认 provisionerdistribution.persistence.existingClaim使用已有 PVCnildistribution.persistence.accessMode访问模式ReadWriteOncedistribution.persistence.size持久化卷大小50Gidistribution.javaOpts.xms/xmx(values.yaml 补充)JVM 堆内存-Xms/-Xmx空distributor.nameDistributor 组件名称distributordistributor.replicaCount(values.yaml 补充)Distributor 副本数1distributor.image.pullPolicy容器拉取策略IfNotPresentdistributor.image.repository容器镜像docker.bintray.io/jfrog/distribution-distributorREADME 中写作docker.jfrog.io/jf-distribution以 values.yaml 实际值为准distributor.image.version容器镜像 tag默认取 ChartappVersion: 1.1.0distributor.tokenDistributor 认证 token空distributor.persistence.mountPath数据卷挂载路径/var/opt/jfrog/distributorREADME 中写作/bt-distributor以 values.yaml 实际值为准distributor.persistence.existingClaim使用已有 PVCnildistributor.persistence.storageClassStorageClassnil使用默认 provisionerdistributor.persistence.enabled是否启用持久化truedistributor.persistence.accessMode访问模式ReadWriteOncedistributor.persistence.size持久化卷大小50Gidistributor.javaOpts.xms/xmx(values.yaml 补充)Distributor JVM 堆内存空initContainerImage(values.yaml 补充)init 容器镜像用于等待依赖就绪alpine:3.6global.mongoUrl(values.yaml 补充)外部 MongoDB 连接串空global.mongoAuditUrl(values.yaml 补充)外部 MongoDB 审计库连接串空global.redisUrl(values.yaml 补充)外部 Redis 连接串空参数说明补充storageClass 语义源码见 distribution-statefulset.yaml 与 distributor-statefulset.yaml若设置storageClass: -模板会渲染storageClassName: 以禁用动态供给若未定义或为nil则不带storageClassName字段交由集群默认 provisionerAWS 上通常为 gp2GKE 为 standard。MongoDB 的 wiredTiger 缓存values.yaml 注释明确提醒--wiredTigerCacheSizeGB不应超过内存限制limits的一半否则可能被 Kubernetes 因 OOMKill 杀死。资源与堆内存distribution 与 distributor 均支持resources与javaOpts配置模板会在DEFAULT_JAVA_OPTS中拼接-Xms/-Xmx务必将xmx控制在resources.limits.memory以内。探针distribution 的 readiness 探针访问/api/v1/system/ping初始延迟 60s、周期 10s、失败阈值 10liveness 探针同为该路径初始延迟 180s、周期 10s——这是判断 Distribution 是否健康就绪的官方探测路径。配置 Ingress 与 TLS启用 Ingress要创建带主机名的 Ingress 对象可向 Helm 命令添加以下参数helm install --name distribution \ --set ingress.enabledtrue \ --set ingress.hosts[0]distribution.company.com \ --set distribution.service.typeNodePort \ stable/distribution若集群支持自动创建/获取 TLS 证书例如基于 cert-manager 的机制可参照对应机制的文档配置自动 TLS。手动配置 TLS如需手动配置 TLS首先为需要保护的主机名创建/获取密钥与证书对然后在命名空间中创建 TLS Secretkubectl create secret tls distribution-tls --certpath/to/tls.cert --keypath/to/tls.key然后将 Secret 名称与目标主机名写入自定义values.yaml的 Ingress TLS 段ingress: ## 为 true 时创建 Distribution Ingress ## enabled: true ## Distribution Ingress 主机名 ## 启用 Ingress 时必须提供 ## hosts: - distribution.domain.com annotations: kubernetes.io/tls-acme: true ## Distribution Ingress TLS 配置 ## Secret 必须提前在命名空间中手动创建 ## tls: - secretName: distribution-tls hosts: - distribution.domain.com对应的 ingress.yaml 模板实现如下当ingress.enabledtrue时渲染extensions/v1beta1的 Ingress 对象默认backend指向 distribution 服务servicePort取distribution.externalPort当提供ingress.hosts时为每个主机生成rules规则当提供ingress.tls时将配置原样toYaml渲染到tls段。部署机制源码解读模板如何协作为了让读者深入理解一次部署四组件的实现这里梳理 templates 目录下各模板文件的职责_helpers.tpl定义全部命名模板包括distribution.name/distribution.fullname遵循 DNS 规范的 63 字符截断、distributor.fullname、mongodb.url/mongodb.audit.url/redis.url连接串拼装与 base64 编码、distribution.serviceAccountName、distribution.chartchart 名与版本标签等distribution-statefulset.yamldistribution 主服务 StatefulSet。其init 容器init-data基于initContainerImage会循环等待mongodb:27017与redis:6379端口可达后才启动主容器主容器通过secretKeyRef从两个连接 Secret 读取 MongoDB/Redis 连接串并注入BT_ARTIFACTORY_URL、BT_SERVER_URL以及可选的artifactory_edge_*、artifactory_ci_*环境变量distributor-statefulset.yamldistributor StatefulSet。其 init 容器prepare-data等待 Redis 就绪并在配置了distributor.token时将 token 复制到挂载路径下的etc/security/token权限400并chown 1020:1020主容器的BT_SERVER_URL自动指向同 release 的 distribution 服务http://distribution-fullname:80distributor-token.yaml当distributor.token非空时生成一个 ConfigMap用于承载 distributor 的认证 tokenmongo-connection-secret.yaml 与 redis-connection-secret.yaml分别生成承载 MongoDB含审计库与 Redis 连接串的 Opaque Secretdistribution-pvc.yaml / distributor-pvc.yamlPVC 资源配合 StatefulSet 的volumeClaimTemplates逻辑distribution-serviceaccount.yaml、distribution-role.yaml、distribution-rolebinding.yamlServiceAccount 与 RBAC 资源values.yaml 默认授予 services/endpoints/pods 的 get/watch/list 权限distribution-svc.yamlDistribution 对外 Serviceport取externalPort、targetPort取internalPortingress.yaml条件渲染的 Ingress 资源NOTES.txt安装成功后输出的访问指引与默认凭据admin / password。废弃状态与迁移建议该 Chart 已在 Chart.yaml 中被标记为deprecated: true版本为0.4.3appVersion为1.1.0注释明确指出 Chart 现已迁移至 jfrog/charts 项目维护。因此存量部署可参考本文档完成日常升级与配置调整新建环境建议迁移到上游新 Chart避免继续使用本仓库中已废弃的版本迁移前请先梳理本文档列出的关键参数Master Key、MongoDB/Redis 连接、Ingress/TLS、持久化卷确保新环境配置一致尤其是Master Key 必须在同一集群的所有微服务间保持一致。结语通过本文读者应已掌握Distribution Chart 的四组件部署拓扑、安装/升级/访问流程、Master Key 唯一化方法、内置 vs 外部数据库MongoDB/Redis的切换方式、完整的参数清单与存储/资源/探针配置要点以及 Ingress/TLS 的手动配置路径。如需进一步深入可结合仓库中 values.yaml、requirements.yaml 以及 templates 目录下的模板源码逐一验证本文引用的实现细节。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐JFrog Distribution Helm Chart 部署指南从 incubator 到生产环境的完整实践JFrog Distribution Helm Chart 部署指南从 incubator 到生产环境的完整实践 本文以 charts 仓库中 incubatVolcano 安装部署实战指南YAML 与 Helm Chart 完整配置解析Volcano 安装部署实战指南YAML 与 Helm Chart 完整配置解析 本文以 VolcanoCNCF 云原生批处理系统官方安装文档为主体系统云原生后端任务调度批处理Bitnami ClickHouse Helm Chart 完整部署指南集群、Keeper、TLS 与监控配置实战Bitnami ClickHouse Helm Chart 完整部署指南集群、Keeper、TLS 与监控配置实战 本指南以本仓库 Bitnami Click云原生容器编排上一篇SWTableViewCell框架的单元测试策略确保核心功能稳定性的方法下一篇Floccus配置文件终极指南掌握manifest.json与capacitor.config.json的完整配置教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表