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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C4D云渲染怎么提升速度小技巧?C4D云渲染速度提升技巧

当许多C4D用户转向云渲染时,他们常常会发现渲染速度并没有预期中的提升,这让人产生疑问,为什么使用云渲染服务后,渲染时间依然没有显著缩短,C4D云渲染情况取决于多个因素,如:渲染任务特点以及所…

图的搜索(二):贝尔曼-福特算法、狄克斯特拉算法和A*算法

图的搜索(二):贝尔曼-福特算法、狄克斯特拉算法和A*算法 贝尔曼-福特算法 贝尔曼-福特(Bellman-Ford)算法是一种在图中求解最短路径问题的算法。最短路径问题就是在加权图指定了起点和终点的前提下,寻找从…

代码上传的gitee平台

1.首先我们访问工作台 - Gitee.com进行注册和登录 2.我们创建一个仓库: 3.在本地创建我们的项目 在这文件夹里面我们打开git bush,执行 一下操作: git init :初始化仓库 git status:检查状态 git add . :将当前文件…

【wimdows电脑上管理员账户与管理员身份的区别】

管理员账户 在控制面板的用户账户中,点击更改账户类型,可以看到目前的账户是“管理员账户”还是“标准账户”。 管理员身份 在快捷方式上右击,可以看到,可以选择以管理员身份运行该软件。 如何查看某个应用是否以管理员身份…

6.Jetson Orin Nano 系统在NVME SSD上备份与恢复

Jetson Orin Nano 系统在NVME SSD上备份与恢复 刚开始我也参考其它博主写的系统备份与恢复,由于我Jetson 的系统盘是1t的,用dd命令拷贝的到另外一个1t的硬盘里面时,总会出现硬盘空间不足的情况出现。只能从小硬盘容量往大硬盘容量拷贝&#…

单通道led线性驱动芯片推荐:SM2082EGS

单通道LED线性驱动芯片是一种用于控制LED灯的芯片,它能够提供恒定的电流输出,从而实现LED灯的稳定亮度调节。这种芯片主要由输入端、控制电路、放大器和输出端构成,通过控制输入端的电压和信号来调节LED的亮度。 单通道led线性驱动芯片推荐&a…

JAVA:乘除窗体的实现

目录 题目要求: 窗口的实现: try 和 catch 的用法: 思路大意: 关键代码的实现: 题目要求: 使用 try 和catch 方法完成乘法除法的异常处理和窗体的实现,如下图所示: 窗口的实…

国际著名书画艺术家敖特:连续三届荣获世界美术大赛金奖

敖特 敖特是一位备受国际认可的蒙古族书画艺术家,以其卓越的才华和杰出的艺术成就而脱颖而出。他的艺术简历显示了他在国内外艺术大赛中多次荣获金奖,并获得了白俄罗斯、俄罗斯等国的最高艺术成就奖项,进一步证明了他在国际艺术界的卓越地位…

MidJourney笔记(7)-Seeds

我相信很多人在使用MidJourney的时候,都会遇到一个问题,就是如何保持生成图像的一致性,或者相对一致性,差异性不是很大。此时,我们就需要引入一个seed值,类似给这个提示词生成的图片做一个id标识。 那这个seed值怎么使用? 其实,在我们每次生成的图片,都有有一个seed值…

【Spring教程27】Spring框架实战:一文教你轻松掌握PostMan工具的安装与使用技巧!轻松搞定API测试!!!

目录 1 PostMan简介2 PostMan安装3 PostMan使用3.1 创建WorkSpace工作空间3.2 发送请求3.3 保存当前请求 4 发送步骤总结 欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博…

【C语言:文件操作】

文章目录 1. 什么是文件1.1为什么有文件?1.2什么是文件1.3文件的分类1.4文件缓冲区 2.文件的打开与关闭2.1文件的打开(fopen)2.2文件的关闭(fclose) 3.顺序读写数据文件3.1读写字符3.2读写字符串3.3格式化读写3.4二进制读写 4.文件的随机读写4.1fseek4.2ftell4.3rew…

【docker】镜像使用(Nginx 示例)

查看本地镜像列表 docker images删除本地镜像 # docker rmi [容器 ID]docker rmi a6bd71f48f68 查找镜像 docker search nginx 参数介绍 NAME: 镜像仓库源的名称DESCRIPTION: 镜像的描述OFFICIAL: 是否 docker 官方发布STARS: 点赞、喜欢AUTOMATED: 自动构建。 拉去镜像 …

shopify商城开发 引用谷歌字体库 fonts.google.com

引用谷歌字体库 https://fonts.google.com/ <link rel"preconnect" href"https://fonts.googleapis.com"> <link rel"preconnect" href"https://fonts.gstatic.com" crossorigin> <link href"https://fonts.goo…

C语言——K /C语言内存函数

一、memcpy 使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); • 函数 memcpy 从 source 的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果source和destination有…

了解一下DHCP

DHCP的工作原理 本质&#xff1a; 1、物理网卡自身集成了DHCP的功能&#xff0c;为了请求获取合法、可用的IP 2、DHCP服务端核心功能在于&#xff1a;通过自定义的网段的地址池&#xff0c;来给与新加入的网络环境的设备以租约的方式分配合法IP 1.什么是DHCP 1.1DHCP定义 …

Java获取当前用户当前工作目录

方法一&#xff1a;使用System.getProperty(“user.dir”)函数可以获取用户当前工作目录 例如&#xff0c;Java工程的文件布局如下&#xff1a; 主类文件&#xff0c;获取用户当前的工作目录&#xff1a; package com.thb;public class Test5 {public static void main(Stri…

如何在Kali Linux安装Xrdp+cpolar内网穿透实现远程访问Kali系统

文章目录 前言1. Kali 安装Xrdp2. 本地远程Kali桌面3. Kali 安装Cpolar 内网穿透4. 配置公网远程地址5. 公网远程Kali桌面连接6. 固定连接公网地址7. 固定地址连接测试 前言 Kali远程桌面的好处在于&#xff0c;它允许用户从远程位置访问Kali系统&#xff0c;而无需直接物理访…

HTTP 301错误:永久重定向,大勇的冒险之旅

大家好&#xff0c;我是大勇&#xff0c;一个喜欢冒险的程序员。今天&#xff0c;我要和大家分享一个我在互联网世界中的冒险故事——如何处理HTTP 301错误&#xff1a;永久重定向。 那天&#xff0c;我像往常一样&#xff0c;打开我的代码编辑器&#xff0c;准备开始一天的工…

基于Java SSM框架实现列车火车高铁票务信息管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现列车火车高铁票务信息管理系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被…

EasyX图形化学习(二)

1.消息处理---鼠标消息&#xff1a; 1.ExMessage结构体&#xff1a; ExMessage---这个结构体用于保存鼠标消息。 //定义消息结构体变量 ExMessage msg { 0 }; 2.获取消息&#xff1a; &#xff08;1&#xff09;peekmessage函数&#xff1a;用于获取一个消息&#xff0c;…