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