尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Argo CD `argocd admin cluster namespaces disable-namespaced-mode` 命令详解:批量退出集群的 Namespaced 模式

Argo CD `argocd admin cluster namespaces disable-namespaced-mode` 命令详解:批量退出集群的 Namespaced 模式 Argo CDargocd admin cluster namespaces disable-namespaced-mode命令详解批量退出集群的 Namespaced 模式【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd本篇指南围绕 Argo CD 管理命令argocd admin cluster namespaces disable-namespaced-mode展开讲解它如何按 glob 模式批量将集群从“namespaced 模式”仅管理指定命名空间的模式切回全集群管理模式。读完本篇你将掌握该命令的完整参数、dry-run 预览机制并能结合 Argo CD 源码理解其匹配、跳过与持久化的执行链路。命令定位与适用场景disable-namespaced-mode是argocd admin cluster namespaces子命令族中的一员见 argocd admin cluster namespaces 命令参考与姊妹命令 enable-namespaced-mode 配套使用enable-namespaced-mode为名称匹配 PATTERN 的集群写入命名空间白名单使 Argo CD 只管理这些命名空间disable-namespaced-mode清除集群的命名空间白名单让控制器恢复对该集群全部命名空间的管理。当曾经按业务线对集群做过命名空间收窄、如今需要收回这一限制时例如新应用要部署到未列入白名单的命名空间该命令可以一次性对多个集群生效而无需逐个修改 cluster secret。需要说明的是这是一条admin核心侧命令它通过 kubeconfig 直接访问 Argo CD 所在集群的 Kubernetes API 来读写 cluster secret而不是走 Argo CD API server这也是为什么它带有一整套 kubectl 风格连接参数。命令语法与参数基本用法argocd admin cluster namespaces disable-namespaced-mode PATTERN [flags]参数说明PATTERN必填。glob 模式与集群的server 地址即 cluster 对象中的server字段值做匹配命中的集群将被退出 namespaced 模式--dry-run布尔开关默认值为true默认只打印将要执行的操作而不落库传--dry-runfalse才真正更新集群配置命令接受的完整连接类参数通过 kubectl flags 注入见 cluster.go 中cli.AddKubectlFlagsToCmd包括参数说明--as string/--as-group stringArray/--as-uid string操作时模拟impersonate的用户名、用户组、UID--certificate-authority string证书颁发机构CA文件路径--client-certificate string/--client-key stringTLS 客户端证书及私钥文件路径--cluster string/--context string/--user string选择 kubeconfig 中的 cluster / context / user--disable-compression对所有请求关闭响应压缩--insecure-skip-tls-verify跳过服务端证书有效性校验HTTPS 将不安全--kubeconfig stringkube config 路径仅在集群外out-of-cluster运行时需要-n, --namespace string本次 CLI 请求的命名空间范围即 Argo CD 所在命名空间--password string/--username stringAPI server 基础认证的用户名与密码--proxy-url string经由代理 URL 连接--request-timeout string单个服务端请求的等待超时如1s、2m、3h0表示不超时默认0--server stringKubernetes API server 的地址和端口--tls-server-name string校验服务端证书时使用的名称未提供则使用实际访问的主机名--token string访问 API server 的 Bearer token此外还继承自argocd根命令的一组全局参数原文档完整列表见 argocd 根命令参考常用的有--argocd-context、--auth-token/ARGOCD_AUTH_TOKEN环境变量、--config默认/home/user/.config/argocd/config、--core直接对话 Kubernetes 而非 Argo CD API server、--grpc-web、-H, --header、--logformatjson|text默认json、--logleveldebug|info|warn|error默认info、--plaintext、--port-forward等。本命令的执行路径以 kubeconfig 直连为主这些全局参数主要用于其他子命令场景。执行流程从源码看匹配与更新逻辑命令实现在 NewClusterDisableNamespacedMode()。其执行链条可分为四步1. 参数校验与模式匹配。未提供PATTERN时打印帮助并以非零码退出随后遍历所有已登记集群用glob.Match(pattern, server)判断集群的 server 地址是否命中模式见 cluster.go#L446-L449。这里复用的是 util/glob 工具基于gobwas/glob编译 glob 表达式带 LRU 缓存默认容量 10000编译失败时会打印警告并视为不匹配。因此*、?等通配符都可用例如https://prod*可匹配所有以https://prod开头的集群地址。2. 集群当前状态检查。对每个命中的集群执行argoDB.GetCluster(ctx, server)取出完整集群对象若该集群Namespaces列表为空即本来就不处于 namespaced 模式直接continue跳过见 cluster.go#L456-L458。这意味着该命令只对“确实在 namespaced 模式”的集群生效对未启用该模式的集群是幂等无操作的。3. dry-run 分支。命令将cluster.Namespaces置为nil后打印Disabling namespaced mode for cluster server...。由于--dry-run默认true默认只输出done (dry run)只有显式--dry-runfalse时才调用argoDB.UpdateCluster(ctx, cluster)真正持久化见 cluster.go#L460-L469。4. 命名空间列表如何统计上下文信息。该命令所在的公共入口 runClusterNamespacesCommand() 会先列出所有集群与应用按“集群 → 实际部署资源的命名空间集合”构建映射优先取app.Status.Resources中的真实命名空间为空时回退到spec.destination.namespace再交给具体子命令回调处理。disable-namespaced-mode的回调本身只使用其中的 server 键但同一入口还服务于打印命名空间的argocd admin cluster namespaces只读命令方便你在操作前先摸底各集群实际覆盖了哪些命名空间。底层持久化Namespaces如何存进 cluster secret“namespaced 模式”的开关本质上是Cluster对象的Namespaces字段。查看 util/db/cluster.go 中的clusterToSecretif len(c.Namespaces) ! 0 { data[namespaces] []byte(strings.Join(c.Namespaces, ,)) }即命名空间白名单以逗号分隔字符串写入 cluster secret 的data.namespaces键列表为空时该键直接不写入。反向的 SecretToCluster 在读取时把逗号分隔串解析回Namespaces切片。因此启用namespaced 模式 向 cluster secret 写入namespaces键禁用即本命令 把cluster.Namespaces清空后UpdateClustersecret 中的namespaces键随之消失控制器随即恢复对该集群所有命名空间的监听与管理。从源码结构看Namespaces是 cluster 对象的一等字段控制器侧依据它决定 informer 的命名空间范围这也解释了为什么禁用操作是“删除字段”而非“写入空列表”。与enable-namespaced-mode的对比及推荐操作流程对照 NewClusterEnableNamespacedMode()两个命令的差异值得注意维度enable-namespaced-modedisable-namespaced-mode命名空间来源自动统计该集群上已部署应用实际占用的命名空间不需要直接清空额外参数--cluster-resources是否同时管理集群级资源默认 false、--max-namespace-count仅当集群命名空间数 ≤ 该值时才处理默认 0 即不限无匹配条件命名空间非空、数量达标、server 命中 PATTERN仅要求 server 命中 PATTERN 且当前处于 namespaced 模式--dry-run默认true默认true推荐的完整操作闭环# 1. 摸底打印各集群当前实际覆盖的命名空间只读 argocd admin cluster namespaces # 2. 预览退出操作默认就是 dry-run输出 done (dry run) argocd admin cluster namespaces disable-namespaced-mode https://stage-internal* # 3. 确认后真正执行 argocd admin cluster namespaces disable-namespaced-mode https://stage-internal* --dry-runfalse # 4. 复核再次查看命名空间分布确认目标集群已恢复全量管理 argocd admin cluster namespaces在集群外运行时补充 kubeconfig 即可例如argocd admin cluster namespaces disable-namespaced-mode prod* \ --kubeconfig /path/to/argocd.kubeconfig \ --namespace argocd \ --dry-runfalse注意事项PATTERN 匹配的是集群 server 地址cluster 对象中的server字段不是集群name写模式前先通过argocd admin cluster namespaces或argocd cluster list确认地址字面值。默认 dry-run 是双刃剑忘记加--dry-runfalse会导致命令看似执行成功打印done (dry run)但配置未变更反之脚本中批量执行时应保留先预览再落库的两步流程。幂等安全未启用 namespaced 模式的集群会被静默跳过重复执行不会产生副作用。glob 编译失败不致命非法模式只会触发警告且无集群被匹配不会误改任何集群见 glob.Match 的容错逻辑。该命令修改的是 Argo CD 所在集群内的 cluster secret执行身份需要对这些 secret 具备读写权限请配合最小权限原则的 RBAC 使用。相关命令argocd admin cluster namespaces打印 Argo CD 在各集群中管理的命名空间argocd admin cluster namespaces enable-namespaced-mode为匹配 PATTERN 的集群启用 namespaced 模式argocd admin cluster集群管理命令族入口含generate-spec、kubeconfig、stats、shards等子命令。【免费下载链接】argo-cdDeclarative Continuous Deployment for Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ar/argo-cd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表