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写的windows服务不能启动的问题
Apr 15 Python
python使用在线API查询IP对应的地理位置信息实例
Jun 01 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
python爬虫之线程池和进程池功能与用法详解
Aug 02 Python
python对html过滤处理的方法
Oct 21 Python
python bmp转换为jpg 并删除原图的方法
Oct 25 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
Feb 19 Python
python中seaborn包常用图形使用详解
Nov 25 Python
python 安装impala包步骤
Mar 28 Python
flask开启多线程的具体方法
Aug 02 Python
jupyter notebook更换皮肤主题的实现
Jan 07 Python
利用Python实现Picgo图床工具
Nov 23 Python
如何利用pygame实现打飞机小游戏
Python中requests做接口测试的方法
python关于集合的知识案例详解
May 30 #Python
教你漂亮打印Pandas DataFrames和Series
pytorch 实现多个Dataloader同时训练
python 如何做一个识别率百分百的OCR
基于PyTorch实现一个简单的CNN图像分类器
May 29 #Python
You might like
《PHP边学边教》(01.开篇――准备工作)
2006/12/13 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
php中0,null,empty,空,false,字符串关系的详细介绍
2013/06/20 PHP
Codeigniter操作数据库表的优化写法总结
2014/06/12 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
JS脚本defer的作用示例介绍
2014/01/02 Javascript
JS常用函数使用指南
2014/11/23 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
python基础教程之基本内置数据类型介绍
2014/02/20 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
python pytest进阶之fixture详解
2019/06/27 Python
Tensorflow进行多维矩阵的拆分与拼接实例
2020/02/07 Python
python程序输出无内容的解决方式
2020/04/09 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
Pytorch之扩充tensor的操作
2021/03/04 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
2014年科协工作总结
2014/12/09 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书
详解Python函数print用法
2021/06/18 Python