热门标签 | 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


推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文详细介绍了如何在 Spring Boot 应用中通过 @PropertySource 注解读取非默认配置文件,包括配置文件的创建、映射类的设计以及确保 Spring 容器能够正确加载这些配置的方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Composer Registry Manager:PHP的源切换管理工具
    本文介绍了一个用于Composer的源切换管理工具——Composer Registry Manager。该项目旨在简化Composer包源的管理和切换,避免与常见的CRM系统混淆,并提供了详细的安装和使用指南。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • 在Python开发过程中,随着项目数量的增加,不同项目依赖于不同版本的库,容易引发依赖冲突。为了避免这些问题,并保持开发环境的整洁,可以使用Virtualenv和Virtualenvwrapper来创建和管理多个隔离的Python虚拟环境。 ... [详细]
  • 优化局域网SSH连接延迟问题的解决方案
    本文介绍了解决局域网内SSH连接到服务器时出现长时间等待问题的方法。通过调整配置和优化网络设置,可以显著缩短SSH连接的时间。 ... [详细]
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社区 版权所有