python管理k8s集群

打印 上一主题 下一主题

主题 854|帖子 854|积分 2562

1、python怎么管理k8s

k8s最核心的组件就是api-server,大部分的组件都是监听这个端口的,因此只有有着api就能进行使用python来管理k8s了
2、操作

1、参数详细的介绍
  1. #导入这些库
  2. from kubernetes import  client,config
  3. from kubernetes.stream import  stream
  4. Api_Instance = client.CoreV1Api() #是一个python客户端中的一个类,提供对核心资源pods,service,configmaps,secrets等的访问,是k8s中集群管理和操作的基础
  5. Api_Batch = client.BatchV1Api()
  6. CoreV1Api
  7. pods的相关操作
  8. list_namespaced_pod(namespace)列出特定命名空间中的所有 Pod。
  9. read_namespaced_pod(name, namespace) 获取特定命名空间中某个 Pod 的详细信息
  10. create_namespaced_pod(namespace, body): 在特定命名空间中创建一个新的 Pod
  11. delete_namespaced_pod(name, namespace): 删除特定命名空间中的某个 Pod
  12. service相关的操作
  13. list_namespaced_service(namespace): 列出特定命名空间中的所有 Service
  14. read_namespaced_service(name, namespace): 获取特定命名空间中某个 Service 的详细信息
  15. create_namespaced_service(namespace, body): 在特定命名空间中创建一个新的 Service
  16. delete_namespaced_service(name, namespace): 删除特定命名空间中的某个 Service
  17. ice。
  18. delete_namespaced_service(name, namespace): 删除特定命名空间中的某个 Service。
  19. ConfigMaps(ConfigMap 相关操作)
  20. list_namespaced_config_map(namespace): 列出特定命名空间中的所有 ConfigMap。
  21. read_namespaced_config_map(name, namespace): 获取特定命名空间中某个 ConfigMap 的详细信息。
  22. create_namespaced_config_map(namespace, body): 在特定命名空间中创建一个新的 ConfigMap。
  23. delete_namespaced_config_map(name, namespace): 删除特定命名空间中的某个 ConfigMap。
  24. Secrets(Secret 相关操作)
  25. list_namespaced_secret(namespace): 列出特定命名空间中的所有 Secret。
  26. read_namespaced_secret(name, namespace): 获取特定命名空间中某个 Secret 的详细信息。
  27. create_namespaced_secret(namespace, body): 在特定命名空间中创建一个新的 Secret。
  28. delete_namespaced_secret(name, namespace): 删除特定命名空间中的某个 Secret。
  29. BatchV1Api
  30. 提供批处理api资源(jobs和cronjobs)的访问,批处理api资源,通常用于管理批处理任务和定时的任务
  31. 主要方法
  32. Jobs(Job 相关操作)
  33. list_namespaced_job(namespace): 列出特定命名空间中的所有 Job。
  34. read_namespaced_job(name, namespace): 获取特定命名空间中某个 Job 的详细信息。
  35. create_namespaced_job(namespace, body): 在特定命名空间中创建一个新的 Job。
  36. delete_namespaced_job(name, namespace): 删除特定命名空间中的某个 Job。
  37. CronJobs(CronJob 相关操作)
  38. list_namespaced_cron_job(namespace): 列出特定命名空间中的所有 CronJob。
  39. read_namespaced_cron_job(name, namespace): 获取特定命名空间中某个 CronJob 的详细信息。
  40. create_namespaced_cron_job(namespace, body): 在特定命名空间中创建一个新的 CronJob。
  41. delete_namespaced_cron_job(name, namespace): 删除特定命名空间中的某个 CronJob
复制代码
2、k8s节点
  1. #获取所有的node节点
  2. def list_node():
  3.     node_name=api_Instance.list_node()
  4.     data={}
  5.     for i in node_name.items:  #获取的就是这个items的对应的列表
  6.         # print(i)   获取这个对象
  7.         data[i.metadata.name] = {
  8.             "name": i.metadata.name,
  9.             "status": i.status.conditions[-1].type if i.status.conditions[-1].status == "True" else "NotReady",   #这个是三元运算符,第一个结果成立了,就为true,否则为NotReady
  10.             "ip": i.status.addresses[0].address,
  11.             "kubelet_version": i.status.node_info.os_image,
  12.         }
  13.     return data
  14. allnode=list_node()
  15. print(allnode)
  16. #输出结果
  17. {'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)'}}
  18. 这样的话就能得到所有的node节点了
