ARTICLE DETAIL

资讯详情

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

使用 puppet-forge Helm Chart 在 Kubernetes 上部署本地 Puppet 模块仓库并代理官方 Forge

使用 puppet-forge Helm Chart 在 Kubernetes 上部署本地 Puppet 模块仓库并代理官方 Forge 【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载本文档面向需要在 Kubernetes 集群中分发本地开发的 Puppet 模块、同时保留访问官方 Puppet Forge 能力的运维与平台工程团队。本指南以incubator/puppet-forge这一 Helm Chart 为核心完整说明其工作原理、容器使用方式、全部环境变量与 values 配置项、持久化方案及网络暴露方式并结合 Chart 内的模板源码values.yaml、deployment.yaml、configmap.yaml 等给出源码级的配置依据。读完本文你将能够独立完成一个可代理上游 Forge 的本地 Puppet 模块仓库的 Docker 启动与 Helm 部署。Chart 定位本地模块分发 上游 Forge 代理puppet-forge是 charts 仓库incubator/目录下的一个 Helm Chart其核心使命在 Chart.yaml 的描述中写得很清楚Distribute locally developed Puppet modules and proxy to the official Puppet Forge server——既能把本地开发的 Puppet 模块发布出去又能把未能命中的请求代理到上游 Puppet Forge通常是 Puppetlabs 官方服务器。从实现上看这个 Chart 部署的是 GitHub 上开源项目puppet_forge_server的容器镜像镜像hickey/puppet_forgeChart 版本0.1.10对应应用版本1.10.0。容器本身是一个 Ruby 服务具备两类能力本地模块仓库将存放在指定目录默认/puppet/modules中的本地 Puppet 模块通过 Forge API 的形式对外提供反向代理配置上游地址后把本地不存在的模块请求透明地代理到官方 Forge 服务器实现本地优先、上游兜底的模块获取链路。需要特别留意的是该 Chart 已标记为deprecated: true仓库层面的归档通知与 Chart 内的弃用声明都表明它不再维护更新详见 README.md 中的 Repo Archive Notice 与 DEPRECATION NOTICE。因此本文内容适合作为理解这类自托管 Forge 服务的架构参考或用于在旧版本 Kubernetes 环境中的存量部署场景。容器级使用无需 Kubernetes 也能跑起一个 Forge原文档对容器本身的行为给出了完整说明这是理解 Chart 一切配置的基础。默认行为与数据目录容器在不携带任何参数启动时会在8080端口启动 Puppet Forge 服务本地模块存放在/puppet/modules。这里有两个关键的行为差异未挂载卷若没有把外部卷挂载到/puppet/modules所有模块都保存在容器内部容器重启后模块数据会被清空挂载卷一旦指定 volume 挂载模块即可持久保留。服务日志始终存放在/puppet/logs。最小启动命令原文档给出的最简 Docker 启动命令如下docker run -d -p 8080:8080 puppet_forge-d后台运行-p 8080:8080将容器 8080 端口映射到宿主机。参数传递规则容器对启动参数有一套明确的路由逻辑容器名之后以-破折号开头的参数会作为参数原样传给 Puppet Forge 服务其余参数则作为命令在容器上下文中执行。内建元命令容器还内置了几个大小写不敏感的元命令可作为首个参数使用命令行为readme显示本 README 文档info显示本 README 文档与 readme 相同help显示本 README 文档与 readme 相同version打印当前 Puppet Forge 服务器版本配置体系环境变量 → values → ConfigMap 的三层映射原文档用一张表格完整定义了容器的全部配置入口——环境变量。而在 Helm Chart 中这些变量并不需要在 values 中直接设置而是通过 templates/configmap.yaml 生成 ConfigMap再由 templates/deployment.yaml 以configMapKeyRef注入容器。下表为原文档的完整环境变量定义变量默认值说明PUPPET_FORGE_PROXYURL无启用指向 URL 的代理模式PUPPET_FORGE_CACHE_TTLSECS1800指定缓存超时时间秒PUPPET_FORGE_CACHE_SIZENUM250保留的缓存条目数量PUPPET_FORGE_MODULE_DIRDIR/puppet/modules本地模块存储目录在 values.yaml 中对应的配置被组织在puppet_forge键下puppet_forge: url: https://forgeapi.puppetlabs.com/ cache: ttl: 1800 size: 250 module_dir: - /puppet/modules从 templates/configmap.yaml 可以看到三者之间的映射关系puppet_forge.url→ ConfigMap 键puppet_forge_proxy→ 环境变量PUPPET_FORGE_PROXYpuppet_forge.cache.ttl→ ConfigMap 键puppet_forge_cache_ttl→ 环境变量PUPPET_FORGE_CACHE_TTLpuppet_forge.cache.size→ ConfigMap 键puppet_forge_cache_size→ 环境变量PUPPET_FORGE_CACHE_SIZEpuppet_forge.module_dir在 ConfigMap 中仅以注释形式出现说明该 Chart 版本未把模块目录写入 ConfigMap模块目录由 volume 挂载决定见下文持久化小节。Deployment 中对应环境变量的注入方式如下节选自 templates/deployment.yamlenv: - name: PUPPET_FORGE_PROXY valueFrom: configMapKeyRef: name: {{ template fullname . }}-config key: puppet_forge_proxy这一机制意味着调整代理地址、缓存 TTL、缓存容量只需要修改 values 或 ConfigMap无需重新构建镜像。代理模式PUPPET_FORGE_PROXY是唯一没有默认值的变量。默认 values 中puppet_forge.url指向官方地址https://forgeapi.puppetlabs.com/即默认启用代理到官方 Forge的模式。如果你完全离线、只提供本地模块可以在部署时将该值置空以关闭代理。缓存 TTL默认 1800 秒与缓存条目数默认 250则共同控制代理缓存的行为用于减少对上游的重复请求。多模块目录冒号分隔原文档特别强调PUPPET_FORGE_MODULE_DIR支持通过冒号:作为分隔符同时指定多个目录。这在存在多个模块仓库、并希望通过模块晋升module promotion流程流转的场景下非常有用。原文档同时给出了一个重要限制服务端对多个仓库不提供任何访问控制权限需要依靠 Puppetfile 中的引用规则来约束。在 Chart 的 values 中module_dir以 YAML 列表形式声明module_dir: - /puppet/modules如果需要在多个目录间做模块晋升可以扩展为多个条目对应容器侧以冒号拼接同时务必自行设计访问控制策略。Helm 部署Chart 结构与资源编排在 Chart.yaml 中该 Chart 声明了apiVersion: v1、name: puppet-forge、version: 0.1.10与appVersion: 1.10.0关键字为puppet、repository、forge。模板目录 templates/ 中共包含 5 个渲染资源文件与 1 个辅助模板部署后生成的资源如下模板文件生成的资源作用deployment.yamlDeployment运行服务主容器与 init 容器configmap.yamlConfigMap向容器注入代理/缓存配置service.yamlService集群内暴露 8080 服务端口ingress.yamlIngress提供域名/路径路由与 TLS 支持pvc.yamlPersistentVolumeClaim持久化模块数据标准安装方式为使用helm install指定 release 名称并指向该 Chart 目录或已打包的 tgz例如helm install my-forge ./incubator/puppet-forge安装时可通过--set覆盖任意 values 参数例如指定代理地址与副本数helm install my-forge ./incubator/puppet-forge \ --set puppet_forge.urlhttps://forgeapi.puppetlabs.com/ \ --set replicaCount1Deploymentinit 容器、探针与资源限制templates/deployment.yaml 展示了几个值得注意的实现细节init 容器预处理卷部署包含一个名为prep-volume的busyboxinit 容器执行chown -R 1000:1000 /puppet。从源码结构看这是为了确保挂载卷的属主与容器内运行服务的 UID1000一致避免因卷权限不足导致模块目录不可写健康探针主容器同时配置了livenessProbe与readinessProbe均以 HTTP GET 访问根路径/的service.internalPort默认 8080用于故障重启与流量就绪判断资源限制默认 requests 为100mCPU /16Mi内存limits 为200mCPU /32Mi内存可在 values 的resources下按需调整。持久化PVC 与存储类默认persistence.enabled: true且请求8Gi存储templates/pvc.yaml 会创建ReadWriteOnce模式的 PVC挂载到/puppet/modules见 deployment.yaml 中的volumeMounts。这意味着模块数据可以跨 Pod 重启与重新调度存活正好弥补了容器默认重启即清空模块的行为。values 中持久化相关的可选配置还包括persistence: enabled: true size: 8Gi # ExistingClaim: 手动预建的 PVC 名称 # storageclass: - # 指定 StorageClass- 表示禁用动态供给从 pvc.yaml 的模板逻辑可见只有设置了storageclass才会写入storageClassName字段若未设置则交给集群默认 StorageClass 处理如 AWS 上的 gp2、GKE/AWS/OpenStack 上的 standard。Service 与 Ingress如何访问 Forge 服务templates/service.yaml 定义了默认type: NodePort的 Service对外端口externalPort: 80转发到容器端口internalPort: 8080。values 中可切换为LoadBalancer或ClusterIP。ingress.yaml 默认启用ingress.enabled: true支持两种模式配置了ingress.hosts按 host 与 path 生成路由规则指向 Service 的 80 端口未配置 hosts生成一条默认后端backend规则将所有流量转发到该 Service。同时支持通过ingress.annotations添加注解如kubernetes.io/ingress.class: nginx、kubernetes.io/tls-acme: true以及通过ingress.tls挂载手动创建的 TLS Secretvalues 中已注释示例。安装完成后NOTES.txt 会按不同 Service/Ingress 类型打印对应的访问方式例如使用 Ingress 域名时直接输出http://host/pathNodePort 类型时输出NODE_IP:NODE_PORT组合LoadBalancer 类型时提示等待外部 IP 并输出地址ClusterIP 类型时给出kubectl port-forward的命令以在本地访问。命名约定与注意事项辅助模板 templates/_helpers.tpl 定义了标准的 Helm 命名规则name取自 Chart 名并截断到 63 字符fullname为release-chart形式同样受 DNS 命名规范的 63 字符限制。因此 Deployment、Service、ConfigMap、Ingress 等资源会统一使用fullname命名便于关联与排查。综合来看puppet-forge 这套方案的核心价值在于用一份配置同时完成本地模块仓库 上游代理 缓存的完整链路。在规划落地时请务必注意三点前提与限制其一Chart 已弃用、不随新版本 Kubernetes 演进其 Ingress 使用extensions/v1beta1APIingress.yaml在新集群上可能无法直接使用其二多目录模式没有内置访问控制需通过 Puppetfile 约束权限其三默认代理指向官方forgeapi.puppetlabs.com离线或内网环境应显式调整puppet_forge.url。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐Helm 实战使用 MariaDB 官方 Chart 在 Kubernetes 上部署高可用数据库集群Helm 实战使用 MariaDB 官方 Chart 在 Kubernetes 上部署高可用数据库集群 本指南以当前仓库中随测试样例附带的一份经典 Bitna云原生容器编排CLI运维使用 Celery 官方 Helm Chart 在 Kubernetes 上部署分布式任务队列使用 Celery 官方 Helm Chart 在 Kubernetes 上部署分布式任务队列 本文是一份面向 Kubernetes 用户的实战部署指南围绕仓任务调度后端消息队列nanochat安装完全指南在不同操作系统上搭建AI聊天系统nanochat安装完全指南在不同操作系统上搭建AI聊天系统 nanochat是一款功能强大的开源AI聊天系统被称为百元预算能买到的最佳ChatGPT替代人工智能大模型预训练微调模型评测创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表