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 相关文章推荐
django 发送邮件和缓存的实现代码
Jul 18 Python
python代码过长的换行方法
Jul 19 Python
python 美化输出信息的实例
Oct 15 Python
Python 用matplotlib画以时间日期为x轴的图像
Aug 06 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
python制作英语翻译小工具代码实例
Sep 09 Python
TensorFlow 显存使用机制详解
Feb 03 Python
tensorflow 限制显存大小的实现
Feb 03 Python
Python 中的pygame安装与配置教程详解
Feb 10 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
Python Selenium XPath根据文本内容查找元素的方法
Dec 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
2009/06/29 PHP
php中大括号作用介绍
2012/03/22 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
js下将字符串当函数执行的方法
2011/07/13 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
2015/11/17 Javascript
详解JavaScript 中的 replace 方法
2016/01/01 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
python队列queue模块详解
2018/04/27 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
django实现用户注册实例讲解
2019/10/30 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
机电工程专业应届生求职信
2013/10/03 职场文书
校园环保建议书
2014/05/14 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
公司财务管理制度
2015/08/04 职场文书
个人工作决心书
2015/09/22 职场文书
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python