Python使用Kubernetes API访问集群
程序员文章站
2022-06-23 08:53:27
通过将身份认证令牌直接传给 api 服务器,可以避免使用 kubectl 代理,像这样:使用 grep/cut 方式:# 查看所有的集群,因为你的 .kubeconfig 文件中可能包含多个上下文ku...
通过将身份认证令牌直接传给 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
客户端库:
python举例:
目录结构
配置文件两种方式
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访问集群内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: uni-app项目搭建
下一篇: mysql数据库远程移植
推荐阅读
-
Python使用百度API上传文件到百度网盘代码分享
-
python使用MySQLdb访问mysql数据库的方法
-
python使用MySQLdb访问mysql数据库的方法
-
gearman的安装启动及python API使用实例
-
Python使用百度API上传文件到百度网盘代码分享
-
Python使用新浪微博API发送微博的例子
-
Python使用Flask实现RESTful API,使用Postman工具、requests库测试接口
-
python使用点操作符访问字典(dict)数据的方法
-
python使用在线API查询IP对应的地理位置信息实例
-
IdentityServer4 使用用户名和密码保护API访问