如何使用 kubernetes-client 执行“kubectl apply”

ves*_*sii 7 python kubernetes

我有一个 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。怎么做?

ane*_*yte 3

每个对象和动作都有一个单独的函数:

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、应用哪个方法等。使用客户端库,正如您从上面的示例中看到的,您需要:

  1. 加载 kube 配置。
  2. 选择要使用的正确 API。
  3. 选择您要使用的方法。请注意,create_something如果已经存在,则该方法将不起作用something

我建议您仔细阅读该库提供的示例,它们确实非常适合学习这些东西。