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 相关文章推荐
sqlalchemy对象转dict的示例
Apr 22 Python
Python yield 使用浅析
May 28 Python
Python中使用urllib2模块编写爬虫的简单上手示例
Jan 20 Python
利用python将pdf输出为txt的实例讲解
Apr 23 Python
Python装饰器语法糖
Jan 02 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
Python数据可视化:箱线图多种库画法
Nov 06 Python
kafka-python 获取topic lag值方式
Dec 23 Python
pytorch实现用CNN和LSTM对文本进行分类方式
Jan 08 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
python实现ftp文件传输功能
Mar 20 Python
Python如何把十进制数转换成ip地址
May 25 Python
如何利用pygame实现打飞机小游戏
Python中requests做接口测试的方法
python关于集合的知识案例详解
May 30 #Python
教你漂亮打印Pandas DataFrames和Series
pytorch 实现多个Dataloader同时训练
python 如何做一个识别率百分百的OCR
基于PyTorch实现一个简单的CNN图像分类器
May 29 #Python
You might like
php一维二维数组键排序方法实例总结
2014/11/13 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
ThinkPHP控制器详解
2015/07/27 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
PHP生成随机密码4种方法及性能对比
2020/12/11 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
鼠标滚轴控制文本框值的JS代码
2013/11/19 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
javascript下拉列表菜单的实现方法
2015/11/18 Javascript
Javascript之Math对象详解
2016/06/07 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
解决Angular.Js与Django标签冲突的方案
2016/12/20 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
js实现微信聊天界面
2020/08/09 Javascript
详解vue 组件注册
2020/11/20 Vue.js
用python实现批量重命名文件的代码
2012/05/25 Python
Python守护进程(daemon)代码实例
2015/03/06 Python
Python中for循环控制语句用法实例
2015/06/02 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
PyQt5实现简单的计算器
2020/05/30 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
python3.7中安装paddleocr及paddlepaddle包的多种方法
2020/11/27 Python
python实现ping命令小程序
2020/12/28 Python
python自动生成证件号的方法示例
2021/01/14 Python
中级会计职业生涯规划书
2014/03/01 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
个人工作年终总结
2015/03/09 职场文书
酒店优秀员工推荐信
2015/03/24 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python