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读写文件方法总结
Jun 09 Python
Python文件夹与文件的相关操作(推荐)
Jul 25 Python
python中单下划线_的常见用法总结
Jul 10 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
详解python中@的用法
Mar 27 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
Python实现检测文件的MD5值来查找重复文件案例
Mar 12 Python
基于python实现把json数据转换成Excel表格
May 07 Python
Python使用re模块验证危险字符
May 21 Python
浅谈Python中文件夹和python package包的区别
Jun 01 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
Sep 16 Python
python 读取串口数据的示例
Nov 09 Python
如何利用pygame实现打飞机小游戏
Python中requests做接口测试的方法
python关于集合的知识案例详解
May 30 #Python
教你漂亮打印Pandas DataFrames和Series
pytorch 实现多个Dataloader同时训练
python 如何做一个识别率百分百的OCR
基于PyTorch实现一个简单的CNN图像分类器
May 29 #Python
You might like
php mysql数据库操作分页类
2008/06/04 PHP
PHP设计模式之装饰者模式
2012/02/29 PHP
PHP错误机制知识汇总
2016/03/24 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
解决使用attachEvent函数时,this指向被绑定的元素的问题的方法
2007/08/13 Javascript
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
xml转json的js代码
2012/08/28 Javascript
JavaScript实现的图像模糊算法代码分享
2014/04/22 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
获取select的value、text值的简单示例(jquery与javascript)
2016/12/07 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
React教程之Props验证的具体用法(Props Validation)
2017/09/04 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
微信小程序3种位置API的使用方法详解
2019/08/05 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
python障碍式期权定价公式
2019/07/19 Python
基于python判断字符串括号是否闭合{}[]()
2020/09/21 Python
Python colormap库的安装和使用详情
2020/10/06 Python
《猴子种树》教学反思
2014/02/14 职场文书
人事专员的岗位职责
2014/03/01 职场文书
成立公司计划书
2014/05/07 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
2019 入党申请书范文
2019/07/10 职场文书
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android