Python Kubernetes Client:kubectl get [custom-resource]的等价物

oxiaedzo  于 12个月前  发布在  Python
关注(0)|答案(3)|浏览(119)

使用kubectl,我可以执行以下命令:

kubectl get serviceentries

字符串
然后我会收到一些信息。但是serviceentries是一个自定义资源。那么我如何使用kubernetes客户端来获取相同的信息呢?
例如,Yaml看起来像这样:

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-svc-https
spec:
  hosts:
  - api.dropboxapi.com
  - www.googleapis.com
  - api.facebook.com
  location: MESH_EXTERNAL
  ports:
  - number: 443
    name: https
    protocol: TLS
  resolution: DNS


有谁知道正确的使用方法吗?

qlfbtfca

qlfbtfca1#

你应该能够像这样使用python客户端拉取它:

kubernetes.client.CustomObjectsApi().list_cluster_custom_object(group="networking.istio.io", version="v1alpha3", plural="serviceentries")

字符串
该方法适用于kubernetes中的每个自定义资源,并且不需要对python客户端进行任何进一步的定义。

6uxekuva

6uxekuva2#

要从Moshe Shitrit非常有帮助的答案中进一步了解,您需要检查kubectl响应以查看使用什么apiVersion,因为它可能因自定义对象的类型而异。例如,对于virtualservices:

kubectl get virtualservices -o json

{
    "apiVersion": "v1",
    "items": [
        {
            "apiVersion": "networking.istio.io/v1beta1",
            "kind": "VirtualService",
            ...

字符串
你可以从items数组中的apiVersion看到group应该是:networking.istio.io,version应该是:v1beta1。如果你列出了一个命名空间的virtualservices,那么它应该是:

kubernetes.client.CustomObjectsApi().list_namespaced_custom_object("networking.istio.io", "v1beta1", namespace, "virtualservices")

rmbxnbpk

rmbxnbpk3#

这是一段Python代码:

from kubernetes import config, dynamic
from kubernetes import client as k8s_client
from kubernetes.dynamic.exceptions import ResourceNotFoundError
from kubernetes.client import api_client
# Creating a dynamic client
client = dynamic.DynamicClient(
    api_client.ApiClient(configuration=config.load_kube_config())
)
custom_object_api = k8s_client.CustomObjectsApi()

namespace = "YOUR NAMESPACE"
# Fetching the "virtualservices" CRD list 
ingressroute_api = custom_object_api.list_namespaced_custom_object("networking.istio.io", "v1beta1", namespace, "virtualservices")
# you can add try-except block with ResourceNotFoundError exception

字符串
如果资源是集群范围(非名称空间范围),请使用list_cluster_custom_object
同样的逻辑也适用于其他语言。

相关问题