python - 如何使用 kubernetes-client 执行“kubectl apply”
问题描述
我有一个 python 脚本,它基本上运行以下三个命令:
kubectl apply -f class.yaml
kubectl apply -f rbac.yaml
kubectl apply -f deployment-arm.yaml
我想用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 ...
我想做的:用 python kubernetes-client 替换这三个命令。阅读文档并查看主题,我遇到了create_namespaced_deployment
我认为需要用于deployment_file_path
文件的方法。但我似乎无法弄清楚我需要对另外两个文件做什么。
假设我已经加载了三个 yaml 文件(使用 pyyaml)并编辑了它们(没有转储到新文件中),现在你有免费的 yaml dicts deployment_dict
、class_dict
和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
当您使用时,kubectl apply
您不必关心对象是否已经存在、要使用什么 API、要应用哪种方法,但对于客户端,您必须这样做。从示例中可以看出,您需要:
- 加载 kube-config。
- 选择要使用的正确 API(仅在加载配置后创建对象)。
- 选择您要使用的方法。请注意,如果已经存在,这
create_something
将不起作用。something
由于严格的命名模式,很容易从客户端获得所需的功能
getattr(some_k8s_api, f"{verb}_{namespaced_or_not}_{kind.lower()}")
我建议您仔细阅读图书馆提供的示例,它们真的非常适合学习。
推荐阅读
- cxf - 是否可以将 Apache CXF 与 Quarkus 一起使用,并进行本机编译?
- c - 如何解决这个 if else 语句?c prog
- google-api - 使用服务帐号为用户创建团队云端硬盘
- c# - ASP.Net Core 2.1 中间件 WindowsPrincipal ClaimsPrincipal
- java - 从不同的类调用同名方法
- geopandas - GeoViews:使用多边形几何图形向叶绿体添加滑块
- java - 无法通过 javaRDD 进行迭代器
- amazon-web-services - Amazon CloudFront URL 问题
- mvvm - WTS 无法在 XAML 中声明 ViewModelLocator
- php - 在 php 中分别拆分 URL 和返回组件