目錄
一、實驗
1.Python操作K8S API獲取資源
2.Python操作K8S API創建deployment資源
3.Python操作K8S API刪除k8s資源
4.Python操作K8S API修改k8s資源
5.Python操作K8S API查看k8s資源
二、問題
1.Windows11安裝kubernetes報錯
2.Python通過調用哪些方法實現Pod和Deployment管理
3.? __name__ == '__main__' 有何作用
一、實驗
1.Python操作K8S API獲取資源
(1)在Windows上安裝kubernetes模塊
python -m pip install --upgrade pippip install --ignore-installed kubernetespip install --ignore-installed ipaddress
(2)認證
#把k8s集群的控制節點上的/root/.kube/config傳到自己的電腦指定路徑下
#下載到桌面
sz /root/.kube/config
下載到桌面傳到C盤
(3)新建項目
(4)新建python file
(5)編寫代碼:python-k8s-api.py
import kubernetes
from kubernetes import client,config
config.kube_config.load_kube_config(config_file='C:\config')#獲取CoreV1API版本對象
v1 = client.CoreV1Api()#列出來k8s中的所有名稱空間
for namespace in v1.list_namespace().items:print(namespace.metadata.name)
(6)查看namespace
kubectl get ns
(7)?列舉所有名稱空間下的所有service
services=v1.list_service_for_all_namespaces()
for svc in services.items:print('%s \t%s \t%s \t%s \n' %(svc.metadata.namespace,svc.metadata.name,svc.spec.cluster_ip,svc.spec.ports))
(8) 查看svc
kubectl get svc
(9)?列舉所有名稱空間下的pod資源
pods=v1.list_pod_for_all_namespaces()
for i in pods.items:print("%s\t%s\t%s" %(i.status.pod_ip,i.metadata.namespace,i.metadata.name))
(10) 查看pod
kubectl get pods
(11)client.AppsV1Api對象可以操作跟k8s中控制器相關資源對象,列舉所有名稱空間的deployment
v1_deploy=client.AppsV1Api()
deploys=v1_deploy.list_deployment_for_all_namespaces()
for i in deploys.items:print("%s\t%s\t%s"%(i.metadata.name,i.metadata.namespace,i.spec.replicas))
(12)查看deploy
2.Python操作K8S API創建deployment資源
(1) 編寫代碼:python-api-deploy.py
from os import path
import yaml
from kubernetes import client,config
#引入要用的包
def main():config.load_kube_config(config_file='C:\config')
#讀入集群相關信息,指定操作集群with open(path.join(path.dirname(__file__),"nginx-deploy.yaml")) as f:dep=yaml.safe_load(f)k8s_apps_v1=client.AppsV1Api()resp = k8s_apps_v1.create_namespaced_deployment(body=dep,namespace='default')print('deployment created,name=%s'%(resp.metadata.name))if __name__ == '__main__':main()
(2)編寫deployment文件:?nginx-deploy.yaml
apiversion : apps/v1
kind : Deployment
metadata:name : nginx-deploymentlabels :app: nginx
spec :replicas: 3selector:matchLabels :app: nginxtemplate:metadata :labels :app: nginxspec :containers:- name : nginximage: nginxports :- containerPort : 80
(3) 目錄
(4)運行代碼
(5)K8S集群查看deployment
kubectl get deploy
(6)查看pod
kubectl get pod
3.Python操作K8S API刪除k8s資源
(1)編寫代碼:api-delete-k8s.py
from os import path
import yaml
from kubernetes import client,configdef main():config.load_kube_config(config_file='C:\config')k8s_core_v1=client.CoreV1Api()resp=k8s_core_v1.delete_namespaced_pod(namespace='default',name='nginx-7f466444dc-w2cqq')print('delete pod')
main()
(2)查看pod
kubectl get pods
4.Python操作K8S API修改k8s資源
(1)查看pod
(2)?編寫代碼:api-modify-k8s.py
from os import path
import yaml
from kubernetes import client,config
def main():config.load_kube_config(config_file='C:\config')k8s_core_v1=client.CoreV1Api()old_resp=k8s_core_v1.read_namespaced_pod(namespace='default',name=' nginx-deployment-7848d4b86f-57rvf')old_resp.spec.containers[0].image='busybox'#修改鏡像new_resp=k8s_core_v1.patch_namespaced_pod(namespace='default',name=' nginx-deployment-7848d4b86f-57rvf ',body=old_resp)print(new_resp.spec.containers[0].image)
if __name__=='__main__':
main()
(3)?操作pod: nginx-deployment-7848d4b86f-57rvf ,將pod鏡像nginx修改為busybox
(4) 查看pod
kubectl get pods
(5)??查看pod詳細信息,pod鏡像nginx已修改為busybox
kubectl describe pod nginx-deployment-7848d4b86f-57rvf
5.Python操作K8S API查看k8s資源
(1)編寫代碼:api-read-k8s.py
from os import path
import yaml
from kubernetes import client,config
def main():config.load_kube_config(config_file='C:\config')k8s_core_v1=client.CoreV1Api()resp=k8s_core_v1.read_namespaced_pod(namespace='default',name=' nginx-deployment-7848d4b86f-57rvf')print('read pod')
# print(resp)#讀取指定的信息print(resp.spec.containers[0])print(resp.spec.containers[0].image)
if __name__=='__main__':main()
(2)?查看pod
kubectl get pods
(3)讀取pod: nginx-deployment-7848d4b86f-57rvf 信息
二、問題
1.Windows11安裝kubernetes報錯
(1)報錯
(2)原因分析
未更新pip
(3)解決方法
執行如下命令:
python -m pip install --upgrade pippip install --ignore-installed kubernetes
上面報錯需要重裝:
如下面報錯需要安裝ipaddress:
pip install --ignore-installed ipaddress
kubernetes模塊安裝成功:
2.Python通過調用哪些方法實現Pod和Deployment管理
(1)?Pod
Pod調用CoreV1Api方法
(2)?Deployment
Deployment調用AppsV1Api 方法
3.? __name__ == '__main__' 有何作用
(1)問題
希望保留末尾測試代碼,即上面調用函數和類,但也不希望再導入模塊的時候執行。
(2)作用
利用Python文件的一個內置屬性__name__實現,如果直接運行Python文件,__name__的值是"__main__",如果import一個模塊,那么模塊的__name__的值是"文件名"。