У меня есть файл с несколькими ресурсами kubernetes, который содержит разные ресурсы, которые должны применяться, например. определение развертывания, определение службы, pv, pvc и т. д. Есть ли способ использовать этот единственный файл через клиент python kubernetes для развертывания всех этих ресурсов одновременно? Хотя мой сценарий немного другой. У меня есть файл, который использует CRD вместе с пользовательскими объектами ресурсов Kubernetes, например, Развертывание + карта посла. Как добиться этого с помощью клиента python kubernetes?
Как использовать несколько файлов ресурсов kubernetes через клиент python kubernetes, аналогичный kubectl apply -f
Ответы (3)
С клиентом вы должны делать их все отдельно. Когда у вас есть несколько документов в файле YAML, kubectl просто разделяет их за вас и выполняет вызов API для каждого из них.
У меня есть файл с несколькими ресурсами kubernetes. Есть ли способ использовать этот единственный файл через клиент python kubernetes для развертывания всех этих ресурсов одновременно?
Проверьте содержимое . _1
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 и person Nick schedule 02.03.2020
вы можете использовать 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()