如何使用Kubernetes API获取特定Kubernetes集群中所有命名空间的列表?

5
我需要使用Kubernetes API获取特定Kubernetes集群中所有命名空间的列表。因为我需要在Python程序中循环多个集群,所以每次调用API时都需要指定集群。
其中一个选项是使用list_namespace(),如https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/CoreV1Api.md中所述。
但是,此API不允许我指定集群。它从我的.kube配置文件中的current-context选择集群。如果我删除或重命名配置文件,则API调用将完全失败。
我还发现了一个扩展API:https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/ExtensionsV1beta1Api.md 不幸的是,那里没有API可用于检索命名空间列表。是否有其他API我不知道?
2个回答

8

如果您查看kube_config模块的源代码,可以使用不同的参数与load_kube_config方法一起选择您的集群:

def load_kube_config(config_file=None, context=None,
                     client_configuration=None,
                     persist_config=True):
    """Loads authentication and cluster information from kube-config file
    and stores them in kubernetes.client.configuration.
    :param config_file: Name of the kube-config file.
    :param context: set the active context. If is set to None, current_context
        from config file will be used.
    :param client_configuration: The kubernetes.client.Configuration to
        set configs to.
    :param persist_config: If True, config file will be updated when changed
        (e.g GCP token refresh).
    """
如果我理解代码正确,你可以做类似于以下的操作:
from kubernetes import client, config
for file in files:
    config.load_kube_config(config_file=file)
    v1 = client.CoreV1Api()
    response = v1.list_namespace()
    print(response)

编辑:这个示例使用上下文参数仅使用一个kubeconfig文件来遍历多个集群。在Kubernetes文档中,有一篇有关合并kubeconfig文件的条目。基本上,在拥有带有多个上下文的配置文件之后,您可以使用config.load_kube_config(config_file=file)加载文件,并使用client.load_kube_config(context="context2")加载上下文。

附注:如果要使用默认路径下('~/.kube/config')的配置文件或设置KUBECONFIG环境变量中的路径,则无需使用config.load_kube_config()


2
维克多,那基本上就是我现在正在做的。我更喜欢通过API处理它,而不是使用文件,但对我来说它很好用。谢谢。 - metrangia
使用KUBECONFIG环境变量是快速更改kubectl上下文的一种方法。不幸的是,在Kubernetes API中存在一个问题,它不接受在此变量中设置多个上下文。 - victortv

1
请确认一下这个example
链接
在那里你可以在多个上下文之间导航,并列出所有命名空间中的所有Pod。
显然,你只需要替换

list_pod_for_all_namespaces()

使用

list_namespace()

我已经使用了list_namespace()函数,它可以列出集群中的所有命名空间,但需要一个.kube配置文件来指定集群。由于我需要从多个集群获取命名空间,所以我正在使用Victor Val的多个配置文件解决方案。 - metrangia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接