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() #是一个python客户端中的一个类,提供对核心资源pods,service,configmaps,secrets等的访问,是k8s中集群管理和操作的基础
- 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节点
- #获取所有的node节点
- def list_node():
- node_name=api_Instance.list_node()
- data={}
- for i in node_name.items: #获取的就是这个items的对应的列表
- # print(i) 获取这个对象
- data[i.metadata.name] = {
- "name": i.metadata.name,
- "status": i.status.conditions[-1].type if i.status.conditions[-1].status == "True" else "NotReady", #这个是三元运算符,第一个结果成立了,就为true,否则为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) #返回是是一个对象,然后items对应的是一个列表,然后打印里面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) #打印名称空间的uid
- #删除名称空间
- del_namespace="dev"
- api_Instance.delete_namespace(name=del_namespace)
- print(f"{del_namespace} is delete")
- #创建名称空间
- nameapce=client.V1Namespace( #创建一个namespace对象
- metadata=client.V1ObjectMeta( #用于标识k8s资源对象元数据类型,就是里面的属性
- name= "dev",
- labels={"app": "example-app"}
- )
- )
- api_Instance.create_namespace(body=nameapce) #这个body字段接收的就是一些关于namespace一些属性,标签,注解等
复制代码 4、pod的详细操作
1、展示pod
- #使用的方法是list_pod_for_all_namespaces()
- 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
- 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
- #列出名称空间下面所有的pod
- 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
- #yaml文件
- 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) #安全加载yaml格式数据
- 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() #查看deplyment,StatefulSet、DaemonSet控制器等资源
- #查看命名空间下的deployment
- deploy_name=qq.list_namespaced_deployment(namespace="default")
- print(deploy_name)
- #查看所有的deployment
- 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) #yaml文件
- ds=qq.create_namespaced_deployment(namespace,body=dc1)
- return ds #返回这个rs
- rs=creat_deployment("deployment.yaml")
- print(f"{rs}")
复制代码 4、修改deployment
6、service的详细操作
1、查看service
- #查看所有的名称空间下的service
- q1=api_instance.list_service_for_all_namespaces().items
- for i in q1:
- print(i.metadata.name)
- #查看名称空间下的所有svc
- q2=api_instance.list_namespaced_service(namespace="default").items
- for i in q2:
- print(i.metadata.name)
- #查看单个svc
- 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()
- #查看所有的job
- j1=ww.list_job_for_all_namespaces().items
- for i in j1:
- print(i.metadata.name)
- #查看名称空间下面的所有job
- j2=ww.list_namespaced_job(namespace="default")
- for i in j2.items:
- print(i.metadata.name)
- #单独查看job
- 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("删除成功")
- #删除job下面的pod
- w1=api_instance.list_namespaced_pod(namespace="default")
- # print(w1)
- for i in w1.items: #根据标签来进行定义
- if i.metadata.labels["app"] == "counter-pod":
- pod_name=i.metadata.name #pod的名字
- 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() # 管理核心资源(Pod, Service, ConfigMap 等)
- apps_api = client.AppsV1Api() # 管理应用资源(Deployment, StatefulSet, DaemonSet 等)
- batch_api = client.BatchV1Api() # 管理批处理任务资源(Job, CronJob)
- rbac_api = client.RbacAuthorizationV1Api() # 管理角色和权限绑定资源
- networking_api = client.NetworkingV1Api() # 管理网络资源(Ingress, NetworkPolicy)
- custom_objects_api = client.CustomObjectsApi() # 管理自定义资源(CRD)
复制代码 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、修改资源
[code][/code]
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |