我有一个 python 脚本,它基本上运行以下三个命令:
kubectl apply -f class.yaml
kubectl apply -f rbac.yaml
kubectl apply -f deployment-arm.yaml
Run Code Online (Sandbox Code Playgroud)
我想用python写的kubernetes-client来代替。我当前的代码,加载那里的 yaml 文件(使用pyyaml
),对它们进行一些编辑,插入一个文件并使用命令行 kubectl 来执行这三个命令。部分代码:
# load files, edit them and dump into new files, part ...
result = run(['kubectl', 'apply', '-f', class_file_path])
# status check part ...
result = run(['kubectl', 'apply', '-f', rbac_file_path])
# status check part ...
result = run(['kubectl', 'apply', '-f', deployment_file_path])
# status check part ...
Run Code Online (Sandbox Code Playgroud)
我想要做什么:用 python kubernetes-client 替换这三个命令。阅读文档并查看主题,我遇到了create_namespaced_deployment
我认为我需要用于deployment_file_path
文件的方法。但我似乎无法弄清楚我需要对另外两个文件做什么。
假设我已经加载了三个 yaml 文件(使用 pyyaml)并对其进行了编辑(没有转储到新文件中),现在您有免费的 yaml dicts deployment_dict
, class_dict
, and rbac_dict
,我如何使用客户端执行上述三个方法?
编辑:顺便说一句,如果无法传递三个字典,我可以再次将它们转储到文件中,但我想使用 python 客户端而不是 kubectl。怎么做?
每个对象和动作都有一个单独的函数:
from kubernetes import client, config
import yaml
body = yaml.safe_load("my_deployment.yml")
config.load_kube_config()
apps_api = client.AppsV1Api()
apps_api.create_namespaced_deployment(body=body, namespace="default")
apps_api.replace_namespaced_deployment(body=body, namespace="default")
apps_api.patch_namespaced_deployment(body=body, namespace="default")
apps_api.delete_namespaced_deployment(body=body, namespace="default")
body = yaml.safe_load("my_cluster_role.yml")
rbac_api = client.RbacAuthorizationV1Api()
rbac_api.create_cluster_role(body=body)
rbac_api.patch_cluster_role(body=body)
rbac_api.replace_cluster_role(body=body)
rbac_api.delete_cluster_role(body=body)
# And so on
Run Code Online (Sandbox Code Playgroud)
使用时,kubectl apply
您不必关心对象是否已经存在、使用什么 API、应用哪个方法等。使用客户端库,正如您从上面的示例中看到的,您需要:
create_something
如果已经存在,则该方法将不起作用something
。我建议您仔细阅读该库提供的示例,它们确实非常适合学习这些东西。
归档时间: |
|
查看次数: |
631 次 |
最近记录: |