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编程中三条常用的技巧
May 11 Python
python开发之thread实现布朗运动的方法
Nov 11 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
May 02 Python
python中类的属性和方法介绍
Nov 27 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
python3模拟实现xshell远程执行liunx命令的方法
Jul 12 Python
QML使用Python的函数过程解析
Sep 26 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
python+playwright微软自动化工具的使用
Feb 02 Python
pytorch 如何使用batch训练lstm网络
May 28 Python
python的html标准库
Apr 29 Python
如何利用pygame实现打飞机小游戏
Python中requests做接口测试的方法
python关于集合的知识案例详解
May 30 #Python
教你漂亮打印Pandas DataFrames和Series
pytorch 实现多个Dataloader同时训练
python 如何做一个识别率百分百的OCR
基于PyTorch实现一个简单的CNN图像分类器
May 29 #Python
You might like
php的控制语句
2006/10/09 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
php变量与JS变量实现不通过跳转直接交互的方法
2017/08/25 PHP
php工具型代码之印章抠图
2018/07/18 PHP
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
Jquery中删除元素的实现代码
2011/12/29 Javascript
jQuery之选择组件的深入解析
2013/06/19 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
NodeJS 实现多语言的示例代码
2018/09/11 NodeJs
vue防止花括号{{}}闪烁v-text和v-html、v-cloak用法示例
2019/03/13 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
Python 执行字符串表达式函数(eval exec execfile)
2014/08/11 Python
Python+django实现文件上传
2016/01/17 Python
python实现折半查找和归并排序算法
2017/04/14 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
Python如何绘制日历图和热力图
2020/08/07 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
HTML中使用SVG与SVG预定义形状元素介绍
2013/06/28 HTML / CSS
自我评价怎么写正确呢?
2013/12/02 职场文书
党员组织关系介绍信
2014/02/13 职场文书
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
简易离婚协议书范本
2014/10/24 职场文书
大学生就业意向书
2015/05/11 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server
分享python函数常见关键字
2022/04/26 Python
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS