资讯专栏INFORMATION COLUMN

kubernetes之Python客户端介绍

IT那活儿 / 2802人阅读
kubernetes之Python客户端介绍
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

  

Kubernetes(以下简称k8s)是一个用于自动化部署、扩展和管理容器化应用的开源系统。

k8s在正常运行时的大部分操作都可以通过kubectl命令行接口或类似kubeadm之类的命令行工具进行执行,根据文档,这些工具背后实际上调用的是k8s提供的api,这些 api也供应用程序和开发人员调用其功能,由于k8s的api是基于REST思想设计的,因此为了使用的不同的操作,可能需要使用不同的HTTP请求。
例如:从k8s获取信息的话需要使用GET请求,需要在k8s上创建资源的话需要使用POST请求,删除资源需要使用DELETE请求;同时还需要构建完整的HTTP请求,这可能需要占用不少时间。
为了方便快速的调用k8s的api,官方和社区维护了多个编程语言的客户端,在使用这些客户端时,我们并不需要自己实现API调用和“请求/响应”类型,从而使自己的工作重心落在重要的部分。

图片来源于网络

Python的k8s客户端是以python包的形式提供的,开源地址(https://github.com/kubernetes-client/python),可以通过pip命令下载安装。

  • 直接通过 PyPI下载安装
    pip install kubernetes
  • 从源码安装
    git clone –-recursive
    https://github.com /kubernetes-client/python.git cd python python setup.py install

1

配置kubernetes api

//导入包:

from kubernetes import client
from pprint import pprint //优化输出
//配置信息:
k8s_api_url="YOUR_API_URL"
k8s_api_token="YOUR_API_TOKEN"
//初始化客户端:

k8s_api_conf=kubernetes.client.Configuration()
k8s_api_conf.host=k8s_api_url //配置url
k8s_api_conf.verify_ssl=False //关闭SSL验证,可选择
k8s_api_conf.api_key = {"authorization": "Bearer " + k8s_api_token} //配置token
k8s_api_client=client.ApiClient(k8s_api_conf) //创建客户端

2

常用资源接口实例化

kubernetes的api接口极为丰富,本次仅介绍常用操作和会涉及到的类和方法,全部的接口文档可以在官方API文档(https://github.com/kubernetes-client/python/blob/master/kubernetes/README.md)处找到。

  • namespace、pod、node和service相关,使用CoreV1Api类实例
    k8s_api_client_core=client.CoreV1Api(k8s_api_client

  • deployment相关,使用AppsV1Api类实例
    k8s_api_client_apps=client.AppsV1Api(k8s_api_client

  • ingress相关,使用NetworkingV1beta1Api类实例
    k8s_api_client_networking=client.NetworkingV1beta1Api(k8s_api_client)

3

常用操作

1)查看namespace

  • 使用list_namespace方法

    //可选参数:

    //pretty   str   如果值为"true",则美化输出

    //limit   int   限制输出数量

    //timeout_second    int    超时时间

    try:   

api_response=k8s_api_client_core.list_namespace(pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)
  • //使用read_namespace方法

    //必要参数:

    //name   str   namespace名

    //可选参数:

    //pretty   str   如果值为"true",则美化输出

    try:   

api_response=k8s_api_client_core.read_namespace(name,pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)

2)创建namespace

  • //使用create_namespace方法

    //必要参数:

    //body   V1Namespace   创建的namespace描述

    //可选参数:

    //pretty   str   如果值为"true",则美化输出

    //dry_run   str   如果存在此参所则表示试运行,有效值为"ALL"

    //field_manager    str   该参数是与进行这些更改的参与者或实体关联的名称。该值的长度必须小于或等于128个字符,并且仅包含可打印字符

    body=client.V1Namespace()   //创建body

    try:

api_response=k8s_api_client_core.create_namespace(body,pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)

3)删除namespace

  • //使用delete_namespace方法
    //必要参数:
    //name   str    删除的namespace名
    //可选参数:
    //pretty   str   如果值为"true",则美化输出
    //dry_run   str    如果存在此参所则表示试运行,有效值为"ALL"
    //grace_period_seconds   int    表示延迟多少秒执行,非负数,当为0时立即执行
    try:
api_response=k8s_api_client_core.delete_namespace(name,pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)

4)查看pod

  • //使用list_namespaced_pod方法

    //必要参数:

    //namespace   str    namespace名

    //可选参数:

    //pretty   str    如果值为"true",则美化输出

    //limit   int    限制输出数量

    //timeout_second    int    超时时间

    try:

