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

时间:2019-04-17 13:49:33

标签: kubernetes namespaces cluster-computing

我需要使用Kubernetes API获取特定Kubernetes集群中所有名称空间的列表。因为我需要遍历Python程序中的多个群集,所以每次调用API时都需要指定群集。

一种选择是使用list_namespace(),如https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/CoreV1Api.md

中所述

但是,此API不允许我指定集群。它从我的.kube配置文件中的当前上下文中选择群集。如果我删除或重命名配置文件,则API调用将完全失败。

我还在https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/ExtensionsV1beta1Api.md

找到了扩展API

不幸的是,那里没有用于检索名称空间列表的API。还有其他我不知道的API吗?

2 个答案:

答案 0 :(得分:2)

如果看到 kube_config 模块的source code,则可以对方法 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)

编辑:This是一个示例,该示例使用上下文参数和单个kubeconfig文件来遍历多个群集。在kubernetes文档中,Merging kubeconfig files上有一个条目。基本上,在拥有具有多个上下文的配置文件之后,您可以使用config.load_kube_config(config_file=file)加载文件并使用client.load_kube_config(context="context2')

加载上下文

P.S。如果要在默认路径('〜/ .kube / config')中使用配置文件,或者如果不需要使用 config.load_kube_config()您可以在KUBECONFIG环境变量中设置路径。

答案 1 :(得分:0)

您是否会选中此example
在那里,您可以在多个上下文之间导航并列出所有名称空间中的所有Pod

显然您只需要替换

list_pod_for_all_namespaces()

使用

list_namespace()