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 相关文章推荐
pyqt4教程之messagebox使用示例分享
Mar 07 Python
Python实现的ini文件操作类分享
Nov 20 Python
在centos7中分布式部署pyspider
May 03 Python
python机器学习之神经网络(一)
Dec 20 Python
简单实现Python爬取网络图片
Apr 01 Python
Python网络编程之TCP套接字简单用法示例
Apr 09 Python
python多个模块py文件的数据共享实例
Jan 11 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
使用python3 实现插入数据到mysql
Mar 02 Python
通过python 执行 nohup 不生效的解决
Apr 16 Python
Django中的AutoField字段使用
May 18 Python
关于Python3爬虫利器Appium的安装步骤
Jul 29 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/07/30 PHP
php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误
2009/09/30 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
30分钟精通React今年最劲爆的新特性——React Hooks
2019/03/11 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
微信小程序引入Vant组件库过程解析
2019/08/06 Javascript
微信小程序点击item使之滚动到屏幕中间位置
2020/03/25 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
简单了解什么是神经网络
2017/12/23 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
2018/07/04 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
Django中的cookie和session
2019/08/27 Python
windows下Pycharm安装opencv的多种方法
2020/03/05 Python
使用python自动追踪你的快递(物流推送邮箱)
2020/03/17 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
python基于win32api实现键盘输入
2020/12/09 Python
python实现学生通讯录管理系统
2021/02/25 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
俄罗斯品牌服装和鞋子在线商店:BRIONITY
2020/03/26 全球购物
生产厂厂长岗位职责
2013/12/25 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
2014年服务员个人工作总结
2014/12/23 职场文书
晚会开场白和结束语
2015/05/29 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
汽车销售合同文本
2019/08/08 职场文书
Python数据类型最全知识总结
2021/05/31 Python
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