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中str.format()详解
Mar 12 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
May 04 Python
python列表list保留顺序去重的实例
Dec 14 Python
django 微信网页授权登陆的实现
Jul 30 Python
Python Django 前后端分离 API的方法
Aug 28 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
python实现图像全景拼接
Mar 27 Python
python全栈开发语法总结
Nov 22 Python
python爬虫中url管理器去重操作实例
Nov 30 Python
教你如何使用Python实现二叉树结构及三种遍历
Jun 18 Python
如何利用pygame实现打飞机小游戏
Python中requests做接口测试的方法
python关于集合的知识案例详解
May 30 #Python
教你漂亮打印Pandas DataFrames和Series
pytorch 实现多个Dataloader同时训练
python 如何做一个识别率百分百的OCR
基于PyTorch实现一个简单的CNN图像分类器
May 29 #Python
You might like
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
javascript 动态添加表格行
2006/06/22 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
Javascript玩转继承(二)
2014/05/08 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
2015/02/23 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
JS实现复选框的全选和批量删除功能
2017/04/05 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
webpack HappyPack实战详解
2019/10/08 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
vue实现的多页面项目如何优化打包的步骤详解
2020/07/19 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
Python 内置函数complex详解
2016/10/23 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
Python yield与实现方法代码分析
2018/02/06 Python
Python程序运行原理图文解析
2018/02/10 Python
Numpy掩码式数组详解
2018/04/17 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
2019/08/13 Python
python装饰器原理与用法深入详解
2019/12/19 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
高校学生干部的自我评价分享
2013/11/04 职场文书
拓展培训心得体会
2014/01/04 职场文书
语文教研活动总结
2014/07/02 职场文书
捐书倡议书
2014/08/29 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
公司借款担保书
2015/09/22 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
《极主夫道》真人电影正式预告 定档6月3日上映
2022/04/05 日漫