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 运算符 供重载参考
Jun 11 Python
c++生成dll使用python调用dll的方法
Jan 20 Python
Python的Django框架使用入门指引
Apr 15 Python
Python中字典的基础知识归纳小结
Aug 19 Python
python基础入门学习笔记(Python环境搭建)
Jan 13 Python
用Python实现斐波那契(Fibonacci)函数
Mar 25 Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 Python
Python实现PS滤镜特效之扇形变换效果示例
Jan 26 Python
django反向解析URL和URL命名空间的方法
Jun 05 Python
简单了解Pandas缺失值处理方法
Nov 16 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 Python
python如何变换环境
Jul 21 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
德劲1107的电路分析与打磨
2021/03/02 无线电
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
jquery 新浪网易的评论块制作
2010/07/01 Javascript
JavaScript中的几个关键概念的理解-原型链的构建
2011/05/12 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
javascript 获取浏览器版本
2015/01/21 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
jQuery中的deferred使用方法
2017/03/27 jQuery
vue中appear的用法
2017/08/17 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
微信小程序性能优化之checkSession的使用
2019/03/06 Javascript
JavaScript怎样在删除前添加确认弹出框?
2019/05/27 Javascript
快速了解Python开发中的cookie及简单代码示例
2018/01/17 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
python通过TimedRotatingFileHandler按时间切割日志
2019/07/17 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
Python 3.10 的首个 PEP 诞生,内置类型 zip() 迎来新特性(推荐)
2020/07/03 Python
python 简单的调用有道翻译
2020/11/25 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
会计自荐书
2013/12/02 职场文书
促销活动计划书
2014/05/02 职场文书
小型婚礼主持词
2015/06/30 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
前端JS获取URL参数的4种方法总结
2022/04/05 Javascript