1、python怎么管理k8s
k8s最核心的组件就是api-server,大部分的组件都是监听这个端口的,因此只有有着api就能进行使用python来管理k8s了
2、操作
1、参数详细的介绍
| |
| from kubernetes import client,config |
| from kubernetes.stream import stream |
| |
| Api_Instance = client.CoreV1Api() |
| |
| Api_Batch = client.BatchV1Api() |
| |
| CoreV1Api |
| pods的相关操作 |
| list_namespaced_pod(namespace)列出特定命名空间中的所有 Pod。 |
| read_namespaced_pod(name, namespace) 获取特定命名空间中某个 Pod 的详细信息 |
| create_namespaced_pod(namespace, body): 在特定命名空间中创建一个新的 Pod |
| delete_namespaced_pod(name, namespace): 删除特定命名空间中的某个 Pod |
| |
| service相关的操作 |
| list_namespaced_service(namespace): 列出特定命名空间中的所有 Service |
| read_namespaced_service(name, namespace): 获取特定命名空间中某个 Service 的详细信息 |
| create_namespaced_service(namespace, body): 在特定命名空间中创建一个新的 Service |
| delete_namespaced_service(name, namespace): 删除特定命名空间中的某个 Service |
| ice。 |
| delete_namespaced_service(name, namespace): 删除特定命名空间中的某个 Service。 |
| |
| ConfigMaps(ConfigMap 相关操作) |
| |
| list_namespaced_config_map(namespace): 列出特定命名空间中的所有 ConfigMap。 |
| read_namespaced_config_map(name, namespace): 获取特定命名空间中某个 ConfigMap 的详细信息。 |
| create_namespaced_config_map(namespace, body): 在特定命名空间中创建一个新的 ConfigMap。 |
| delete_namespaced_config_map(name, namespace): 删除特定命名空间中的某个 ConfigMap。 |
| |
| Secrets(Secret 相关操作) |
| |
| list_namespaced_secret(namespace): 列出特定命名空间中的所有 Secret。 |
| read_namespaced_secret(name, namespace): 获取特定命名空间中某个 Secret 的详细信息。 |
| create_namespaced_secret(namespace, body): 在特定命名空间中创建一个新的 Secret。 |
| delete_namespaced_secret(name, namespace): 删除特定命名空间中的某个 Secret。 |
| |
| BatchV1Api |
| 提供批处理api资源(jobs和cronjobs)的访问,批处理api资源,通常用于管理批处理任务和定时的任务 |
| |
| 主要方法 |
| Jobs(Job 相关操作) |
| |
| list_namespaced_job(namespace): 列出特定命名空间中的所有 Job。 |
| read_namespaced_job(name, namespace): 获取特定命名空间中某个 Job 的详细信息。 |
| create_namespaced_job(namespace, body): 在特定命名空间中创建一个新的 Job。 |
| delete_namespaced_job(name, namespace): 删除特定命名空间中的某个 Job。 |
| |
| CronJobs(CronJob 相关操作) |
| |
| list_namespaced_cron_job(namespace): 列出特定命名空间中的所有 CronJob。 |
| read_namespaced_cron_job(name, namespace): 获取特定命名空间中某个 CronJob 的详细信息。 |
| create_namespaced_cron_job(namespace, body): 在特定命名空间中创建一个新的 CronJob。 |
| delete_namespaced_cron_job(name, namespace): 删除特定命名空间中的某个 CronJob |
| |
2、k8s节点
| |
| def list_node(): |
| node_name=api_Instance.list_node() |
| data={} |
| for i in node_name.items: |
| |
| data[i.metadata.name] = { |
| "name": i.metadata.name, |
| "status": i.status.conditions[-1].type if i.status.conditions[-1].status == "True" else "NotReady", |
| "ip": i.status.addresses[0].address, |
| "kubelet_version": i.status.node_info.os_image, |
| } |
| return data |
| allnode=list_node() |
| print(allnode) |
| |
| |
| {'master': {'name': 'master', 'status': 'Ready', 'ip': '192.168.109.100', 'kubelet_version': 'CentOS Linux 7 (Core)'}, 'node1': {'name': 'node1', 'status': 'Ready', 'ip': '192.168.109.101', 'kubelet_version': 'CentOS Linux 7 (Core)'}, 'node2': {'name': 'node2', 'status': 'Ready', 'ip': '192.168.109.102', 'kubelet_version': 'CentOS Linux 7 (Core)'}} |
| |
| 这样的话就能得到所有的node节点了 |
| |
3、关于namespace的详细操作
| |
| from kubernetes import client,config |
| config.kube_config.load_kube_config("D:/config") |
| |
| api_Instance = client.CoreV1Api() |
| for ns in api_Instance.list_namespace().items: |
| print(ns.metadata.name) |
| |
| |
| |
| nameapce_name="dev" |
| namespace=api_Instance.read_namespace(name=nameapce_name) |
| print(namespace.metadata.name) |
| for i in namespace.metadata.labels.keys(): |
| print(i) |
| print(namespace.metadata.uid) |
| |
| |
| |
| del_namespace="dev" |
| api_Instance.delete_namespace(name=del_namespace) |
| print(f"{del_namespace} is delete") |
| |
| |
| nameapce=client.V1Namespace( |
| metadata=client.V1ObjectMeta( |
| name= "dev", |
| labels={"app": "example-app"} |
| ) |
| ) |
| api_Instance.create_namespace(body=nameapce) |
| |
| |
4、pod的详细操作
1、展示pod
| |
| def list_pod(): |
| data={} |
| for i in api_Instance.list_pod_for_all_namespaces().items: |
| data[i.metadata.name]={ |
| "ip": i.status.pod_ip, |
| "namespace": i.metadata.namespace |
| } |
| return data |
| pod=list_pod() |
| print(pod) |
| |
| |
| pod_name="nginx-deployment-5cb65f68db-jnbft" |
| pod1_name=api_Instance.read_namespaced_pod(name=pod_name,namespace="dev") |
| print(f"{pod1_name.metadata.name}\n" |
| f"ip为{pod1_name.status.pod_ip}") |
| |
| |
| |
| pod_name=api_Instance.list_namespaced_pod(namespace="default") |
| print(pod_name) |
| |
2、删除Pod
| for i in api_Instance.list_namespaced_pod(namespace="default").items: |
| pod_name=i.metadata.name |
| api_Instance.delete_namespaced_pod(name=pod_name,namespace="default") |
| print(f"{pod_name}删除成功") |
3、创建pod
| |
| apiVersion: v1 |
| kind: Pod |
| metadata: |
| name: d3 |
| namespace: default |
| spec: |
| containers: |
| - name: nginx |
| image: nginx:1.17.2 |
| imagePullPolicy: IfNotPresent |
| |
| import yaml |
| def pod_create(file,namespace="default"): |
| with open(file) as f: |
| dev =yaml.safe_load(f) |
| pod1=api_Instance.create_namespaced_pod(namespace,body=dev) |
| return pod1 |
| pod=pod_create("pod.yaml") |
| print("res",pod) |
| |
4、修改pod内容
5、deployment的详细操作
1、查看控制器
| |
| qq=client.AppsV1Api() |
| |
| deploy_name=qq.list_namespaced_deployment(namespace="default") |
| print(deploy_name) |
| |
| dep=qq.list_deployment_for_all_namespaces().items |
| for i in dep: |
| print(i.metadata.name) |
| |
| |
| d1=qq.read_namespaced_deployment(namespace="default",name="nginx-deploy") |
| print(d1) |
| |
2、删除deployment
| d4=qq.list_namespaced_deployment(namespace="default").items |
| for i in d4: |
| dea=i.metadata.name |
| d3=qq.delete_namespaced_deployment(namespace="default",name=dea) |
| print(f"{dea} is delete") |
| |
3、创建deployment
| def creat_deployment(file,namespace="default"): |
| with open(file) as f: |
| dc1=yaml.safe_load(f) |
| ds=qq.create_namespaced_deployment(namespace,body=dc1) |
| return ds |
| rs=creat_deployment("deployment.yaml") |
| print(f"{rs}") |
| |
4、修改deployment
6、service的详细操作
1、查看service
| |
| q1=api_instance.list_service_for_all_namespaces().items |
| for i in q1: |
| print(i.metadata.name) |
| |
| |
| q2=api_instance.list_namespaced_service(namespace="default").items |
| for i in q2: |
| print(i.metadata.name) |
| |
| |
| q2=api_instance.read_namespaced_service(namespace="default",name="nginx-svc") |
| print(q2) |
| |
2、删除service
| d1=api_instance.delete_namespaced_service(namespace="default",name="nginx-svc") |
| print(f"删除成功") |
| |
3、创建service
| def creat_service(file,namespace="default"): |
| with open(file) as f: |
| svc=yaml.safe_load(f) |
| s1=api_instance.create_namespaced_service(namespace,body=svc) |
| return s1 |
| rs=creat_service("service.yaml") |
| print(f"{rs}") |
4、修改service
7、job详细的操作
1、查看job
| ww=client.BatchV1Api() |
| |
| j1=ww.list_job_for_all_namespaces().items |
| for i in j1: |
| print(i.metadata.name) |
| |
| |
| j2=ww.list_namespaced_job(namespace="default") |
| for i in j2.items: |
| print(i.metadata.name) |
| |
| |
| j3 = ww.read_namespaced_job(namespace="default",name="job-controller") |
| print(j3) |
| |
| |
2、删除job
| j3=ww.delete_namespaced_job(namespace="default",name="job-controller") |
| print("删除成功") |
| |
| |
| w1=api_instance.list_namespaced_pod(namespace="default") |
| |
| for i in w1.items: |
| if i.metadata.labels["app"] == "counter-pod": |
| pod_name=i.metadata.name |
| api_instance.delete_namespaced_pod(namespace="default",name=pod_name) |
| print(f"{pod_name} is delete") |
| |
3、创建job
| def create_job(file,namespace="default"): |
| with open(file) as f: |
| dev=yaml.safe_load(f) |
| j1=ww.create_namespaced_job(namespace,body=dev) |
| return j1 |
| rs=create_job("job.yaml") |
| print(f"{rs}") |
| |
4、修改job
3、总结
1、python管理k8s
python提供了很多的api接口来让我们调用k8s
| core_api = client.CoreV1Api() |
| apps_api = client.AppsV1Api() |
| batch_api = client.BatchV1Api() |
| rbac_api = client.RbacAuthorizationV1Api() |
| networking_api = client.NetworkingV1Api() |
| custom_objects_api = client.CustomObjectsApi() |
| |
2、各种方法大同小异
1、列出的资源
| |
| api.list_资源类型_for_all_namespace() |
| |
| |
| api.list_namespaced_资源类型(namespace=) |
| |
| |
| api.read_namespace_资源(namespace=,name=) |
| |
2、删除资源
| api.delete_namespaced_资源(namespace=,name=) |
| |
3、创建资源
| api.create_namespaced_资源(namespace=,body=) |
| |
4、修改资源
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库