You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确定Kubernetes集群中处理指定CRD的自定义控制器是哪个

确定CRD对应调和控制器的方法
  • 第一步:获取目标CRD的核心属性
    执行命令获取foo CRD的完整定义:
    kubectl get crd foo -o yaml
    从返回结果中提取3个核心字段,后续排查会用到:

spec.group:CRD所属的API组
spec.names.plural:CRD对应资源的复数名称
spec.versions[].name:CRD的生效版本号
示例输出对应的GVK(组/版本/类型)标识为:example.io/v1, Kind=Foo

  • 第二步:优先用事件快速定位
    大部分场景下控制器调和资源时会生成事件,直接过滤该类资源的事件即可拿到控制器名称:
    kubectl get events -A --field-selector involvedObject.kind=Foo
    返回结果中的SOURCE字段就是控制器名称,再用名称过滤集群Pod就能找到对应实例。
  • 第三步:权限反向排查法(事件缺失时使用)
    控制器要执行调和逻辑,必须拥有对应CRD资源的watch、update等操作权限,我们可以反向从权限绑定关系找到关联Pod:
  1. 查找持有该CRD操作权限的集群角色,把命令中的example.io和foos替换成你第一步查到的API组和资源复数名:
    kubectl get clusterroles -o json | jq '.items[] | select(.rules[]? | .apiGroups[]? == "example.io" and .resources[]? == "foos") | .metadata.name'
  2. 查找该集群角色绑定的服务账号(SA):
    kubectl get clusterrolebindings -o wide | grep <上一步输出的集群角色名>
    执行后可以拿到SA的名称和所属命名空间
  3. 查找使用该SA的Pod:
    kubectl get pods -A -o custom-columns=POD_NAME:.metadata.name,NAMESPACE:.metadata.namespace,SA:.spec.serviceAccountName | grep <上一步得到的SA名称>
    最终输出的Pod就是负责foo CRD调和逻辑的控制器实例。

补充说明

部分多合一Operator的单个Pod会同时负责多个CRD的调和逻辑,属于正常情况。

内容的提问来源于stack exchange,提问作者vincent pli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:15:02