2024-09-26 18:03:51 发布
网友
我的Bash脚本使用kubectl create/apply -f ...来部署大量的Kubernetes资源,对于Bash来说太大了。我使用PyPI kubernetes包将其转换为Python。在
kubectl create/apply -f ...
kubernetes
有没有一种通用的方法来创建给定YAML清单的资源?否则,我能看到的唯一方法就是创建和维护从Kind到API方法create_namespaced_<kind>的映射。我觉得这很乏味,而且容易出错。在
create_namespaced_<kind>
更新:我正在将许多(10-20)资源部署到许多(10+)GKE集群。在
为了实现从其json/yaml文件创建k8s资源的功能,我写了以下代码:
def create_from_yaml(yaml_file): """ :param yaml_file: :return: """ yaml_object = yaml.loads(common.load_file(yaml_file)) group, _, version = yaml_object["apiVersion"].partition("/") if version == "": version = group group = "core" group = "".join(group.split(".k8s.io,1")) func_to_call = "{0}{1}Api".format(group.capitalize(), version.capitalize()) k8s_api = getattr(client, func_to_call)() kind = yaml_object["kind"] kind = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', kind) kind = re.sub('([a-z0-9])([A-Z])', r'\1_\2', kind).lower() if "namespace" in yaml_object["metadata"]: namespace = yaml_object["metadata"]["namespace"] else: namespace = "default" try: if hasattr(k8s_api, "create_namespaced_{0}".format(kind)): resp = getattr(k8s_api, "create_namespaced_{0}".format(kind))( body=yaml_object, namespace=namespace) else: resp = getattr(k8s_api, "create_{0}".format(kind))( body=yaml_object) except Exception as e: raise e print("{0} created. status='{1}'".format(kind, str(resp.status))) return k8s_api
在上面的函数中,如果您提供了任何一个对象yaml/json文件,它会自动提取API类型和对象类型,并创建statefulset、deployment、service等对象
PS:上面的代码没有在一个文件中处理多个kubernetes资源,因此每个yaml文件应该只有一个对象。在
我明白你在找什么了。其他k8s客户机也可以使用其他语言。Here是java中的一个例子。不幸的是,python客户机库还不支持该功能。我打开了一个新的功能请求请求,您可以选择跟踪它或自己贡献:)。Here是GitHub上问题的链接。在
另一种方法是使用java/golang客户机并将代码放入docker容器中。在
为了实现从其json/yaml文件创建k8s资源的功能,我写了以下代码:
在上面的函数中,如果您提供了任何一个对象yaml/json文件,它会自动提取API类型和对象类型,并创建statefulset、deployment、service等对象
PS:上面的代码没有在一个文件中处理多个kubernetes资源,因此每个yaml文件应该只有一个对象。在
我明白你在找什么了。其他k8s客户机也可以使用其他语言。Here是java中的一个例子。不幸的是,python客户机库还不支持该功能。我打开了一个新的功能请求请求,您可以选择跟踪它或自己贡献:)。Here是GitHub上问题的链接。在
另一种方法是使用java/golang客户机并将代码放入docker容器中。在
相关问题 更多 >
编程相关推荐