api_response=k8s_api_client_core.list_namespaced_pod(namespace,pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)
  • //使用list_pod_for_all_namespaces方法
    //可选参数:
    //pretty    str    如果值为"true",则美化输出
    //limit    int    限制输出数量
    //timeout_second    int    超时时间
    try:
api_response=k8s_api_client_core.list_pod_for_all_namespaces(pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)
  • //使用read_namespaced_pod方法
    //必要参数:
    //name   str    pod名
    //namespace    str    namespace名
    //可选参数:
    //pretty   str   如果值为"true",则美化输出
    try:
api_response=k8s_api_client_core.read_namespaced_pod(name,namespace,pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)

5)查看node

  • //使用list_node方法

    //可选参数:

    //pretty   str    如果值为"true",则美化输出

    //limit   int    限制输出数量

    //timeout_second    int    超时时间

    try:

api_response=k8s_api_client_core.list_node(pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)
  • //使用read_node方法
    //必要参数:
    //name   str    node名
    //可选参数:
    //pretty   str    如果值为"true",则美化输出
    try: 
api_response=k8s_api_client_core.read_node(name,pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)

6)查看deployment

  • //使用list_namespaced_deployment方法
    //必要参数:
    //namespace   str    namespace名
    //可选参数:
    //pretty   str    如果值为"true",则美化输出
    //limit   int    限制输出数量
    //timeout_second    int    超时时间
    try:
api_response=k8s_api_client_apps.list_namespaced_deployment(namespace,pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)
  • //使用list_deployment_for_all_namespaces方法
    //可选参数:
    //pretty   str    如果值为"true",则美化输出
    //limit    int    限制输出数量
    //timeout_second    int    超时时间
    try:  
api_response=k8s_api_client_apps.list_deployment_for_all_namespaces(pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)
  • //使用read_namespaced_deployment方法

    //必要参数:

    //name   str    deployment名

    //namespace   str    namespace名

    //可选参数:

    //pretty   str    如果值为"true",则美化输出

    try: 

api_response=k8s_api_client_apps.read_namespaced_deployment(name,namespace,pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)

7)删除deployment

  • //使用delete_namespaced_deployment方法
    //必要参数:
    //name   str    deployment名
    //namespace   str    namespace名
    //可选参数:
    //pretty   str    如果值为"true",则美化输出
    //dry_run   str    如果存在此参所则表示试运行,有效值为"ALL"
    //grace_period_seconds    int    表示延迟多少秒执行,非负数,当为0时立即执行
    try: 
api_response=k8s_api_client_apps.delete_namespaced_deployment(name,namespace,pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)

8)删除pod/重启pod

  • //使用delete_namespaced_pod方法
    //必要参数:
    //name    str    pod名
    //namespace    str    namespace名
    //可选参数:
    //pretty    str    如果值为"true",则美化输出
    //dry_run   str    如果存在此参所则表示试运行,有效值为"ALL"
    //grace_period_seconds    int    表示延迟多少秒执行,非负数,当为0时立即执行
    try:
api_response=k8s_api_client_core.delete_namespaced_pod(name,namespace,pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)

9)修改deployment配置

  • //使用replace_namespaced_deployment方法
    //必要参数:
    //name    str     deployment名
    //namespace    str    namespace名
    //body     V1Deployment  修改后的配置
    //可选参数:
    //pretty   str   如果值为"true",则美化输出
    //dry_run    str   如果存在此参所则表示试运行,有效值为"ALL"
    //field_manager   str   该参数是与进行这些更改的参与者或实体关联的名称。该值的长度必须小于或等于128个字符,并且仅包含可打印字符
    try:  
