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

如何用Python获取K8s自定义资源(如FluxCD的HelmRelease)

能否用Python Kubernetes客户端获取自定义资源(如FluxCD HelmRelease)的信息?

完全可以,Python Kubernetes客户端支持获取自定义资源(CR)的数据,主要有两种常用实现方式:

一、使用动态客户端(推荐,无需提前生成代码)

动态客户端不需要针对自定义资源编写或生成专属代码,直接通过指定资源的Group、Version、Resource(GVR)即可查询,灵活性很高。

代码示例

from kubernetes import config
from kubernetes.dynamic import DynamicClient

# 加载K8s配置:本地开发用kubeconfig,集群内部署用incluster_config
config.load_kube_config()
# 集群内运行时替换为:config.load_incluster_config()

# 初始化动态客户端
client = DynamicClient(config.new_client_from_config())

# 定义FluxCD HelmRelease的GVR信息(需匹配集群中实际的CRD版本)
helm_release_gvr = client.resources.get(
    group="helm.toolkit.fluxcd.io",
    version="v2beta1",
    resource="helmreleases"
)

# 查询指定命名空间下的所有HelmRelease
target_namespace = "default"
helm_releases = helm_release_gvr.get(namespace=target_namespace)

# 遍历输出关键信息
for release in helm_releases.items:
    print(f"名称: {release.metadata.name}")
    print(f"当前状态: {release.status.conditions[-1].type} ({release.status.conditions[-1].status})")
    print("---")

二、生成自定义资源专属客户端类

如果需要强类型支持(比如IDE自动补全),可以通过client-gen工具基于CRD的OpenAPI规范生成对应的Python客户端代码,之后就能像操作Pods等原生资源一样调用。

大致步骤

  1. 获取目标CRD的完整定义,比如执行kubectl get crd helmreleases.helm.toolkit.fluxcd.io -o yaml
  2. 使用client-gen工具生成适配该CRD的Python客户端代码
  3. 将生成的代码导入项目,初始化客户端后直接调用对应的API方法(比如list_namespaced_helm_release)

注意事项

  • 确保运行客户端的账号拥有对应自定义资源的RBAC权限(如get、list权限)
  • 确认目标CRD已经在集群中成功安装,否则客户端会返回资源不存在的错误
  • 不同版本的FluxCD对应的HelmRelease GVR可能有差异,需以集群内实际CRD的spec.group、spec.versions[*].name和spec.names.plural为准

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:42:11