Как я могу получить список всех пространств имен в определенном кластере Kubernetes, используя API Kubernetes? - PullRequest
2 голосов
/ 17 апреля 2019

Мне нужно получить список всех пространств имен в указанном кластере Kubernetes, используя API Kubernetes.Поскольку мне нужно циклически проходить через несколько кластеров в моей программе на Python, мне нужно указывать кластер каждый раз, когда я вызываю API.

Один из вариантов - использовать list_namespace (), как описано в https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/CoreV1Api.md

Однако этот API не позволяет мне указывать кластер.Он берет кластер из текущего контекста в моем конфигурационном файле .kube.Если я удаляю или переименовываю файл конфигурации, вызов API завершается неудачно.

Я также нашел API расширений на https://github.com/kubernetes-client/python/blob/master/kubernetes/docs/ExtensionsV1beta1Api.md

К сожалению, там нет API для получения списка пространств имен,Есть ли какой-то другой API, о котором я не знаю?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Если вы видите исходный код модуля 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')

PS. Вам не нужно использовать config.load_kube_config () если вы хотите использовать файл конфигурации в пути по умолчанию ( '~ / .kube / config' ) или если вы указали путь в переменной среды KUBECONFIG.

0 голосов
/ 17 апреля 2019

Вы бы проверили этот пример
Там вы можете перемещаться между несколькими контекстами и выводить список всех модулей во всех пространствах имен

Видимо, вам просто нужно заменить

list_pod_for_all_namespaces()

с

list_namespace()
...