k8s:(9)容器云Python运维开发案例
案例描述
本案例讲述了Python调用Kubernetes API以及SDK实现Kubernetes资源的管理,并基于http.server模块,封装Kubernetes资源的API,实现将Kubernetes资源封装为Web服务。
规划节点
节点规划见表1-1。
表1-1 节点规划
IP | 主机名 | 节点 |
---|---|---|
192.168.200.21 | master | master |
基础准备
确保已部署完成Kubernetes集群,安装了Python3的环境。
下载本案例所需用的的代码原文件:
1 | kubernetes-py.tar.gz |
案例实施
基于Kubernetes Restful API实现Deployment创建
在提供的OpenStack私有云平台上,使用k8s-python-dev镜像创建1台云主机,云主机类型使用4vCPU/12G内存/100G硬盘。该主机中已经默认安装了所需的开发环境,登录默认账号密码为“root/1DaoYun@2022”。
使用Kubernetes Restful API库,在/root目录下,创建api_deployment_manager.py文件,要求编写Python代码,代码实现以下任务:
(1)编写Python程序实现Deployment资源的创建。Deployment配置信息如下。如果同名Deployment存在,先删除再创建。
(2)创建完成后,查询该Deployment的详细信息,执行结果控制台输出,以yaml格式展示。
下载离线源,加载镜像:
1 | [root@master ~]# ls |
创建Deployment 的yaml的配置如下:
1 | [root@master ~]# vi nginx-deployment.yaml |
api_deployment_manager.py:
1 | import requests,json,yaml,time |
执行api_deployment_manager.py文件:
1 | [root@master ~]# python3 api_deployment_manager.py |
查看pod运行情况:
1 | [root@master ~]# kubectl get pods |
基于Kubernetes Python SDK实现Job创建
在前面已建好的Kubernetes开发环境云平台上。使用Kubernetes Python SDK的“kubernetes”Python库,在/root目录下,创建sdk_job_manager.py文件,要求编写Python代码,代码实现以下任务:
(1)编写Python程序实现Job资源的创建。Job配置信息如下。如果同名Job存在,先删除再创建(需要将集群的config文件夹放到/root)。
(2)创建完成后,查询该Job的详细信息,执行结果控制台输出,以Json格式展示。
Job创建yaml的信息如下:
1 | vi spec-pi-job.yaml |
sdk_job_manager.py:
1 | import requests,json,time,yaml |
执行sdk_job_manager.py文件:
1 | [root@master ~]# python3 sdk_job_manager.py |
Pod资源的Restful APIs HTTP服务封装
编写Python程序实现Pod资源管理程序,将Pod资源管理的封装成Web服务。
在/root目录下创建pod_server.py程序,实现Pod的增删查改等Web访问操作。http.server的host为localhost,端口8889;程序内部实现Kubernetes认证。
提示说明:Python标准库http.server模块,提供了HTTP Server请求封装。
需要实现的Restful API接口如下:
- GET /pod/{name} :查询指定名称{name}的Pod;Response的Body以Json格式输出。
- POST /pod/{yamlfilename} :创建yaml文件名称为{yamlfilename}的Pod;Response的Body以Json格式。
使用curl -X GET 127.0.0.1:8889/pod/来测试,创建Pod的yaml文件如下:
1 | vi python-dev-pod-nginx2.yaml |
api_pod_manager.py:
1 | import requests,json,time,yaml |
pod_server.py:
1 | import requests |
后台执行:
1 | [root@master ~]# python3 pod_server.py >/dev/null 2>&1 & |
测试接口:
1 | [root@master ~]# curl -X GET 127.0.0.1:8889/pod/ |
Service资源Restful APIs HTTP服务封装
编写Python程序实现Service资源管理程序,将Service资源管理的封装成Web服务。
在/root目录下创建service_server.py程序,实现Service的增删查改等Web访问操作。http.server的host为localhost,端口8888;程序内部实现Kubernetes认证。
提示说明:Python标准库http.server模块,提供了HTTP Server请求封装。
需要实现的Restful API接口如下:
- GET /services/{name}:查询指定名称{name}的Service;Response的Body以Json格式输出。
- POST /services/{yamlfilename} :创建yaml文件名称为{yamlfilename}的Service;Response的Body以Json格式,(手工将文件服务器主目录所有*.yaml文件下载到root目录下)。
- DELETE /services/{name}:删除指定名称的Service;Response的Body以Json格式。
使用curl -X GET 127.0.0.1:8888/services/kubernetes可以进行测试,创建service的yaml文件如下:
1 | vi python-dev-svc3.yaml |
api_service_manager.py:
1 | import requests,time |
service_server.py:
1 | import requests |
后台执行:
1 | [root@master ~]# python3 service_server.py >/dev/null 2>&1 & |
测试接口:
1 | [root@master ~]# curl -X GET 127.0.0.1:8888/services/kubernetes |