复制代码
3、关于namespace的详细操作
  1. #列出所有的名称空间
  2. from kubernetes import  client,config
  3. config.kube_config.load_kube_config("D:/config")  #获取相关的认证信息,
  4. api_Instance = client.CoreV1Api()
  5. for ns in api_Instance.list_namespace().items:
  6.     print(ns.metadata.name)    #返回是是一个对象,然后items对应的是一个列表,然后打印里面metadata.name对应的值即可
  7. #打印单个名称空间
  8. nameapce_name="dev"  #查看名称空间
  9. namespace=api_Instance.read_namespace(name=nameapce_name)  #查看单个名称空间
  10. print(namespace.metadata.name) #打印名称空间的名字
  11. for i in namespace.metadata.labels.keys(): #打印名称空间的标签
  12.     print(i)
  13. print(namespace.metadata.uid) #打印名称空间的uid
  14. #删除名称空间
  15. del_namespace="dev"
  16. api_Instance.delete_namespace(name=del_namespace)
  17. print(f"{del_namespace} is delete")
  18. #创建名称空间
  19. nameapce=client.V1Namespace(  #创建一个namespace对象
  20.     metadata=client.V1ObjectMeta(  #用于标识k8s资源对象元数据类型,就是里面的属性
  21.         name= "dev",
  22.         labels={"app": "example-app"}
  23.     )
  24. )
  25. api_Instance.create_namespace(body=nameapce)  #这个body字段接收的就是一些关于namespace一些属性,标签,注解等
复制代码
4、pod的详细操作

1、展示pod
  1. #使用的方法是list_pod_for_all_namespaces()
  2. def list_pod():
  3.     data={}
  4.     for i in api_Instance.list_pod_for_all_namespaces().items:
  5.         data[i.metadata.name]={
  6.             "ip": i.status.pod_ip,
  7.             "namespace": i.metadata.namespace
  8.         }
  9.     return data
  10. pod=list_pod()
  11. print(pod)
  12. #展示单个pod
  13. pod_name="nginx-deployment-5cb65f68db-jnbft"
  14. pod1_name=api_Instance.read_namespaced_pod(name=pod_name,namespace="dev")
  15. print(f"{pod1_name.metadata.name}\n"
  16.       f"ip为{pod1_name.status.pod_ip}")
  17. #展示名称空间下面的所有的pod
  18. #列出名称空间下面所有的pod
  19. pod_name=api_Instance.list_namespaced_pod(namespace="default")
  20. print(pod_name)
复制代码
2、删除Pod
  1. for i in api_Instance.list_namespaced_pod(namespace="default").items:
  2.     pod_name=i.metadata.name
  3.     api_Instance.delete_namespaced_pod(name=pod_name,namespace="default")
  4.     print(f"{pod_name}删除成功")
复制代码
3、创建pod
  1. #yaml文件
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5.     name: d3
  6.     namespace: default
  7. spec:
  8.   containers:
  9.     - name: nginx
  10.       image: nginx:1.17.2
  11.       imagePullPolicy: IfNotPresent
  12. import  yaml
  13. def pod_create(file,namespace="default"):
  14.     with open(file) as f:
  15.         dev =yaml.safe_load(f) #安全加载yaml格式数据
  16.         pod1=api_Instance.create_namespaced_pod(namespace,body=dev)
  17.         return  pod1
  18. pod=pod_create("pod.yaml")
  19. print("res",pod)
复制代码
4、修改pod内容

5、deployment的详细操作

1、查看控制器
  1. qq=client.AppsV1Api()  #查看deplyment,StatefulSet、DaemonSet控制器等资源
  2. #查看命名空间下的deployment
  3. deploy_name=qq.list_namespaced_deployment(namespace="default")
  4. print(deploy_name)
  5. #查看所有的deployment
  6. dep=qq.list_deployment_for_all_namespaces().items
  7. for i in dep:
  8.     print(i.metadata.name)
  9. #查看单独的控制器
  10. d1=qq.read_namespaced_deployment(namespace="default",name="nginx-deploy")
  11. print(d1)
