热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

KubernetesPythonClient

一、概述Kubernetes官方维护的Python客户端client-python,地址:https:github.comkubernetes-clie
一、概述

Kubernetes官方维护的Python客户端client-python, 地址:https://github.com/kubernetes-client/python

安装模块

pip3 install kubernetes

 

 

环境说明

操作系统:centos 7.6

k8s版本:1.18.1

ip地址:192.168.31.74

主机名:k8s-master

 

操作系统:centos 7.6

k8s版本:1.18.1

ip地址:192.168.31.71

主机名:k8s-node01

 

二、获取API cluster URL与token

获取Cluster URL地址

登录到k8s-master节点,执行:

# APISERVER=$(kubectl config view --minify | grep server | cut -f 2- -d ":" | tr -d " ")
# echo $APISERVER
https://192.168.31.74:6443

下面python脚本要使用,我获取的是:https://192.168.31.74:6443

 

创建k8s admin-token

编辑新文件

# mkdir -p /kube/role
# cd /kube/role
# vi admin-token.yaml

内容如下:

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:name: adminannotations:rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:kind: ClusterRolename: cluster-adminapiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccountname: adminnamespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:name: adminnamespace: kube-systemlabels:kubernetes.io/cluster-service: "true"addonmanager.kubernetes.io/mode: Reconcile

执行yaml文件

kubectl create -f admin-token.yaml

 

获取token值

# kubectl describe secret/$(kubectl get secret -nkube-system |grep admin|awk '{print $1}') -nkube-system|grep token:

输出:

token: eyJhbGciOiJSUzI1NiIsImtxxxx

由于token过长,这里用xxx代替

最后将token与APISERVER地址返回内容复制到python client主机上, 供脚本使用.

 

三、在python client主机上编写脚本

本文采用的python版本为3.7.3,运行在一台centos 7.6的服务器上面。

 

创建目录结构

# mkdir -p /kube/auth
# cd /kube/auth
# vim token.txt

将刚才获取的Token字符串复制到该文件,比如:eyJhbGciOiJSUzI1NiIsImtxxxx

这里我们获取的token会引入到我们的脚本下, 作为bearer authorization的api key与远程k8s API建立认证连接.

 

编写python client脚本

获取的命名空间

# !/usr/bin/python3
# -*- coding: utf-8 -*-
from kubernetes.client import api_client
from kubernetes.client.apis import core_v1_api
from kubernetes import client,configclass KubernetesTools(object):def __init__(self):self.k8s_url = 'https://192.168.31.74:6443'def get_token(self):"""获取token:return:"""with open('token.txt', 'r') as file:Token = file.read().strip('\n')return Tokendef get_api(self):"""获取API的CoreV1Api版本对象:return:"""configuration = client.Configuration()configuration.host = self.k8s_urlconfiguration.verify_ssl = Falseconfiguration.api_key = {"authorization": "Bearer " + self.get_token()}client1 = api_client.ApiClient(configuration=configuration)api = core_v1_api.CoreV1Api(client1)return apidef 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_listif __name__ == '__main__':namespace_list = KubernetesTools().get_namespace_list()print(namespace_list)

执行输出:

['default', 'istio-system', 'kube-node-lease', 'kube-public', 'kube-system']

 

注意:输出时,会有一段警告信息

InsecureRequestWarning: Unverified HTTPS request is being made to host '192.168.31.74'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warningsInsecureRequestWarning,

这个是requests库提示警告,因为我是ip访问的,所以SSL验证会失败。但这个不影响。

 

获取所有services

在上面的代码基础上,再加一个方法

def get_services(self):"""获取所有services:return:"""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))

单独执行这个方法,会输出很多信息。由于由于输出过多,这里只列出我运行的一个flaskapp

None default flaskapp-1 10.1.168.165 [{'name': 'flaskapp-port','node_port': 30005,'port': 5000,'protocol': 'TCP','target_port': 5000}]

可以看到很多信息,包括service名,svc地址,以及node_port暴露的端口

 

获取pod信息

先登录k8s-master,查看目前运行的pod

# kubectl get pods
NAME READY STATUS RESTARTS AGE
flaskapp-1-5d96dbf59b-lhmp8 1/1 Running 4 23d

 

在上面的代码基础上,再加一个方法

def get_pod_info(self,namespaces,pod_name):"""查看pod信息:param namespaces: 命令空间,比如:default:param pod_name: pod完整名称,比如:flaskapp-1-5d96dbf59b-lhmp8:return:"""api = self.get_api()# 示例参数namespaces = "default"pod_name = "flaskapp-1-5d96dbf59b-lhmp8"resp = api.read_namespaced_pod(namespace=namespaces,name=pod_name)#详细信息print(resp)

执行此方法,输出以下信息,由于输出过多,使用...省略

{'api_version': 'v1','kind': 'Pod',...

它会输出一段很长的json,里面包含了此pod的详细信息

 

获取pod日志

在上面的代码基础上,再加一个方法

def get_pod_logs(self,namespaces,pod_name):"""查看pod日志:param namespaces: 命令空间,比如:default:param pod_name: pod完整名称,比如:flaskapp-1-5d96dbf59b-lhmp8:return:"""api = self.get_api()# 示例参数namespaces = "default"pod_name = "flaskapp-1-5d96dbf59b-lhmp8""""pretty美化输出tail_lines=200输出最近200行"""log_content = api.read_namespaced_pod_log(pod_name, namespaces, pretty=True, tail_lines=200)print(log_content)

执行此方法,输出以下信息:

* Serving Flask app "app" (lazy loading)* Environment: productionWARNING: Do not use the development server in a production environment.Use a production WSGI server instead.* Debug mode: on* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)* Restarting with stat* Debugger is active!* Debugger PIN: 182-124-947

这个是flask运行之后,输出的日志信息。

 

想了解其他更多参考,请参考链接:

https://blog.csdn.net/sinat_33431419/article/details/105223726

 

备注:token直接写入到txt是不安全的,可以考虑将token写入到redis中,然后用python调用即可。

 

本文参考链接:

https://blog.csdn.net/hypon2016/article/details/99439309


推荐阅读
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 【MicroServices】【Arduino】装修甲醛检测,ArduinoDart甲醛、PM2.5、温湿度、光照传感器等,数据记录于SD卡,Python数据显示,UI5前台,微服务后台……
    这篇文章介绍了一个基于Arduino的装修甲醛检测项目,使用了ArduinoDart甲醛、PM2.5、温湿度、光照传感器等硬件,并将数据记录于SD卡,使用Python进行数据显示,使用UI5进行前台设计,使用微服务进行后台开发。该项目还在不断更新中,有兴趣的可以关注作者的博客和GitHub。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了Composer依赖管理的重要性及使用方法。对于现代语言而言,包管理器是标配,而Composer作为PHP的包管理器,解决了PEAR的问题,并且使用简单,方便提交自己的包。文章还提到了使用Composer能够避免各种include的问题,避免命名空间冲突,并且能够方便地安装升级扩展包。 ... [详细]
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
author-avatar
kafei
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有