云原生DevOps运维【免费下载链接】devtronThe only Kubernetes dashboard you need项目地址https://gitcode.com/gh_mirrors/dev/devtron点击查看免费下载导读本文以 Devtron 应用「Overview概览」页面为主线系统讲解三个高频管理操作切换应用所属项目、管理应用标签并将其传播为 Kubernetes 资源标签、以及通过配置 PVC 持久卷声明来加速多架构 CI 构建。读完本文你将掌握 Overview 页面每个字段的含义、操作步骤背后的权限影响以及devtron.ai/ci-pvc-all/devtron.ai/ci-pvc-{pipelinename}两类 PVC 挂载键在源码pkg/pipeline/types/Workflow.go中的真实生效机制可直接照搬到你的 Devtron 实例中完成实战配置。本文对应官方文档docs/user-guide/creating-application/overview.md以下内容在完整继承其操作步骤的基础上结合仓库源码进行了底层原理扩展。Overview 概览页是什么Overview是 Devtron 中每个应用Application的「信息总览」页面集中展示该应用的简要信息、已添加的标签Tags、已配置的外部链接External Links以及部署详情Deployment Details。同时它也是两个高频管理操作的入口切换应用所属项目Change Project管理标签Manage Tags包括创建、编辑、删除以及把标签传播Propagate为 Kubernetes 资源标签。进入应用的 Overview 页面后页面上方会展示以下基础字段字段说明App Name显示应用的名称。Created on显示应用创建的具体日期与时间。Created by显示创建该应用的用户邮箱地址。Project显示应用当前所属的项目可通过下拉列表选择其他项目完成迁移。切换应用所属项目Change Project操作步骤在Overview页面中点击Project字段即可开始迁移项目点击Project。在弹出的Change project对话框中从下拉列表选择目标项目。点击Save应用随即被移动到所选项目下。切换项目后的权限影响务必注意官方文档明确给出了一个关键提示请务必在迁移前评估当前拥有该应用访问权限的用户在项目切换后将失去对它的访问权限已经拥有目标项目访问权限的用户将自动获得该应用的访问权限。也就是说项目迁移本质上是把应用的「归属团队」整体搬迁权限随项目走而不是随应用走。因此在生产环境执行此操作前应先与目标项目成员确认避免团队成员突然无法访问应用。源码视角项目迁移实际做了什么从源码看项目迁移对应的是应用记录中teamId项目在 Devtron 中对应 Team/Project 概念的更新。在 pkg/app/AppCrudOperationService.go 的UpdateApp实现中一次完整的应用更新会依次完成标签合法性校验先遍历请求中的标签凡标记了Propagatetrue需要传播的标签都会调用k8s.CheckIfValidLabel校验其是否符合 Kubernetes 标签规范不合法则直接返回错误更新应用归属将app.TeamId更新为目标项目 ID并记录UpdatedBy与UpdatedOn更新标签调用UpdateLabelsInApp在数据库事务内同步标签的新增、修改与删除更新描述通过SetDescription持久化应用描述信息最后提交事务。由此可见UI 上的「Change Project Save」背后是一整套「项目归属 标签 描述」的原子更新流程失败时整体回滚不会出现数据半更新状态。管理标签Manage Tags并将其传播为 Kubernetes 标签标签是什么Tags标签是key-value 键值对一个应用可以添加一个或多个标签。它们最核心的价值在于传播Propagate当标签被传播后它们会被视为 Kubernetes 资源的labels。Kubernetes 原生支持利用这些 labels 查询对象、执行批量操作例如基于标签的合并计费 consolidated billing。你还可以通过 CLI 或其他 Kubernetes 工具用这些标签过滤/识别资源。也就是说你在 Devtron UI 上维护的标签可以一键「下沉」到该应用部署出的真实 Kubernetes 资源上成为跨工具、跨团队的资源标识维度。Manage tags是集中管理这些标签的入口页面支持创建、编辑、删除标签以及开启/关闭标签向 Kubernetes 资源的传播。操作步骤在Overview页面点击Edit进入标签管理然后点击 Add tag新增一个标签输入 key 与 value点击X删除某个标签点击标签左侧的传播符号将标签标记为「已传播」再次点击传播符号可取消传播标签将不再下沉到 Kubernetes 资源点击Save保存全部变更。保存后Overview页面上的Tags区域会立即反映最新结果。提示传播符号显示为深灰色时表示该标签已处于传播状态。源码视角标签如何被校验、存储与最终写入部署清单结合仓库源码可以还原「UI 打勾 → 数据库 → Kubernetes 资源 labels」的完整链路1. 校验写入前把关在UpdateApppkg/app/AppCrudOperationService.go中只有Propagatetrue的标签会被k8s.CheckIfValidLabel严格校验——因为只有它们会真实落到 Kubernetes 资源上必须符合 K8s label 语法约束键长度、字符集、前缀规范等。2. 存储数据库持久化标签以AppLabel模型落库Create方法pkg/app/AppCrudOperationService.go记录Key、Value、Propagate标记、关联的AppId以及创建/更新人信息。3. 传播部署时注入 manifest真正把标签「传播」到 Kubernetes 资源的时机发生在部署阶段GetAppLabelsForDeploymentpkg/app/AppCrudOperationService.go会从数据库取出该应用的全部标签序列化为部署标签 JSON而 pkg/deployment/manifest/ManifestCreationService.go 在生成部署 manifest 时调用该方法将标签注入实际资源清单。4. 扩展标签可选能力若在 Devtron 配置中开启PROPAGATE_EXTRA_LABELS环境变量默认false见 pkg/app/AppCrudOperationService.go部署时还会自动附加api.devtron.ai/appName、api.devtron.ai/envName、api.devtron.ai/project等内置标签若用户自定义标签与内置标签 key 冲突以用户自定义标签为准通过MergeChildMapToParentMap合并时用户标签优先。配置 PVC 优化构建时间重点为什么需要 PVC多平台构建的缓存难题PersistentVolumeClaimPVC持久卷声明是「存储请求」——它负责把一块PersistentVolumePV挂载进 Pod。Devtron 在 CI 构建场景中利用 PVC 来优化构建时间。关键场景是多目标平台multi-platform构建例如同时构建arm64与amd64镜像把 PVC 挂载进构建 Pod可以为构建缓存提供直接可用的存储空间从而显著缩短构建时间。更重要的是挂载 PVC 提供的是独立于节点的构建缓存不会影响常规构建——常规构建下镜像基于 CI 所运行 K8s 节点的架构与操作系统来构建。第一步创建 PVC 文件官方推荐的 PVC 定义示例如下例如文件名为cache-pvc.yaml你需要自定义其中的metadata.namePVC 名称与spec.storageClassName存储类名称apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cache-pvc # 这里填写 PVC 的名称 spec: accessModes: - ReadWriteOnce storageClassName: # 这里填写存储类名称 resources: requests: storage: 30Gi要点说明accessModes: ReadWriteOnce该卷同一时刻只能被单个节点以读写方式挂载适合单 Pod 构建缓存场景storageClassName留空则使用集群默认存储类如需指定例如 SSD 高性能存储类在此填写存储类名称resources.requests.storage: 30Gi缓存容量可按实际构建产物规模调整30Gi 是文档示例值。然后通过 kubectl 将该 PVC 提交到目标命名空间{namespace}替换为你的实际命名空间kubectl apply -f cache-pvc.yaml -n {namespace}说明原文档中的示例命令使用了 Kubernetes 官方示例文件 URL实践时请将其替换为你本地创建的上方cache-pvc.yaml。创建完成后确认 PVC 状态为Bound已绑定即可进入第二步配置。第二步在 Devtron 中挂载 PVC进入应用的Overview页面点击页面右上角的Edit打开标签编辑入口PVC 挂载正是通过标签机制实现的按需添加以下两类标签之一。A应用级 PVC 挂载影响该应用所有构建管道配置项值keydevtron.ai/ci-pvc-allvaluePVC 的 metadata 名称如cache-pvc即你在 PVC 模板中定义的名字注意此挂载会影响该应用的全部构建管道。B管道级 PVC 挂载仅影响指定构建管道配置项值keydevtron.ai/ci-pvc-{pipelinename}valuePVC 的 metadata 名称如cache-pvc注意此挂载仅影响{pipelinename}指定的那一条构建管道。如何确定pipelinename进入App Configuration点击Workflow Editor构建管道Build pipeline上显示的管道名即为pipelinename。点击Save完成挂载。源码视角ci-pvc标签如何在构建时生效这两类标签并非「装饰性配置」它们在 CI 工作流引擎中有着精确的读取逻辑定义于 pkg/pipeline/types/Workflow.goconst ( PRE PRE POST POST CI_NODE_PVC_ALL_ENV devtron.ai/ci-pvc-all CI_NODE_PVC_PIPELINE_PREFIX devtron.ai/ci-pvc )真正决定 PVC 是否挂载的是getPVCForWorkflowRequest方法pkg/pipeline/types/Workflow.go其核心逻辑为仅对 CI 与 Job 类型的工作流生效——方法开头判断workflowRequestType必须是 CI 或 Job 管道CD部署管道当前不支持 PVC 挂载优先级管道级 应用级——先从AppLabels中查找devtron.ai/ci-pvc-{pipelinename}注意实际读取时会将管道名转为小写拼接若为空再回退查找devtron.ai/ci-pvc-all命中后的行为变更——只要 PVC 名称非空即置IsPvcMounted true同时强制关闭 Docker 构建缓存的外推push与拉取pullIgnoreDockerCachePush true、IgnoreDockerCachePull true。这一实现细节很关键它解释了 PVC 方案的本质构建缓存不再依赖外部缓存仓库的网络往返而是直接落在本地持久卷上因此多平台构建时各架构的缓存可以共存并复用达到缩短构建时间的目的。小结Devtron 的Overview页面远不止「信息展示」它既是管理应用元数据项目归属、标签的操作中枢也是接入构建优化的配置入口。核心要点回顾Change Project迁移应用归属项目权限随项目走需提前评估成员访问影响底层是teamId的原子事务更新Manage Tagskey-value 标签可传播为 Kubernetes 资源 labels支持细粒度过滤与批量操作传播链路为「校验K8s label 规范→ 落库 → 部署时注入 manifest」PVC 构建缓存通过devtron.ai/ci-pvc-all应用级或devtron.ai/ci-pvc-{pipelinename}管道级两类标签挂载持久卷为多架构构建提供本地缓存源码层面命中后会自动关闭 Docker 缓存 push/pull。如需深入了解标签与 PVC 的底层实现可继续阅读 pkg/app/AppCrudOperationService.go 与 pkg/pipeline/types/Workflow.go应用创建的完整流程可参考 docs/user-guide/creating-application 目录下的其他分篇文档。赞分享云原生DevOps运维【免费下载链接】devtronThe only Kubernetes dashboard you need项目地址https://gitcode.com/gh_mirrors/dev/devtron点击查看免费下载相关推荐electron-tabs完全指南快速构建现代化多标签页应用electron tabs完全指南快速构建现代化多标签页应用 electron tabs是一个专为Electron桌面应用设计的标签页组件库能够帮助开发者轻前端UI组件桌面应用Play Framework 构建系统指南基于 sbt 的构建概览Build OverviewPlay Framework 构建系统指南基于 sbt 的构建概览Build Overview 本篇技术指南围绕 Play Framework 官方文档《后端Web框架终极指南如何将小爱音箱改造成你的专属AI语音助手终极指南如何将小爱音箱改造成你的专属AI语音助手 想让家中的小爱音箱真正听懂你的需求从人工智障升级为智能学霸吗MiGPT项目为你提供了完美解决方案人工智能AI 应用语音智能家居交互助手创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考