Python开发运维:Python调用K8S API实现资源管理

目录

一、实验

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__的值是"文件名"。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/211889.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在SpringData JPA 中实现对持久层的操作

1.导入依赖 hibernate 这个依赖自带实现JPA接口 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><depen…

TCP三次握手、四次挥手及状态转换详解

1.什么是TCP协议&#xff1f; 传输控制协议&#xff08;TCP&#xff0c;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;位于网络OSI七层模型的第四层&#xff0c;IP协议一起工作&#xff0c;TCP层是位于IP层之上…

(Spring学习07)Spring之启动刷新过程源码解析

概述 通常&#xff0c;我们说的Spring启动&#xff0c;就是构造ApplicationContext对象以及调用refresh()方法的过程。 首先&#xff0c;Spring启动过程主要做了这么几件事情&#xff1a; 构造一个BeanFactory对象解析配置类&#xff0c;得到BeanDefinition&#xff0c;并注册…

CrystalDiskInfo中文版(硬盘检测工具) v9.1.1.0 绿色汉化版-供大家学习研究参考

更新内容 重新支持三星SATA SSD寿命报告 增加对ZHITAI SC001的支持 新增SK hynix Gold S31支持 增加了KLEVV NEO N610的支持。 改进的Micron/Crucial SATA SSD支持 已更改 卸载程序将显示一个确认对话框&#xff0c;用于删除设置。 强大功能 1.拥有多国语言&#xff0c;…

27 动态规划解最大子序和

问题描述&#xff1a;给定一个整数数组nums&#xff0c;找到一个具有最大和的连续子数组(子数组最少含有一个元素)&#xff0c;返回其最大和。 动态规划求解&#xff1a;定义dp[i]表示以i元素为结尾的最大和&#xff0c;如果dp[i-1]小于零的话&#xff0c;dp[i]nums[i],否则dp…

React-hook-form-mui(三):表单验证

前言 在上一篇文章中&#xff0c;我们介绍了react-hook-form-mui的基础用法。本文将着重讲解表单验证功能。 react-hook-form-mui提供了丰富的表单验证功能&#xff0c;可以通过validation属性来设置表单验证规则。本文将详细介绍validation的三种实现方法&#xff0c;以及如何…

ts中type和interface类型声明的区别

1. 写法上 type 使用关键字 type 进行声明。 interface 使用关键字 interface 进行声明。 // 使用 type type MyType {param: string; };// 使用 interface interface MyInterface {param: string; }2. 可合并性 interface 具有可合并性&#xff0c;允许在同一作用域内多次…

045:Vue读取本地上传JSON文件,导出JSON文件方法

第045个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

jquery手写广告轮播图,无限循环功能

说明 在很多情况下&#xff0c;我们都需要开发广告轮播图&#xff0c;当我们进行页面的功能开发时&#xff0c;采用轮播图来实现也行&#xff0c;但是很多情况下&#xff0c;我们只需要简单的控制轮播循环轮播展示即可&#xff0c;所以用jq开开发广告轮播波&#xff0c;自定义…

spring更加松散的获取bean的方式ObjectProvider

概述 ObjectProvider直译就是对象提供者; 平时从spring中获取bean都是调用beanFactory.getBean()方法&#xff0c;如果bean不存在则会直接抛异常; 从spring 4.3开始引入了org.springframework.beans.factory.ObjectProvider接口,其提供了若干的方法&#xff0c;可以更松散的…

Idea 插件开发: Swing Designer设计器创建的组件全部为空问题记录

问题现象 通过Swing 设计器创建的对象, Swing组件全部是空的, 导致ToolWindowFactory工厂的实现类调用时候出现了空指针异常 如下方式创建的 问题分析 问题出现时候, 同时给我生成了一个createUIComponents的私有方法, 由于个人当时理解有误, 把他当成了初始化方法, 在里面…

Oracle高可用一家老小全在这里

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

用Java实现一对一聊天

目录 服务端 客户端 服务端 package 一对一用户; import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; imp…

s3-dist-cp 介绍教程示例使用方法

s3-dist-cp 是 AWS EMR 内置的用于 S3 和 HDFS 之间文件拷贝的专用工具,与 Hadoop 的 distcp 类似,也是通过 Map-Reduce 作业的方式实现分布式的文件复制(distcp 就是 distributed copy 分布式拷贝的意思)。 s3-dist-cp 并不是一个简单的在 S3 和 HDFS 之间拷贝文件的工具…

SpringBoot中MyBatis-Flex的集成和使用

一、MyBatis-Flex 是什么​ MyBatis-Flex是一个基于MyBatis的数据访问框架&#xff0c;专门为Flex应用程序而设计的。它提供了一种灵活而高效的方式来处理Flex应用程序中的数据访问&#xff0c;可以轻松地连接到各种数据源&#xff0c;并提供了一些方便的工具和功能&#xff0c…

虚拟机和主机间复制粘贴

文章目录 前言一、版本介绍二、安装工具1.确认配置2.安装工具3.重启 总结 前言 在Windows中使用虚拟机&#xff0c;可以很方便地linux&#xff0c;就像是在本地操作服务器一样。 一、版本介绍 虚拟机&#xff1a;VMware 15 操作系统&#xff1a;CentOS 7 二、安装工具 1.确…

delphi android打开外部文件,报错android.os.FileUriExposedException解决方法

Android 7.0强制启用了被称作 StrictMode的策略&#xff0c;带来的影响就是你的App对外无法暴露file://类型的URI了。 如果你使用Intent携带这样的URI去打开外部App(比如&#xff1a;打开系统相机拍照)&#xff0c;那么会抛出FileUriExposedException异常。 Delphi 为Android…

C++(14):通过tuple在构造对象时注入类型不确定的对象/插件

有的时候我们需要在构建对象时注入一系列类型不确定的对象或插件,怎么才能实现呢? #include <iostream> #include <string> #include <tuple>using namespace std;class A{ public:A(int a) : m_a(a){cout<<"construct A:"<<m_a<…

windows系统安装RocketMQ_dashboard

1.下载源码 按照官网说明下载源码 官网 官网文档 2.源码安装 2.1.① 编译rocketmq-dashboard 注释掉报错的maven插件frontend-maven-plugin、maven-antrun-plugin mvn clean package -Dmaven.test.skiptrue2.2.② 运行rocketmq-dashboard java -jar target/rocketmq-…

Qt基础-connect函数详解

本文详解Qt的connect函数用法。 目录 定义 形式 函数原型 实例说明 定义 Qt中的信号槽为核心内容,一定要熟练掌握。链接信号使用connect函数。 QObject::connect函数,顾名思义,链接函数,作用是链接信号(signal)和槽(