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判断端口是否打开的实现代码
Feb 10 Python
python数组复制拷贝的实现方法
Jun 09 Python
python实现在控制台输入密码不显示的方法
Jul 02 Python
Python连接数据库学习之DB-API详解
Feb 07 Python
Python3.6安装及引入Requests库的实现方法
Jan 24 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
python实现简易动态时钟
Nov 19 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
python科学计算之numpy——ufunc函数用法
Nov 25 Python
python文件编写好后如何实践
Jul 07 Python
如何利用pygame实现打飞机小游戏
Python中requests做接口测试的方法
python关于集合的知识案例详解
May 30 #Python
教你漂亮打印Pandas DataFrames和Series
pytorch 实现多个Dataloader同时训练
python 如何做一个识别率百分百的OCR
基于PyTorch实现一个简单的CNN图像分类器
May 29 #Python
You might like
[原创]效率较高的php下读取文本文件的代码
2008/07/02 PHP
一个PHP的QRcode类与大家分享
2011/11/13 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
PHP实现数组根据某个单元字段排序操作示例
2018/08/01 PHP
Javascript学习笔记1 数据类型
2010/01/11 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
JS实现导航栏楼层特效
2020/01/01 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
Python易忽视知识点小结
2015/05/25 Python
python结合API实现即时天气信息
2016/01/19 Python
Python排序搜索基本算法之归并排序实例分析
2017/12/08 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
Python基础教程之异常详解
2019/01/10 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
python循环嵌套的多种使用方法解析
2019/11/29 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
TensorFlow实现checkpoint文件转换为pb文件
2020/02/10 Python
Django 设置多环境配置文件载入问题
2020/02/25 Python
css3实现多个元素依次显示效果
2017/12/12 HTML / CSS
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
巴西男士胡须和头发护理产品商店:Beard
2017/11/13 全球购物
工程安全员岗位职责
2014/03/09 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
预备党员学习十八届三中全会精神思想汇报
2014/09/13 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
2015年简历自我评价范文
2015/03/11 职场文书
实施意见格式范本
2015/06/05 职场文书
《西门豹》教学反思
2016/02/23 职场文书