Как использовать несколько файлов ресурсов kubernetes через клиент python kubernetes, аналогичный kubectl apply -f

У меня есть файл с несколькими ресурсами kubernetes, который содержит различные ресурсы, которые должны применяться, например, для определения развертывания, определения службы, pv, pvc и т. Д. Есть ли способ использовать этот единственный файл через клиент python kubernetes для развертывания всех этих ресурсов сразу? Хотя мой сценарий немного другой. У меня есть файл, который использует CRD вместе с пользовательскими объектами ресурсов kubernetes, например, для Deployment + ambassador's Mapping. Как добиться этого с помощью клиента Python Kubernetes?

2 ответа

С клиентом вы должны делать их все отдельно. Когда у вас есть несколько документов в файле YAML, kubectl просто разделяет их за вас и выполняет вызов API для каждого.

У меня есть файл kubernetes мульти-ресурсы Есть ли способ, чтобы использовать этот единственный файл через kubernetes питон клиент, чтобы развернуть все эти ресурсы сразу?

Пожалуйста, проверьте содержание examples каталог.

    from os import path

    import yaml

    from kubernetes import client, config


    def main():
        # Configs can be set in Configuration class directly or using helper
        # utility. If no argument provided, the config will be loaded from
        # default location.
        config.load_kube_config()

        with open(path.join(path.dirname(__file__), "nginx-deployment.yaml")) as f:
            dep = yaml.safe_load(f)
            k8s_beta = client.ExtensionsV1beta1Api()
            resp = k8s_beta.create_namespaced_deployment(
                body=dep, namespace="default")
            print("Deployment created. status='%s'" % str(resp.status))


    if __name__ == '__main__':
        main()

Важное примечание: необходимо использовать тройные дефисы в верхней части вашего yaml-файла и между ресурсами, если он содержит более одного ресурса.

... / utils / create_from_yaml.py и ... / examples / create_deployment_from_yaml.py также заслуживают проверки.

У меня есть файл, в котором используются CRD вместе с пользовательскими объектами ресурсов Kubernetes.

как сказал @coderanger, пример можно найти в .../docs/CustomObjectsApi.md

Надеюсь, это поможет.

Вы можете использовать config.new_client_from_config для управления несколькими кластерами.

или используйте конфигурацию kube из dict, а не локального файла.

from kubernetes import client, config
from kubernetes.client import Configuration, ApiClient

def new_client_from_dict(conf: dict, context: str):
    """
    create client via conf dict
    """
    client_config = type.__call__(Configuration)
    config.load_kube_config_from_dict(config_dict=conf, context=context, persist_config=False,
                                  client_configuration=client_config)
    return ApiClient(configuration=client_config)

client1 = client.CoreV1Api(api_client=new_client_from_dict(CLUSTER1_KUBE_CONFIG, context='cluster1'))
client2 = client.CoreV1Api(api_client=new_client_from_dict(CLUSTER2_KUBE_CONFIG, context='cluster2'))
client1.list_namespaced_pod()
client2.list_namespaced_pod()
Другие вопросы по тегам