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

部署kind为NetworkPlugins的YAML需使用哪个Kubernetes Python客户端

问题错误原因
  • NetworkPlugins 是第三方定义的CRD(自定义资源定义),归属API组为plumber.k8s.pf9.io/v1,不属于K8s内置的networking.k8s.ioAPI组,你调用NetworkingV1Api下的方法完全匹配不到该资源的操作接口,K8s内置API也不存在create_namespaced_network_plugins这个方法。
  • 使用k8_utils.create_from_yaml时你尝试传入了特定资源的API实例(如AppsV1Api、NetworkingV1Api),这类特定资源API只能处理对应组的内置资源,无法识别自定义CRD。
  • 你提供的代码片段中使用了yaml.safe_load但没有导入pyyaml对应的yaml模块,会直接触发运行时错误。
正确实现方案

你可以任选以下两种方法实现需求:

方法1:使用create_from_yaml(最简便)

直接传入全局ApiClient实例即可,工具会自动根据yaml中的apiVersion和kind匹配对应接口:

from kubernetes import client as k8_client, utils as k8_utils, config as k8_config
import yaml

# 加载集群配置
k8_config.load_kube_config(clusterKubeConfigFile)
api_client = k8_client.ApiClient()

# 创建资源,命名空间参数根据CRD实际属性决定,集群级资源可删除该参数
k8_utils.create_from_yaml(
    api_client,
    self.host_plumber_yaml_file,
    namespace="kube-system"
)

方法2:使用自定义资源专用API调用

用CustomObjectsApi手动调用CRD操作接口,参数可灵活调整:

from kubernetes import client as k8_client, config as k8_config
import yaml

# 加载集群配置
k8_config.load_kube_config(clusterKubeConfigFile)
crd_api = k8_client.CustomObjectsApi()

# 加载yaml配置
with open(self.host_plumber_yaml_file) as f:
    crd_body = yaml.safe_load(f)

# 调用创建接口
# 资源复数名可执行`kubectl api-resources | grep NetworkPlugins`确认,一般为kind小写加s
resp = crd_api.create_namespaced_custom_object(
    group="plumber.k8s.pf9.io",
    version="v1",
    namespace="kube-system", # 若为集群级CRD,删除该参数,调用create_cluster_custom_object方法
    plural="networkplugins",
    body=crd_body
)
print("资源创建成功,状态='%s'" % str(resp.get("status")))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:36:03