Python使用Kubernetes API访问集群


Posted in Python onMay 30, 2021

通过将身份认证令牌直接传给 API 服务器,可以避免使用 kubectl 代理,像这样:
使用 grep/cut 方式:

# 查看所有的集群,因为你的 .kubeconfig 文件中可能包含多个上下文
kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'

# 从上述命令输出中选择你要与之交互的集群的名称
export CLUSTER_NAME="some_server_name"

# 指向引用该集群名称的 API 服务器
APISERVER=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$CLUSTER_NAME\")].cluster.server}")

# 获得令牌
TOKEN=$(kubectl get secrets -o jsonpath="{.items[?(@.metadata.annotations['kubernetes\.io/service-account\.name']=='default')].data.token}"|base64 -d)

# 使用令牌玩转 API
curl -X GET $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure

客户端库:https://kubernetes.io/zh/docs/reference/using-api/client-libraries/

python举例:

目录结构

Python使用Kubernetes API访问集群

配置文件两种方式

1、将集群中的~/.kube/config,重命名为kubeconfig.yaml
代码:

from kubernetes import  client,config
from kubernetes.stream import stream
import yaml
config_file = r"D:\Users\JackHe\PycharmProjects\JJ\k8s\auth\kubeconfig.yaml"
config.kube_config.load_kube_config(config_file=config_file)
Api_Instance = client.CoreV1Api()
Api_Batch = client.BatchV1Api()

#列出所有的namesapce
for ns in Api_Instance.list_namespace().items:
    print(ns.metadata.name)

#列出所有的nodes
def list_node():
    api_response = Api_Instance.list_node()
    data = {}
    for i in api_response.items:
        data[i.metadata.name] = {"name": i.metadata.name,
                                "status": i.status.conditions[-1].type if i.status.conditions[-1].status == "True" else "NotReady",
                                "ip": i.status.addresses[0].address,
                                "kubelet_version": i.status.node_info.kubelet_version,
                                "os_image": i.status.node_info.os_image,
                                 }
    return data
nodes = list_node()
print(nodes)

2、使用token形式,获取命令上文所示。
代码:

# -*- coding: utf-8 -*-
from kubernetes.client import api_client
from kubernetes.client.apis import core_v1_api
from kubernetes import client,config


class KubernetesTools(object):
    def __init__(self):
        self.k8s_url = 'https://192.168.1.56:6443'

    def get_token(self):
        """
        获取token
        :return:
        """
        with open(r'D:\Users\JackHe\PycharmProjects\JJ\k8s\auth\token', 'r') as file:
            Token = file.read().strip('\n')
            return Token

    def get_api(self):
        """
        获取API的CoreV1Api版本对象
        :return:
        """
        configuration = client.Configuration()
        configuration.host = self.k8s_url
        configuration.verify_ssl = False
        configuration.api_key = {"authorization": "Bearer " + self.get_token()}
        client1 = api_client.ApiClient(configuration=configuration)
        api = core_v1_api.CoreV1Api(client1)
        return api

    def get_namespace_list(self):
        """
        获取命名空间列表
        :return:
        """
        api = self.get_api()
        namespace_list = []
        for ns in api.list_namespace().items:
            # print(ns.metadata.name)
            namespace_list.append(ns.metadata.name)

        return namespace_list

    def get_pod_list(self):
       api = self.get_api()
       print("Listing pods with their IPs:")
       ret = api.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))

    def get_service_list(self):
        api = self.get_api()
        ret = api.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))

if __name__ == '__main__':
    namespace_list = KubernetesTools().get_namespace_list()
    pod_list = KubernetesTools().get_pod_list()
    service = KubernetesTools().get_service_list()
    print(namespace_list)
    print(pod_list)
    print(service)

到此这篇关于Python使用Kubernetes API访问集群的文章就介绍到这了,更多相关Python Kubernetes API访问集群内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python连接mssql数据库编码问题解决方法
Jan 01 Python
关于numpy中np.nonzero()函数用法的详解
Feb 07 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
python 自定义对象的打印方法
Jan 12 Python
Python3进制之间的转换代码实例
Aug 24 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
Python高并发解决方案实现过程详解
Jul 31 Python
基于Django快速集成Echarts代码示例
Dec 01 Python
python opencv肤色检测的实现示例
Dec 21 Python
python读取excel数据并且画图的实现示例
Feb 08 Python
用python开发一款操作MySQL的小工具
May 12 Python
如何利用pygame实现打飞机小游戏
Python中requests做接口测试的方法
python关于集合的知识案例详解
May 30 #Python
教你漂亮打印Pandas DataFrames和Series
pytorch 实现多个Dataloader同时训练
python 如何做一个识别率百分百的OCR
基于PyTorch实现一个简单的CNN图像分类器
May 29 #Python
You might like
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
vue 使用Jade模板写html,stylus写css的方法
2018/02/23 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
2018/05/04 Javascript
vue使用el-upload上传文件及Feign服务间传递文件的方法
2019/03/15 Javascript
如何使用CSS3和JQuery easing 插件制作绚丽菜单
2019/06/18 jQuery
Vue 实现一个命令式弹窗组件功能
2019/09/25 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
python类继承与子类实例初始化用法分析
2015/04/17 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
详解Python3 基本数据类型
2019/04/19 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
2020/04/10 Python
ParcelABC西班牙:包裹运送和快递服务
2019/12/24 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
研究生求职推荐信范文
2013/11/30 职场文书
旷课检讨书大全
2014/01/21 职场文书
上课睡觉检讨书
2014/01/28 职场文书
学习自我鉴定
2014/02/01 职场文书
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang