python3 kubernetes api的使用示例


Posted in Python onJanuary 12, 2021

一、安装

github:https://github.com/kubernetes-client/python

安装

pip install kubernetes

二、认证

1、kubeconfig文件认证

首先引入SDK支持库。然后将 ~/.kube 的config文件的内容复制到本地目录,保存为文件kubeconfig.yaml,然后运行下面的python代码。

[root@k8s-m ~]# cp .kube/config  kubeconfig.yaml

#使用
from kubernetes import client, config
config.kube_config.load_kube_config(config_file="/root/kubeconfig.yaml")

三、api使用

1、列出资源信息

from kubernetes import client, config
config.kube_config.load_kube_config(config_file="/root/kubeconfig.yaml")

#获取API的CoreV1Api版本对象
v1 = client.CoreV1Api()

#列出 namespaces
for ns in v1.list_namespace().items:
  print(ns.metadata.name)
  
#列出所有的services
ret = v1.list_service_for_all_namespaces(watch=False)
for i in ret.items:
  print("%s \t%s \t%s \t%s \t%s \n" % (i.kind, i.metadata.namespace, i.metadata.name, i.spec.cluster_ip, i.spec.ports ))
  
#列出所有的pod
ret = v1.list_pod_for_all_namespaces(watch=False)
for i in ret.items:
  print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))

#列出所有deploy
ret = v1.list_deployments_for_all_namespaces(watch=False)
for i in ret.items:
  print("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))
  
##列出其他资源和以上类似,不懂可以查看(kubectl api-resources)

2、创建k8s资源对象

github:https://github.com/kubernetes-client/python/tree/master/examples

创建资源(提前写好yaml资源清单)

#创建deploy
[root@k8s-m ~]# cat create_deploy.py
from os import path
import yaml
from kubernetes import client, config

def main():
  config.load_kube_config()

  with open(path.join(path.dirname(__file__), "/root/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. status='%s'" % resp.metadata.name)
main()

[root@k8s-m ~]# kubectl get pod 
NAME            READY  STATUS  RESTARTS  AGE
mydeploy-6946c867dc-bgcld  1/1   Running  0     40s
mydeploy-6946c867dc-rdnvj  1/1   Running  0     40s
[root@k8s-m ~]# kubectl get deploy
NAME    READY  UP-TO-DATE  AVAILABLE  AGE
mydeploy  2/2   2      2      44s


#创建pod例子(其它资源得自己查源码自己找对应的API)
[root@k8s-m ~]# cat create_pod.py 
from os import path

import yaml

from kubernetes import client, config


def main():
  config.load_kube_config()

  with open(path.join(path.dirname(__file__), "/root/pod.yaml")) as f:
    dep = yaml.safe_load(f)
    k8s_core_v1 = client.CoreV1Api()
    resp = k8s_core_v1.create_namespaced_pod(
      body=dep, namespace="default")
    print("Pod created. status='%s'" % resp.metadata.name)


if __name__ == '__main__':
  main()

##
[root@k8s-m ~]# python3 create_pod.py 
Pod created. status='nginx-pod'
[root@k8s-m ~]# kubectl get pod nginx-pod
NAME    READY  STATUS  RESTARTS  AGE
nginx-pod  1/1   Running  0     8s

3、删除资源(我这里展示pod例子,其它资源删除差不多)

参考地址:/usr/local/python3/lib/python3.6/site-packages/kubernetes/client/

[root@k8s-m ~]# cat dp.py
from os import path
import yaml
from kubernetes import client, config

def main():
  config.load_kube_config()
  k8s_core_v1 = client.CoreV1Api()
  resp = k8s_core_v1.delete_namespaced_pod(namespace="default",name='nginx-pod')
  print("delete Pod ")

[root@k8s-m ~]# python3 dp.py
delete Pod

4、查看资源(类似kubectl get pod xxx -o json)

#查看(read)

[root@k8s-m ~]# cat rp.py 
from os import path
import yaml
from kubernetes import client, config

def main():
  config.load_kube_config()
  k8s_core_v1 = client.CoreV1Api()
  resp = k8s_core_v1.read_namespaced_pod(namespace="default",name='nginx-pod')
  print("read Pod ")
  #详细信息
  print(resp)
  #指定信息
  print(resp.spec.containers[0].image)

if __name__ == '__main__':
  main()

[root@k8s-m ~]# python3  rp.py |tail
      'host_ip': '172.31.250.229',
      'init_container_statuses': None,
      'message': None,
      'nominated_node_name': None,
      'phase': 'Running',
      'pod_ip': '10.244.167.134',
      'qos_class': 'BestEffort',
      'reason': None,
      'start_time': datetime.datetime(2019, 8, 30, 9, 13, 49, tzinfo=tzutc())}}
nginx

5、修改

[root@k8s-m ~]# cat pp.py 
from os import path
import yaml
from kubernetes import client, config

def main():
  config.load_kube_config()
  k8s_core_v1 = client.CoreV1Api()
  old_resp = k8s_core_v1.read_namespaced_pod(namespace="default",name='nginx-pod')
  old_resp.spec.containers[0].image = "nginx:alpine"
  #修改镜像
  new_resp = k8s_core_v1.patch_namespaced_pod(namespace="default",name='nginx-pod',body=old_resp)
  print(new_resp.spec.containers[0].image)
if __name__ == '__main__':
  main()

[root@k8s-m ~]# python3 pp.py 
nginx:alpine

以上就是python3 kubernetes api的使用示例的详细内容,更多关于python3 kubernetes api的使用的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
浅析Python中的序列化存储的方法
Apr 28 Python
Sanic框架异常处理与中间件操作实例分析
Jul 16 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
Jul 27 Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 Python
解决python多行注释引发缩进错误的问题
Aug 23 Python
python实现图片上添加图片
Nov 26 Python
django框架forms组件用法实例详解
Dec 10 Python
Python vtk读取并显示dicom文件示例
Jan 13 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
Feb 27 Python
基于Python编写一个计算器程序,实现简单的加减乘除和取余二元运算
Aug 05 Python
Python中rapidjson参数校验实现
Jul 25 Python
python excel和yaml文件的读取封装
Jan 12 #Python
python drf各类组件的用法和作用
Jan 12 #Python
Python try except else使用详解
Jan 12 #Python
python 逆向爬虫正确调用 JAR 加密逻辑
Jan 12 #Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 12 #Python
使用sublime text3搭建Python编辑环境的实现
Jan 12 #Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 #Python
You might like
PHP 引用是个坏习惯
2010/03/12 PHP
PHP isset()与empty()的使用区别详解
2010/08/29 PHP
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
YII中assets的使用示例
2014/07/31 PHP
php正则修正符用法实例详解
2016/12/29 PHP
JavaScript也谈内存优化
2014/06/06 Javascript
JS+CSS实现简单滑动门(滑动菜单)效果
2015/09/19 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
在AngularJS中使用jQuery的zTree插件的方法
2016/04/21 Javascript
基于Bootstrap实现tab标签切换效果
2020/04/15 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
vue内置指令详解
2018/04/03 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
详解js动态获取浏览器或页面等容器的宽高
2019/03/13 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
Python Tkinter实例——模拟掷骰子
2020/10/24 Python
python绘制高斯曲线
2021/02/19 Python
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
学生请假条格式
2014/04/11 职场文书
合理化建议书
2015/02/04 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
关于迟到的检讨书
2015/05/06 职场文书
谢师宴学生答谢词
2015/09/30 职场文书
Java9新特性之Module模块化编程示例演绎
2022/03/16 Java/Android
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android