如何使用python kubernetes-client获取给定资源对应的YAML文件

jlr*_*a81 2 python kubernetes

使用 kubectl,我知道如果我想查看特定资源 YAML 文件,我可以运行以下命令

kubectl -n <some namespace> get <some resource> <some resource name> -o yaml
Run Code Online (Sandbox Code Playgroud)

我如何使用 python 的 kubernetes-client 获得相同的数据?到目前为止我发现的所有内容都只讨论从给定的 yaml 文件创建资源。

在查看文档时,我注意到每种资源类型通常都有一个get_api_resources()函数,该函数返回一个V1ApiResourceList,其中每个项目都是一个V1ApiResource。我希望有一种方法可以通过使用 V1ApiResource 对象来获取资源的 yaml 输出,但似乎并不是这样。

大家有什么建议吗?这可以通过 kubernetes-client API 实现吗?

lar*_*sks 5

如果您查看对象上可用的方法,例如:

>>> import kubernetes.config
>>> client = kubernetes.config.new_client_from_config()
>>> core = kubernetes.client.CoreV1Api(client)
>>> res = core.read_namespace('kube-system')
>>> dir(res)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_api_version', '_kind', '_metadata', '_spec', '_status', 'api_version', 'attribute_map', 'discriminator', 'kind', 'local_vars_configuration', 'metadata', 'openapi_types', 'spec', 'status', 'to_dict', 'to_str']
Run Code Online (Sandbox Code Playgroud)

...你会发现有一个to_dict方法。这会将对象作为字典返回,然后您可以将其序列化为 YAML 或 JSON 或其他内容:

>>> import yaml
>>> print(yaml.safe_dump(res.to_dict()))
api_version: v1
kind: Namespace
metadata:
[...]
Run Code Online (Sandbox Code Playgroud)