python管理k8s集群

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、修改资源



posted @ 2024-05-25 20:40  q_7  阅读(48)  评论(0编辑  收藏  举报