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查询Mysql时返回字典结构的代码
Jun 18 Python
Python中的map、reduce和filter浅析
Apr 26 Python
使用优化器来提升Python程序的执行效率的教程
Apr 02 Python
详解Python中的__getitem__方法与slice对象的切片操作
Jun 27 Python
Numpy 改变数组维度的几种方法小结
Aug 02 Python
python中强大的format函数实例详解
Dec 05 Python
Python Tkinter 简单登录界面的实现
Jun 14 Python
python查看文件大小和文件夹内容的方法
Jul 08 Python
Python产生一个数值范围内的不重复的随机数的实现方法
Aug 21 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
Aug 30 Python
pycharm 添加解释器的方法步骤
Aug 31 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
Oct 22 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实现一维数组转二维数组的方法
2015/02/25 PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
2016/02/23 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
一个JavaScript继承的实现
2006/10/24 Javascript
Prototype使用指南之range.js
2007/01/10 Javascript
javascript中的几个运算符
2007/06/29 Javascript
js弹出层之1:JQuery.Boxy (二)
2011/10/06 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
2020/11/30 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
python获取指定时间差的时间实例详解
2017/04/11 Python
python 判断网络连通的实现方法
2018/04/22 Python
django主动抛出403异常的方法详解
2019/01/04 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
如何提高JDBC的性能
2013/04/30 面试题
判断单链表中是否存在环
2012/07/16 面试题
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
2014年保管员工作总结
2014/11/18 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
奖励通知
2015/04/22 职场文书
《月光曲》教学反思
2016/02/16 职场文书
golang elasticsearch Client的使用详解
2021/05/05 Golang