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
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 Python
matplotlib绘制动画代码示例
Jan 02 Python
python中将一个全部为int的list 转化为str的list方法
Apr 09 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
python反转列表的三种方式解析
Nov 08 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
python 通过手机号识别出对应的微信性别(实例代码)
Dec 22 Python
Tensorflow tf.tile()的用法实例分析
May 22 Python
python-jwt用户认证食用教学的实现方法
Jan 19 Python
python用字节处理文件实例讲解
Apr 13 Python
python常见的占位符总结及用法
Jul 02 Python
如何利用pygame实现打飞机小游戏
Python中requests做接口测试的方法
python关于集合的知识案例详解
May 30 #Python
教你漂亮打印Pandas DataFrames和Series
pytorch 实现多个Dataloader同时训练
python 如何做一个识别率百分百的OCR
基于PyTorch实现一个简单的CNN图像分类器
May 29 #Python
You might like
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
php Rename 更改文件、文件夹名称
2011/05/24 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
PHP实现加强版加密解密类实例
2015/07/29 PHP
php阿拉伯数字转中文人民币大写
2015/12/21 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
JS常用正则表达式总结
2013/11/12 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
nodejs分页类代码分享
2014/06/17 NodeJs
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
Angular2利用组件与指令实现图片轮播组件
2017/03/27 Javascript
vue2.0 watch里面的 deep和immediate用法说明
2020/10/30 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
[04:45]DOTA2-DPC中国联赛正赛 iG vs LBZS 赛后选手采访
2021/03/11 DOTA
总结Python中逻辑运算符的使用
2015/05/13 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
python 多线程重启方法
2019/02/18 Python
代码实例讲解python3的编码问题
2019/07/08 Python
Expected conditions模块使用方法汇总代码解析
2020/08/13 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
英国最大线上综合鞋类商城:Office
2017/12/08 全球购物
建筑工程管理专业自荐信范文
2013/12/28 职场文书
茶叶店创业计划书范文
2014/01/19 职场文书
称象教学反思
2014/02/03 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
处级领导班子全部召开专题民主生活会情况汇报
2014/09/27 职场文书