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模块顶层运行的代码引起的一个Bug
Jul 04 Python
收集的几个Python小技巧分享
Nov 22 Python
介绍Python中内置的itertools模块
Apr 29 Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 Python
Python3.6笔记之将程序运行结果输出到文件的方法
Apr 22 Python
django框架自定义用户表操作示例
Aug 07 Python
利用Python将文本中的中英文分离方法
Oct 31 Python
Python根据欧拉角求旋转矩阵的实例
Jan 28 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 Python
Django用内置方法实现简单搜索功能的方法
Dec 18 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 smarty模版引擎中的缓存应用
2009/12/02 PHP
php去除重复字的实现代码
2011/09/16 PHP
PHP Directory 函数的详解
2013/03/07 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
php将12小时制转换成24小时制的方法
2015/03/31 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
Zend Framework实现自定义过滤器的方法
2016/12/09 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
PHP集成环境XAMPP的安装与配置
2018/11/13 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
Ext 表单布局实例代码
2009/04/30 Javascript
使用JQUERY Tabs插件宿主IFRAMES
2010/01/01 Javascript
js中关于String对象的replace使用详解
2011/05/24 Javascript
js修改地址栏URL参数解决url参数问题
2012/12/15 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
2016/01/06 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
解决Antd 里面的select 选择框联动触发的问题
2020/10/24 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
深入探究Python中变量的拷贝和作用域问题
2015/05/05 Python
Python3连接SQLServer、Oracle、MySql的方法
2018/06/28 Python
python 除法保留两位小数点的方法
2018/07/16 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
建筑实习自我鉴定
2013/10/18 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
幼儿园教师考核评语
2014/12/31 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书
Python制作表白爱心合集
2022/01/22 Python
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js