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算法学习之基数排序实例
Dec 18 Python
spyder常用快捷键(分享)
Jul 19 Python
python 调用c语言函数的方法
Sep 29 Python
Python3.6实现带有简单界面的有道翻译小程序
Apr 16 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
May 04 Python
Django模型序列化返回自然主键值示例代码
Jun 12 Python
python在openstreetmap地图上绘制路线图的实现
Jul 11 Python
Python OpenCV调用摄像头检测人脸并截图
Aug 20 Python
python子线程退出及线程退出控制的代码
Oct 16 Python
python如何基于redis实现ip代理池
Jan 17 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
如何利用pygame实现打飞机小游戏
Python中requests做接口测试的方法
python关于集合的知识案例详解
May 30 #Python
教你漂亮打印Pandas DataFrames和Series
pytorch 实现多个Dataloader同时训练
python 如何做一个识别率百分百的OCR
基于PyTorch实现一个简单的CNN图像分类器
May 29 #Python
You might like
php实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
PHP实现中文圆形印章特效
2015/06/19 PHP
新浪的图片新闻效果
2007/01/13 Javascript
JavaScript delete 属性的使用
2009/10/08 Javascript
Jquery中对数组的操作代码
2011/08/12 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
深入理解JS函数的参数(arguments)的使用
2016/05/28 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
浅谈JavaScript中的“!!”作用
2020/08/03 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
python基于xml parse实现解析cdatasection数据
2014/09/30 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
2015/04/25 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
2018/05/10 Python
TensorFlow实现简单卷积神经网络
2018/05/24 Python
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
用Python写一个for循环的例子
2016/07/19 面试题
给水工程专业毕业生自荐信
2014/01/28 职场文书
入党积极分子评语
2014/05/04 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
商业用房租赁协议书
2014/10/13 职场文书
2014年团工作总结
2014/11/27 职场文书
教师工作能力自我评价
2015/03/04 职场文书
2015年社区民政工作总结
2015/04/21 职场文书
小学教师教育随笔
2015/08/14 职场文书
win11系统中dhcp服务异常什么意思? Win11 DHCP服务异常修复方法
2022/04/08 数码科技
python单向链表实例详解
2022/05/25 Python