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使用xmlrpc实例讲解
Dec 17 Python
让 python 命令行也可以自动补全
Nov 30 Python
python集合类型用法分析
Apr 08 Python
python 获取list特定元素下标的实例讲解
Apr 09 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
Python两个字典键同值相加的几种方法
Mar 05 Python
python 实现返回一个列表中出现次数最多的元素方法
Jun 11 Python
python list转置和前后反转的例子
Aug 26 Python
python使用opencv实现马赛克效果示例
Sep 28 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
使用tqdm显示Python代码执行进度功能
Dec 08 Python
Python3.10的一些新特性原理分析
Sep 15 Python
如何利用pygame实现打飞机小游戏
Python中requests做接口测试的方法
python关于集合的知识案例详解
May 30 #Python
教你漂亮打印Pandas DataFrames和Series
pytorch 实现多个Dataloader同时训练
python 如何做一个识别率百分百的OCR
基于PyTorch实现一个简单的CNN图像分类器
May 29 #Python
You might like
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
php ZipArchive压缩函数详解实例
2013/11/06 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
微信小程序 页面跳转传值实现代码
2017/07/27 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
2018/11/29 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
Python 中的 else详解
2016/04/23 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
20招让你的Python飞起来!
2016/09/27 Python
python求质数列表的例子
2019/11/24 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
软件测试工程师面试问题精选
2016/10/28 面试题
个人简历自我鉴定
2013/10/11 职场文书
管理学院毕业生自荐信范文
2014/03/10 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
2015年小学美术工作总结
2015/05/25 职场文书
博士论文答辩开场白
2015/06/01 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
2019开业庆典剪彩仪式主持词!
2019/07/22 职场文书
PHP基本语法
2021/03/31 PHP
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript