ARTICLE DETAIL

资讯详情

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

Karmada karmadactl get 命令完全指南:跨控制面与成员集群的资源查询

Karmada karmadactl get 命令完全指南:跨控制面与成员集群的资源查询 Karmada karmadactl get 命令完全指南跨控制面与成员集群的资源查询【免费下载链接】karmadaOpen, Multi-Cloud, Multi-Cluster Kubernetes Orchestration项目地址: https://gitcode.com/GitHub_Trending/ka/karmada导读karmadactl get是 Karmada 命令行工具karmadactl中最常用的资源查询命令之一它继承了kubectl get的完整能力并在此基础上扩展出面向多集群场景的核心特性通过--operation-scope与--clusters参数你可以在 Karmada 控制面、指定成员集群或两者之间自由切换查询范围还能在输出结果中直接识别资源是否由 Karmada 托管ADOPTION 列。读完本文你将掌握karmadactl get的完整语法、全部参数含义、跨集群输出格式细节及其底层实现原理能够直接在真实多集群环境中熟练排查资源状态。命令概览一条命令三种作用域karmadactl get用于在Karmada 控制面Karmada control plane与成员集群member clusters中显示一个或多个资源。它打印指定资源最重要信息的表格并支持标签选择器过滤、模板输出过滤属性等能力。与kubectl get的核心差异在于作用域operation scope的概念。Karmada 将命令的操作范围划分为三种定义在 pkg/karmadactl/options/global.go 中取值含义说明karmada仅操作 Karmada 控制面默认值等价于直接对 Karmada 控制面执行kubectl getmembers仅操作成员集群需配合--clusters指定目标集群或自动覆盖全部已注册集群all同时操作控制面与成员集群需配合--clusters指定目标成员集群该命令的Use定义为get [NAME | -l label | -n namespace]见 pkg/karmadactl/get/get.go说明它既可以按资源名称查询也可以按标签或命名空间过滤。命令语法与执行前置条件karmadactl get [NAME | -l label | -n namespace]使用前提已通过karmadactl init/karmadactl join等命令完成 Karmada 环境的初始化并确保当前 kubeconfig 可访问 Karmada 控制面 API Server查询成员集群时需要 Karmada 控制面已通过karmadactl join注册目标成员集群且当前用户具备访问该成员集群的代理权限详见下文底层实现部分对FactoryForMemberCluster的说明。命令被注册在karmadactl的Basic Commands基础命令命令组中与explain、create、delete、edit并列见 pkg/karmadactl/karmadactl.go。核心参数详解karmadactl get的全部参数定义在 pkg/karmadactl/get/get.go 中下表逐项说明其作用与默认值参数简写类型/默认值说明--all-namespaces-Abool列出所有命名空间下的目标对象指定后即使同时给出--namespace也会被忽略--allow-missing-template-keys—bool默认true当模板中引用的字段或 map key 缺失时忽略错误仅适用于 golang 与 jsonpath 输出格式--clusters-Cstrings指定目标成员集群仅当--operation-scope为members或all时生效例如--operation-scopeall --clustersmember1,member2--ignore-not-found—bool若请求的对象不存在命令返回退出码 0而非报错--karmada-context—string要使用的 kubeconfig context 名称--kubeconfig—stringCLI 请求所使用的 kubeconfig 文件路径--label-columns-Lstrings接受逗号分隔的标签列表作为附加列展示标签名大小写敏感可多次使用如-L label1 -L label2--labels-lstring标签选择器过滤形如-llabel或-l label--namespace-nstring本次 CLI 请求的命名空间作用域--no-headers—bool使用默认或 custom-column 输出格式时不打印表头默认打印表头--operation-scope-soperationScope默认karmada命令的操作范围可选值karmada、members、all--output-ostring输出格式可选json、yaml、kyaml、name、go-template、go-template-file、template、templatefile、jsonpath、jsonpath-as-json、jsonpath-file、custom-columns、custom-columns-file、wide--output-watch-events—bool与--watch或--watch-only同时使用时输出 watch 事件对象已有对象作为初始 ADDED 事件输出--show-kind—bool为请求的对象列出资源类型--show-labels—bool打印时在最后一列显示所有标签默认隐藏标签列注意该选项不能与除wide外的其他输出格式同时使用否则校验报错--show-managed-fields—bool使用 JSON 或 YAML 格式打印时保留managedFields字段--sort-by—string按字段规格对列表类型排序字段规格以 JSONPath 表达式给出如{.metadata.name}且目标字段必须是整型或字符串--template—string当-ogo-template或-ogo-template-file时使用的模板字符串或模板文件路径模板格式为 Go 模板--watch-wbool列出/获取请求对象后持续监听变更未提供对象名时排除未初始化对象--watch-only—bool直接监听请求对象的变化不先执行列出/获取参数校验与作用域处理从源码看参数校验遵循以下规则pkg/karmadactl/get/get.go--show-labels与除wide外的其他输出格式冲突时报错--output-watch-events必须与--watch或--watch-only搭配使用--operation-scope的取值必须为karmada、members、all三者之一通过VerifyOperationScopeFlags校验见 pkg/karmadactl/options/global.go当作用域包含成员集群members/all且显式传入--clusters时会先向 Karmada 控制面查询已注册集群列表并校验目标集群确实存在VerifyClustersExist。作用域解析逻辑位于HandleClusterScopeFlagspkg/karmadactl/get/get.go作用域为karmada目标成员集群列表为空仅查询控制面作用域为members或all若未指定--clusters则通过LoadRegisteredClusters自动加载控制面中全部已注册成员集群见 pkg/karmadactl/get/get.go若指定了--clusters则以显式列表为准。使用示例以下示例均来自命令官方文档docs/command-line-flags/karmadactl_get.md并补充了执行效果说明# 列出 Karmada 控制面中所有 Podps 输出格式 karmadactl get pods # 列出 Karmada 控制面中所有 Pod并附带更多信息如节点名称 karmadactl get pods -o wide # 仅列出 member1 集群中的所有 Podps 输出格式 karmadactl get pods --operation-scopemembers --clustersmember1 # 同时列出 Karmada 控制面与 member1 集群中的所有 Podps 输出格式 karmadactl get pods --operation-scopeall --clustersmember1 # 按名称查询 Karmada 控制面中的单个 ReplicaSet 控制器ps 输出格式 karmadactl get replicasets nginx # 查询 apps API 组 v1 版本中的 Deployment以 JSON 格式输出 karmadactl get deployments.v1.apps -o json # 只返回指定资源的 replicas 字段值Go 模板输出 karmadactl get -o template deployment/nginx --template{{.spec.replicas}} # 同时列出所有 ReplicationController 与 Serviceps 输出格式 karmadactl get rs,services # 按类型与名称同时查询多个资源 karmadactl get rs/nginx-cb87b6d88 service/kubernetes示例要点说明--operation-scopemembers与--operation-scopeall是 Karmada 跨集群查询的关键前者只查成员集群后者将控制面与成员集群结果合并展示deployments.v1.apps这种资源类型.版本.API组的写法与kubectl完全一致用于精确指定 API 组与版本-o template --template{{.spec.replicas}}利用 Go 模板提取对象字段适合脚本化取值与自动化场景rs,services与rs/nginx-cb87b6d88 service/kubernetes展示了多类型、多实例混查的能力不同资源类型之间输出时会以空行分隔。跨集群输出的特殊列CLUSTER 与 ADOPTION当查询范围涉及成员集群时karmadactl get的输出表格会在原有列基础上增加两列定义于 pkg/karmadactl/get/get.goCLUSTER该资源所属的集群名称karmada表示控制面其余为成员集群名ADOPTION资源是否由 Karmada 托管取值为Y成员集群中由 Karmada 管理打有karmada.io/managedtrue标签的资源N成员集群中不受 Karmada 管理无该标签的资源-Karmada 控制面自身的资源不适用该判定。该判定逻辑在reconstructionRow与reconstructObj中实现pkg/karmadactl/get/get.go判定依据是资源是否带有karmada.io/managed标签且值为true相关常量定义在 pkg/util/constants.go 与 pkg/util/constants.go。注意对于 Pod 资源ADOPTION列会被隐藏setNoAdoption函数将该列优先级调低见 pkg/karmadactl/get/get.go以保持表格简洁。底层实现并发查询与代理访问karmadactl get的跨集群执行逻辑在Run函数中pkg/karmadactl/get/get.go核心流程如下控制面查询若作用域包含karmada先以Karmada为集群名查询控制面资源成员集群并发查询若指定了目标成员集群为每个集群通过 goroutine 并发发起查询sync.WaitGroup同步并在查询前对非控制面集群做一次api路径的基础连通性探测失败时返回明确错误信息如basic connection test to cluster(xxx) failed, please check authorization or network结果合并与分类将各集群结果按资源类型Resource排序归类同一类型聚合为一个表格不同类型之间以空行分隔模板/JSON/YAML 输出当使用非人类可读输出格式如yaml、json、custom-columns时走printGeneric路径逐集群输出不合并表格监听模式--watch/--watch-only模式下对多个集群并行启动 watch并在事件行前附加 EVENT 列。成员集群访问的代理机制查询成员集群时karmadactl 并不会直接连接成员集群的 API Server而是通过FactoryForMemberClusterpkg/karmadactl/util/factory.go构造一个指向 Karmada 控制面代理地址的 client 配置将成员集群的 API Server 地址改写为karmadaAPIServer proxyURL(clusterName)的形式复用控制面的认证信息并借道控制面代理访问成员集群。这也解释了为什么使用--operation-scopemembers前必须确保当前 kubeconfig 具备对成员集群的代理访问授权。服务器端打印优化当使用人类可读输出格式时命令会通过transformRequests向请求头添加Accept: application/json;asTable;...pkg/karmadactl/get/get.go优先要求 API Server 直接返回 Table 格式从而利用服务器端打印能力减少客户端转换开销。而在yaml、json、custom-columns等格式下ServerPrint被关闭走纯客户端打印路径。从父命令继承的日志参数除上述命令专有参数外karmadactl get还继承 karmadactl 根命令的日志相关参数由 klog 提供见 pkg/karmadactl/karmadactl.go常用项如下参数默认值说明--add-dir-headerfalse在日志消息头部添加文件目录--log-file—将日志写入指定文件配合--logtostderrtrue时不生效--log-file-max-size1800日志文件最大体积MB0 表示不限制--logtostderrtrue日志输出到标准错误而非文件--stderrthreshold2达到该级别及以上的日志写入 stderr-v, --v—日志详细级别--vmodule—按文件过滤的日志级别设置形如patternN的逗号分隔列表常见问题排查建议查询成员集群报错 basic connection test ... failed检查当前 kubeconfig 是否具备访问成员集群的代理权限以及成员集群是否仍处于健康状态指定了不存在的集群名Validate阶段会向控制面核对集群是否存在不存在时直接返回校验错误--clusters不生效确认--operation-scope为members或allkarmada作用域下该参数被忽略未指定--clusters但作用域为members命令会自动覆盖控制面中所有已注册成员集群若没有任何已注册集群会输出提示No member Clusters found in Karmada control plane--output-watch-events无效果该参数必须与--watch或--watch-only配合使用否则触发参数校验错误。相关命令与扩展阅读命令总览karmadactl 命令文档全部命令索引karmadactl Commands 首页命令实现源码pkg/karmadactl/get/get.go作用域常量与校验pkg/karmadactl/options/global.go成员集群代理访问实现pkg/karmadactl/util/factory.gokarmada.io/managed标签常量pkg/util/constants.go本文档由 hack/tools/genkarmadactldocs 工具基于命令定义自动生成命令行为以当前仓库源码为准。【免费下载链接】karmadaOpen, Multi-Cloud, Multi-Cluster Kubernetes Orchestration项目地址: https://gitcode.com/GitHub_Trending/ka/karmada创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表