GitOps 应用上线
该方法是通用的;集群的实际情况(路径、白名单、仓库、存储类、网关、参考应用、告警位置)位于 GitOps 仓库的 .claude/profiles/gitops.md 中。请先阅读配置文件。 如果缺少配置文件,请通过读取仓库(ApplicationSet、AppProject、密钥存储、一个或两个现有应用、监控文件夹)从 templates/profile.md 创建它,并在一行内告知用户您已创建。切勿猜测路径。
应用如何变为在线
- 一个带目录生成器的 ApplicationSet 将配置文件中“apps 目录”下的每个文件夹变成其自己的 ArcoCD 应用和命名空间。一旦文件夹包含有效的
kustomization.yaml,它就会被部署。 - 在推送到 ArgoCD 跟踪的分支之前,不会有任何内容到达集群。仅使用
kubectl应用的更改会在下次同步时被还原。 - 平台组件(CNI、存储、控制器)不放在 apps 目录中;配置文件说明了它们的位置。
新命名空间必须在同一提交中处处列入白名单
配置文件中的“白名单”部分列出了每个提及命名空间的文件(通常是 AppProject 的 destinations、ClusterSecretStore 的 conditions,以及如果应用需要 LB IP 时的 LoadBalancer IP 池和 L2/BGP 公告选择器)。漏掉一个将导致应用无法同步,其 ExternalSecret 保持 SecretSyncError 状态,或 LB IP 永远不会被公告。在添加文件夹的提交中,将命名空间添加到每个适用的文件。
上线顺序(先创建最小的安全形状)
ns.yaml:带有配置文件中 Pod 安全标签的命名空间。kustomization.yaml:按依赖顺序排列的资源(命名空间和配置,然后工作负载,最后路由)。- 密钥:首先在后端密钥存储中创建条目(配置文件:“密钥”部分),然后为每个密钥创建一个
ExternalSecret。切勿提交密钥值;引导和紧急密钥应保留在 Git 之外。 - 运行时清单(Deployment、Service、PVC、ConfigMap),仅在确认镜像名称和密钥名称之后。使用真实健康端点的就绪探针和存活探针、资源请求以及命名空间的 Pod 安全级别所需的安全上下文。
- 3am 信号(见下文),与工作负载在同一更改中。
- 路由,最后添加,一旦镜像运行、密钥解析、探针通过(参见“暴露”)。
- 应用文件夹中的
README.md:它是什么、运行时依赖项、密钥名称、存储、如何访问它。
约定(配置文件中包含具体值)
- 镜像:固定
tag@sha256:<digest>,除非配置文件指示应用跟踪移动标签;自有镜像来自配置文件中的仓库,并使用不可变标签。私有镜像需要配置文件中的拉取密钥模式。 - 密钥:使用
ExternalSecret资源对接配置文件中的 ClusterSecretStore,绝不使用内联的Secret数据。 - 存储:配置文件中的存储类及各自的用途(小型复制的块卷 vs NFS 上的大量数据)。配置文件中的容量限制是硬性限制。
- 路由:公共网关和内部网关及其主机模式;通过 LoadBalancer Service 实现原始 TCP/UDP。
- 复制配置文件中“参考应用”的形状,而不是发明新的形状。
3am 信号
在推送前先问:如果这个应用在凌晨 3 点崩溃,谁会知道,他们首先会看什么?
- 应用必须被一个能够联系到人的告警覆盖:将其命名空间和工作负载添加到配置文件中的“监控”告警规则(不可用副本、崩溃循环、待处理 Pod 或 PVC),或者如果应用具有这些规则无法发现的故障模式(如队列停止排空、作业停止运行、证书或令牌过期),则添加特定于应用的规则。
- 应用的日志必须说明哪里出了故障,并附上定位问题的 ID;如果镜像属于我们且日志未包含这些信息,那将是一项待办任务。
- 在提交消息中写入信号:
3am: <告警名称> via <接收器>。
暴露
在应用运行、密钥解析、健康检查通过之前,不要添加公共路由。仅限内部使用的工具只连接到内部网关,不获取公共路由。当您确实需要公开暴露时,请遵循配置文件中“相关技能”部分的公共入口路径(DNS、隧道、证书)。
上线后(验证,不要假设)
- 推送;观察新应用出现并收敛(
kubectl get applications.argoproj.io -n argocd,或配置文件中的“验证”命令)。如果配置文件显示了如何跳过轮询延迟,请请求手动刷新。 - 检查:应用“已同步”且“健康”,每个
ExternalSecret“密钥已同步”,Pod 就绪,路由响应,并且告警规则已加载(它出现在监控堆栈的规则列表中)。 - 如果未收敛,请自上而下地检查链路:白名单 → 密钥 → ArgoCD 同步错误 → Pod → 路由。白名单通常是罪魁祸首。配置文件中的“相关技能”部分列出了集群的诊断技能。