复制代码
2、删除deployment
  1. d4=qq.list_namespaced_deployment(namespace="default").items
  2. for i in d4:
  3.     dea=i.metadata.name
  4.     d3=qq.delete_namespaced_deployment(namespace="default",name=dea)
  5.     print(f"{dea} is delete")
复制代码
3、创建deployment
  1. def creat_deployment(file,namespace="default"):
  2.     with open(file) as f:
  3.         dc1=yaml.safe_load(f) #yaml文件
  4.         ds=qq.create_namespaced_deployment(namespace,body=dc1)
  5.         return ds #返回这个rs
  6. rs=creat_deployment("deployment.yaml")
  7. print(f"{rs}")
复制代码
4、修改deployment

6、service的详细操作

1、查看service
  1. #查看所有的名称空间下的service
  2. q1=api_instance.list_service_for_all_namespaces().items
  3. for i in q1:
  4.     print(i.metadata.name)
  5. #查看名称空间下的所有svc
  6. q2=api_instance.list_namespaced_service(namespace="default").items
  7. for i in q2:
  8.     print(i.metadata.name)
  9. #查看单个svc
  10. q2=api_instance.read_namespaced_service(namespace="default",name="nginx-svc")
  11. print(q2)
复制代码
2、删除service
  1. d1=api_instance.delete_namespaced_service(namespace="default",name="nginx-svc")
  2. 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
  1. ww=client.BatchV1Api()
  2. #查看所有的job
  3. j1=ww.list_job_for_all_namespaces().items
  4. for i in j1:
  5.     print(i.metadata.name)
  6. #查看名称空间下面的所有job
  7. j2=ww.list_namespaced_job(namespace="default")
  8. for i in j2.items:
  9.     print(i.metadata.name)
  10. #单独查看job
  11. j3 = ww.read_namespaced_job(namespace="default",name="job-controller")
  12. print(j3)
复制代码
2、删除job
  1. j3=ww.delete_namespaced_job(namespace="default",name="job-controller")
  2. print("删除成功")
  3. #删除job下面的pod
  4. w1=api_instance.list_namespaced_pod(namespace="default")
  5. # print(w1)
  6. for i in w1.items:  #根据标签来进行定义
  7.     if i.metadata.labels["app"] == "counter-pod":
  8.         pod_name=i.metadata.name  #pod的名字
  9.         api_instance.delete_namespaced_pod(namespace="default",name=pod_name)
  10.         print(f"{pod_name} is delete")
复制代码
3、创建job
  1. def create_job(file,namespace="default"):
  2.     with open(file) as f:
  3.         dev=yaml.safe_load(f)  #读取这个文件
  4.         j1=ww.create_namespaced_job(namespace,body=dev)  #创建文件
  5.         return j1
  6. rs=create_job("job.yaml")
  7. print(f"{rs}")
复制代码
4、修改job

3、总结

1、python管理k8s

python提供了很多的api接口来让我们调用k8s
  1. core_api = client.CoreV1Api()  # 管理核心资源(Pod, Service, ConfigMap 等)
  2. apps_api = client.AppsV1Api()  # 管理应用资源(Deployment, StatefulSet, DaemonSet 等)
  3. batch_api = client.BatchV1Api()  # 管理批处理任务资源(Job, CronJob)
  4. rbac_api = client.RbacAuthorizationV1Api()  # 管理角色和权限绑定资源
  5. networking_api = client.NetworkingV1Api()  # 管理网络资源(Ingress, NetworkPolicy)
  6. custom_objects_api = client.CustomObjectsApi()  # 管理自定义资源(CRD)
复制代码
2、各种方法大同小异

1、列出的资源
  1. #列出所有的资源
  2. api.list_资源类型_for_all_namespace()
  3. #展示名称空间下面的所有的资源
  4. api.list_namespaced_资源类型(namespace=)
  5. #展示单个资源
  6. api.read_namespace_资源(namespace=,name=)
复制代码
2、删除资源
  1. api.delete_namespaced_资源(namespace=,name=)
复制代码
3、创建资源
  1. api.create_namespaced_资源(namespace=,body=)
复制代码
4、修改资源

[code][/code]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表