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

news2024/11/29 20:51:06

目录

一、实验

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 pip

pip install --ignore-installed kubernetes

pip 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-deployment
  labels :
    app: nginx
spec :
  replicas: 3
  selector:
    matchLabels :
      app: nginx
  template:
    metadata :
      labels :
        app: nginx
    spec :
      containers:
      - name : nginx
        image: nginx
        ports :
        - 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,config

def 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 pip

pip 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.coloradmin.cn/o/1299844.html

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

相关文章

变容二极管测量

测量变量二极管一般有两种方法:一是搭建偏置电路,用LCR电桥测量电容;二是搭建一个VCO,通过测量频率,简接测量变容二极管的电容值。 正好手里有许老师LCR,搭建一个简单的测试电路即可,电路图如下…

复旦量化多策略公开课总结

《掘金之心公众号:gnu_isnot_unix》前Citadel现自营交易与量化管理,分享热点,主观,量化交易内容。活在当下,终身学习 - 给在职却对未来始终迷茫的人的公众号。借此想告诉不断努力,对生活充满热情的读者们&a…

基于ssm在线云音乐系统的设计与实现论文

摘 要 随着移动互联网时代的发展,网络的使用越来越普及,用户在获取和存储信息方面也会有激动人心的时刻。音乐也将慢慢融入人们的生活中。影响和改变我们的生活。随着当今各种流行音乐的流行,人们在日常生活中经常会用到的就是在线云音乐系统…

洛谷P1450 硬币购物

传送门: P1450 [HAOI2008] 硬币购物 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1450 题干: 题目描述 共有 4 种硬币。面值分别为 c1​,c2​,c3​,c4​。 某人去商店买东西,去了 n 次,对于…

【Angular开发】Angular在2023年之前不是很好

做一个简单介绍,年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【架构师酒馆】…

eclipse中maven的配置

Maven下载地址:https://maven.apache.org/download.cgi 下载完成以后解压到非中文目录,建议放一个比较大的盘符下,因为Maven会一直从网上更新各种库存放在这个目录下,慢慢的会变得很大。 Maven环境变量配置 创建环境变量 在桌…

Diary22-全网最全的CSS3.0讲解

CSS学习 1.认识CSS 1.1什么是CSS CSS:Cascading Style Sheet——层叠级联样式表 CSS:表现(美化网页) 字体;颜色;边距;高度;宽度;背景图片;网页定位&…

再见了Future,图解JDK21虚拟线程的结构化并发

Java为我们提供了许多启动线程和管理线程的方法。在本文中,我们将介绍一些在Java中进行并发编程的选项。我们将介绍结构化并发的概念,然后讨论Java 21中一组预览类——它使将任务拆分为子任务、收集结果并对其进行操作变得非常容易,而且不会不…

【图片版】计算机组成原理考前复习题【第2章 运算方法和运算器-1】

目录 前言 考前复习题(必记) 结尾 前言 在计算机组成原理的学习过程中,我们深入探索了计算机系统概述这一重要领域。计算机系统作为现代科技的核心,是整个计算机科学的基石。我们将学到的知识与理论转化为了能够解决现实问题的…

3DMAX关于显示驱动问题的解决方法大全

3DMAX与显卡驱动有关的问题主要有以下几种情况: 1.3DMAX启动弹出这样的界面: 2.主工具栏按钮不显示,或者鼠标移上去才显示(刷新问题)。 3.视口菜单不显示或显示不全。 问题分析: 首先&#x…

AspNetCore 中使用 Knife4jUI 更加友好的Swagger界面

🚀介绍 aspnetcore.knife4j是一个基于.NET Core平台的Swagger UI库,它提供了API文档的生成和管理功能。这个库的前身是swagger-bootstrap-ui,在Java项目中广泛使用,由于其优秀的界面和易用性被许多开发者所推崇。现在&#xff0c…

一文学会使用 PyInstaller 将 Python 脚本打包为 .exe 可执行文件

文章目录 前言PyInstaller特点跨平台支持自动依赖项处理单文件发布支持图形用户界面(GUI)和命令行界面(CLI)应用支持多种打包选项 基本用法常用参数其它参数 版本 & 环境实现步骤安装 PyInstaller创建 Python 脚本使用 PyInst…

C++学习笔记之五(String类)

C 前言getlinelength, sizec_strappend, inserterasefindsubstrisspace, isdigit 前言 C是兼容C语言的,所以C的字符串自然继承C语言的一切字符串,但它也衍生出属于自己的字符串类,即String类。String更像是一个容器,但它与容器还…

HJ103 Redraiment的走法

题目: HJ103 Redraiment的走法 题解: dfs 暴力搜索 枚举数组元素,作为起点如果后续节点大于当前节点,继续向后搜索记录每个起点的结果,求出最大值 public int getLongestSub(int[] arr) {int max 0;for (int i 0…

MySQL - 表达式With as 语句的使用及练习

目录 8.1 WITH AS 的含义 8.2 WITH AS语法的基本结构如下: 8.3 练习题1 8.4 牛客练习题 8.1 WITH AS 的含义 WITH AS 语法是MySQL中的一种临时结果集,它可以在SELECT、INSERT、UPDATE或DELETE语句中使用。通过使用WITH AS语句,可以将一个查…

flstudio21.3完整高级版怎么下载?有哪些新功能

flstudio高级版是一款适用于广泛领域的音频编辑软件。它支持多通道混音器和VST插件,包括数百种乐器和效果插件。它还为您提供了一个乐谱编辑器,需要对不同乐器的节奏进行必要的编辑。Flstudio具有许多内置电子合成声音,可提供更广泛的电子声音…

运维06:监控

监控生命周期 1.服务器上架到机柜2.基础设施监控 服务器温度,风扇转速 ipmitool命令,只能用在物理机上 存储的监控(df, fdisk, iotop) cpu(lscpu, uptime, top, htop, glances) 内存情况(free&…

CSS-自适应导航栏(flex | grid)

目标:实现左右各有按钮,中间是内容,自适应显示中间的内容导航栏,即 根据中间的宽度大小显示内容。 自适应导航栏 总结:推荐 flex布局 / grid布局 flex布局: 两侧 flex:1; ----->中间自适应 grid布局&…

【MATLAB】基于EEMD分解的信号去噪算法(基础版)

代码操作 【MATLAB】基于EEMD分解的信号去噪算法(基础版) 代码的主要内容 基于EEMD(集合经验模态分解)的信号去噪算法通常可以结合相关系数、信号的熵值或者方差贡献率来完成去噪处理。这些指标可以用于确定阈值,从而…

Java线程概念详解

线程 概念 1.程序:未解决某种问题,使用计算机语言编写的一些列指令(代码)的集合 2.进程:正在运行的程序(被加载到内存中),是操作系统进行资源分配的最小单位 3.线程:进程可以进一步细化为线程(比进程更小)且线程是隶属于进程的,是操作系统执行的最小的执行单元 也是cpu进行任…