//先获取当前的deployment配置
   body=k8s_api_client_apps.read_namespaced_deployment(name,namespace,pretty="true")
   //修改deployment
   some_change()
   //替换deployment配置
   api_response=k8s_api_client_apps.replace_namespaced_deployment(name,namespace,body,pretty="true")
   pprint(api_response)
exception Exceptions as e:
   print(e)


本文作者:李双修(上海新炬王翦团队)

本文来源:“IT那活儿”公众号

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129389.html

相关文章

  • 如何在GO语言中使用Kubernetes API?

    摘要:并且由外部控制器负责将资源转移到这一状态。在最后一个参数,我们传递了个回调函数和。这些回调函数具有实际的逻辑,并且在节点上的镜像占用存储发生改变时触发。一旦启动,将会开始对和的监控,并且调用回调函数。 Rancher Labs首席软件工程师Alena Prokharchyk受邀在2017年12月6-8日的CNCF主办的Kubernetes领域顶级盛会KubeCon + CloudNat...

    microelec 评论0 收藏0
  • 系统架构

    强力推荐!那些你不能错过的 GitHub 插件和工具 以代码托管平台起家的 GitHub 网站,已然成为全球程序员工作和生活中不可或缺的一份子。从优秀的企业,到优秀的程序员,都将自己最优秀的代码作品存放在这片开源净土里,供彼此学习交流。 GitHub Trending 栏目甚至已经成为 IT 从业人员的新闻日报,每日必读。在之前的一… PostgreSQL 数据库的前世今生 编辑:IT大咖说阅读字...

    Gilbertat 评论0 收藏0
  • 系统架构

    强力推荐!那些你不能错过的 GitHub 插件和工具 以代码托管平台起家的 GitHub 网站,已然成为全球程序员工作和生活中不可或缺的一份子。从优秀的企业,到优秀的程序员,都将自己最优秀的代码作品存放在这片开源净土里,供彼此学习交流。 GitHub Trending 栏目甚至已经成为 IT 从业人员的新闻日报,每日必读。在之前的一… PostgreSQL 数据库的前世今生 编辑:IT大咖说阅读字...

    k00baa 评论0 收藏0
  • PHPer书单

    摘要:想提升自己,还得多看书多看书多看书下面是我收集到的一些程序员应该看得书单及在线教程,自己也没有全部看完。共勉吧当然,如果你有好的书想分享给大家的或者觉得书单不合理,可以去通过进行提交。讲师温铭,软件基金会主席,最佳实践作者。 想提升自己,还得多看书!多看书!多看书!下面是我收集到的一些PHP程序员应该看得书单及在线教程,自己也没有全部看完。共勉吧!当然,如果你有好的书想分享给大家的或者...

    jimhs 评论0 收藏0
  • 利用K8S技术栈打造个人私有云(连载:K8S资源控制)

    摘要:将用户命令通过接口传送给,从而进行资源的增删改等操作。要使用编写应用程序,当下大多语言都可以很方便地去实现请求来操作的接口从而控制和查询资源,但本文主要是利用已有的客户端来更加优雅地实现的资源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技术栈打造个人私有云系列文章目录】 利用K8S...

    Reducto 评论0 收藏0
  • 利用K8S技术栈打造个人私有云(连载:K8S资源控制)

    摘要:将用户命令通过接口传送给,从而进行资源的增删改等操作。要使用编写应用程序,当下大多语言都可以很方便地去实现请求来操作的接口从而控制和查询资源,但本文主要是利用已有的客户端来更加优雅地实现的资源控制。 showImg(https://segmentfault.com/img/remote/1460000013517345); 【利用K8S技术栈打造个人私有云系列文章目录】 利用K8S...

    Render 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<