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搭建HTTP服务器和FTP服务器
Mar 09 Python
Python 正则表达式实现计算器功能
Apr 29 Python
python 简单的绘图工具turtle使用详解
Jun 21 Python
Django学习笔记之ORM基础教程
Mar 27 Python
Python使用tkinter库实现文本显示用户输入功能示例
May 30 Python
Django基础知识与基本应用入门教程
Jul 20 Python
Python过滤txt文件内重复内容的方法
Oct 21 Python
在Pandas中处理NaN值的方法
Jun 25 Python
python笔记之mean()函数实现求取均值的功能代码
Jul 05 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
Python使用py2neo操作图数据库neo4j的方法详解
Jan 13 Python
matplotlib事件处理基础(事件绑定、事件属性)
Feb 03 Python
如何利用pygame实现打飞机小游戏
Python中requests做接口测试的方法
python关于集合的知识案例详解
May 30 #Python
教你漂亮打印Pandas DataFrames和Series
pytorch 实现多个Dataloader同时训练
python 如何做一个识别率百分百的OCR
基于PyTorch实现一个简单的CNN图像分类器
May 29 #Python
You might like
我的论坛源代码(六)
2006/10/09 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
css配合jquery美化 select
2013/11/29 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
微信小程序实现滴滴导航tab切换效果
2018/07/24 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
[51:52]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.24
2019/09/10 DOTA
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
Python 列表list使用介绍
2014/11/30 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
浅谈flask中的before_request与after_request
2018/01/20 Python
python自动重试第三方包retrying模块的方法
2018/04/24 Python
简单了解Python3里的一些新特性
2019/07/13 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
Python实现石头剪刀布游戏
2021/01/20 Python
研究生求职推荐信范文
2013/11/30 职场文书
法学研究生自我鉴定范文
2013/12/04 职场文书
教师校本培训方案
2014/02/26 职场文书
经典演讲稿汇总
2014/05/19 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
2015年班主任个人工作总结
2015/03/31 职场文书
检讨书范文大全
2015/05/07 职场文书
开工典礼致辞
2015/07/29 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
pytorch训练神经网络爆内存的解决方案
2021/05/22 Python
Kubernetes控制节点的部署
2022/04/01 Servers