ARTICLE DETAIL

资讯详情

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

Argo CD `argocd admin settings resource-overrides` 命令组:资源定制规则的本地排障指南

Argo CD `argocd admin settings resource-overrides` 命令组:资源定制规则的本地排障指南 Argo CDargocd admin settings resource-overrides命令组资源定制规则的本地排障指南【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd本文围绕 Argo CD CLI 的argocd admin settings resource-overrides命令组展开该命令组用于在本地或从集群加载argocd-cm配置的前提下离线调试资源定制resource customizations规则——包括检查哪些字段会被 diff 忽略、哪些字段会被资源更新忽略、Lua 健康检查脚本的执行结果、可用资源动作列表以及模拟执行动作产生的变更。读完本文后你能够独立使用该命令组验证resource.customizations中ignoreDifferences、ignoreResourceUpdates、health.lua与actions.lua的配置效果并理解其 GroupKind 匹配规则与底层实现链路。命令定位一个只输出帮助信息的父命令resource-overrides本身不直接执行任何调试逻辑它只是一个命令组入口。执行不带子命令的调用时CLI 只会打印帮助argocd admin settings resource-overrides [flags]其源码定义见 NewResourceOverridesCommandRun回调仅调用c.HelpFunc()真正的调试逻辑由下面 5 个子命令承载子命令功能对应源码ignore-differences RESOURCE_YAML_PATH渲染被ignoreDifferences配置排除在 diff 之外的字段NewResourceIgnoreDifferencesCommandignore-resource-updates RESOURCE_YAML_PATH渲染被ignoreResourceUpdates配置排除在资源更新之外的字段NewResourceIgnoreResourceUpdatesCommandhealth RESOURCE_YAML_PATH用配置的 Lua 脚本评估资源健康状态NewResourceHealthCommandlist-actions RESOURCE_YAML_PATH列出该资源类型可用的资源动作NewResourceActionListCommandrun-action RESOURCE_YAML_PATH ACTION别名action模拟执行资源动作并输出变更字段NewResourceActionRunCommand所有子命令都接收一个本地资源 YAML 文件路径RESOURCE_YAML_PATH作为位置参数因此该命令组的定位是“离线排障”不需要连接运行中的 Argo CD API Server只需提供一份argocd-cm的 ConfigMap 内容。配置加载机制本地文件与集群两种模式所有子命令共用同一套配置加载逻辑 createSettingsManager它决定了命令能从哪里拿到argocd-cm以及可选的argocd-secret必须二选一--argocd-cm-path指向本地argocd-cm.yaml文件或--load-cluster-settings为 true 从集群读取名为argocd-cm的 ConfigMap两者都不提供会直接报错either --argocd-cm-path must be provided or --load-cluster-settings must be set to true当提供--load-cluster-settings时CLI 通过 kubeconfig 建立真实客户端读取 ConfigMap 和 Secret当只提供本地路径时--argocd-secret-path可选地指定本地argocd-secret.yaml两者都不提供时会构造一个仅含占位数据admin.password: test、server.secretkey: test的假 Secret最终用 fake clientset 构建 settings.SettingsManager 并执行ResyncInformers()后续所有规则解析都通过这个 SettingsManager 完成。因此与连接 API Server 的大部分argocd admin命令不同该命令组用到的“继承自父命令”的参数主要只有配置来源相关的几个其余 TLS/认证类参数对本命令组无实际意义--argocd-cm-path string Path to local argocd-cm.yaml file --argocd-secret-path string Path to local argocd-secret.yaml file --load-cluster-settings Indicates that config map and secret should be loaded from cluster unless local file path is provided --kubeconfig / --kube-context / --context / --namespace 等 kubectl 风格参数仅 --load-cluster-settings 时生效核心匹配规则Group/Kind 键与 overrides 查找所有子命令都通过 executeResourceOverrideCommand或针对ignoreResourceUpdates的 executeIgnoreResourceUpdatesOverrideCommand工作流程一致读取位置参数指定的资源 YAML解析为unstructured.Unstructured调用SettingsManager.GetResourceOverrides()取得按 GroupKind 为键的 overrides 映射用资源的 GVK 构造查找键group 为空时键为 Kind如 core 组的Podgroup 非空时键为 group/Kind如apps/Deployment以该键取出对应ResourceOverride交给各自的回调处理。这个键格式与 docs/user-guide/diffing.md 中文档化的resource.customizations键写法一致例如resource.customizations.ignoreDifferences.apps_Deployment对应apps/Deployment。若ignore-resource-updates未找到对应键命令会输出No overrides configured for group/kind并直接返回。子命令详解ignore-differences验证哪些字段会被 diff 排除用法示例与 官方命令参考 一致argocd admin settings resource-overrides ignore-differences ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml实现逻辑见 settings.go 第 403-432 行若该 GroupKind 下JSONPointers与JQPathExpressions均为空输出Ignore differences are not configured for group/kind否则用 normalizers.NewIgnoreNormalizer 对资源做“归一化”即把被忽略的字段抹除并输出原始资源与归一化资源之间的 diff形如Following fields are ignored:后跟 JSON 差异若归一化前后完全相同reflect.DeepEqual说明配置的忽略项实际没有命中任何字段会提示No fields are ignored by ignoreDifferences settings。需要注意源码中的明确注释该命令的 normalizer不会校验managedFieldsManagers类型的 ignore difference 配置因为那需要访问集群中的 live 资源settings.go 第 410-413 行只会应用jsonPointers和jqPathExpressions两类配置。ignore-resource-updates验证哪些字段会被资源更新排除用法示例argocd admin settings resource-overrides ignore-resource-updates ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml该命令走独立的 overrides 获取路径 GetIgnoreResourceUpdatesOverrides其行为有两个关键差异点若 compare options 中启用了ignoreDifferencesOnResourceUpdates则每个资源的ignoreDifferences配置会被自动并入ignoreResourceUpdates即 diff 忽略规则同时作用于资源更新无论是否配置都会对*/*通配符自动追加三个 JSON Pointer 忽略项/metadata/resourceVersion、/metadata/generation、/metadata/managedFieldssettings.go 第 1067-1069 行所以这三个字段永远不会被视为资源更新的差异。此外该子命令独有标志--ignore-normalizer-jq-execution-timeoutsettings.go 第 482 行用于设置 JQ 表达式的执行超时。输出行为与ignore-differences相同无命中时提示No fields are ignored by ignoreResourceUpdates settings命中时打印Following fields are ignored:及 diff。health用 Lua 脚本评估资源健康用法示例argocd admin settings resource-overrides health ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml实现见 settings.go 第 501-513 行通过 healthutil.GetResourceHealth 并传入lua.ResourceHealthOverrides(overrides)即用resource.customizations中该 GroupKind 的health.lua脚本计算健康状态未配置健康脚本时输出Health script is not configured for group/kind配置了则输出两行STATUS: 状态与MESSAGE: 消息可直接用于验证自定义健康脚本对某个具体资源的判定结果是否符合预期。list-actions列出资源可用动作用法示例argocd admin settings resource-overrides list-actions /tmp/deploy.yaml --argocd-cm-path ./argocd-cm.yaml实现流程见 settings.go 第 534-557 行若该 GroupKind 的actions字段为空输出Actions are not configured for group/kind否则创建lua.VM{ResourceOverrides: overrides}先执行GetResourceActionDiscovery取得 discovery 脚本再ExecuteResourceActionDiscovery得到可用动作列表按动作名排序后以两列表格输出NAME与DISABLED。run-action模拟执行动作并输出变更用法示例argocd admin settings resource-overrides run-action /tmp/deploy.yaml restart --argocd-cm-path ./argocd-cm.yaml # 也支持别名 argocd admin settings resource-overrides action /tmp/deploy.yaml restart关键实现见 settings.go 第 573-634 行通过--param keyvalue可重复传递动作参数源码中以strings.SplitN(param, , 2)解析格式不合法会 fatalsettings.go 第 584-596 行执行luaVM.ExecuteResourceAction(res, action.ActionLua, parsedParams)按 Lua 返回的操作类型分别处理Patch 操作若资源被修改输出Following fields have been changed:及字段 diff无变化则提示No fields had been changed by actionCreate 操作输出Following resource was created:及新建资源的完整 YAML。这意味着你可以完全离线地验证actions.lua的restart、rollback等自定义动作会对资源产生什么变更而无需在真实 Application 上触发。overrides 配置的来源与自动补充项理解这些输出结果还需要了解 GetResourceOverrides 的解析行为配置键为argocd-cm中的resource.customizations内容为以group/Kindcore 组仅Kind为键的 YAML 映射除该主键外还支持通过拆分键split keys追加 overridesappendResourceOverridesFromSplitKeys这也是 docs/user-guide/diffing.md 中resource.customizations.ignoreDifferences.apps_Deployment这类扁平化写法的实现基础解析完成后还会依据 compare options 的ignoreResourceStatusField自动补充/status忽略项all默认空值同样按 all 处理时为*/*通配crd时仅对apiextensions.k8s.io/CustomResourceDefinition生效none/off/false时不追加仓库内置的默认定制规则位于 resource_customizations/ 目录按 API group 组织内含各 GroupKind 的 YAML 元数据与health.lua/actions.lua脚本例如 resource_customizations/apps/嵌入逻辑见 resource_customizations/embed.go当argocd-cm未覆盖某个 GroupKind 时运行时实际生效的往往是内置规则用本命令组调试时如结果与预期不符应优先检查是内置规则而非集群配置在起作用。与argocd admin settings validate的关联同一命令族中的argocd admin settings validate也把 resource overrides 作为一个校验组settings.go 第 257-263 行它调用GetResourceOverrides()并汇总输出形如N resource overrides的结果用于确认argocd-cm中的定制配置能被完整解析。一个实用的排障顺序是先用validate --group resource-overrides确认配置可解析再用resource-overrides各子命令对具体资源做行为级验证。典型排障流程示例以下流程演示如何离线验证一条ignoreDifferences规则# 1. 准备本地 argocd-cm从集群导出或手写例如包含 # resource.customizations.ignoreDifferences.apps_Deployment: | # jqPathExpressions: # - .spec.template.spec.containers[0].resources # 2. 准备一个待检资源 deploy.yaml任意 Deployment manifest 即可 # 3. 验证 diff 忽略是否命中 argocd admin settings resource-overrides ignore-differences ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml # 4. 若同时配置了健康/动作脚本验证其行为 argocd admin settings resource-overrides health ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml argocd admin settings resource-overrides list-actions ./deploy.yaml --argocd-cm-path ./argocd-cm.yaml argocd admin settings resource-overrides run-action ./deploy.yaml restart --argocd-cm-path ./argocd-cm.yaml # 5. 也可以直接从集群加载配置省去导出步骤 argocd admin settings resource-overrides ignore-differences ./deploy.yaml --load-cluster-settings若某步输出not configured或No fields are ignored依次检查GroupKind 键拼写core 组资源不带 group 前缀、resource.customizations键是否写错层级、以及内置resource_customizations/规则是否已经覆盖了你以为失效的字段。延伸阅读父命令参考argocd admin settings 命令组子命令参考health、ignore-differences、ignore-resource-updates、list-actions、run-action配置语义文档资源定制与 ignoreDifferences 详解命令实现cmd/argocd/commands/admin/settings.go配置解析实现util/settings/settings.go、Lua VMutil/lua/内置定制规则resource_customizations/【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表