python代码部署到k8s中运行 python k8s

   日期:2024-12-29     作者:145gr       评论:0    移动:http://ljhr2012.riyuangf.com/mobile/news/13165.html
核心提示:线上有一套k8s集群,部署了很多应用。现在需要对一些基础服务做一些常规检测,比如:系统时间,要求:k8s的每一个节点的时间,差

线上有一套k8s集群,部署了很多应用。现在需要对一些基础服务做一些常规检测,比如:

  • 系统时间,要求:k8s的每一个节点的时间,差值上下不超过2秒
  • k8s版本,要求:k8s的每一个节点的版本必须一致
  • redis集群,要求:1. 查看cluster nodes状态 2. AOF状态
  • etcd,要求:访问etcd的api,能获取到版本信息, 说明etcd服务正常
  • mysql,要求:获取mysql运行统计时间,能获取说明mysql服务正常
  • ceph,要求:使用ceph osd tree命令查看ceph节点信息
  • kafka,要求:使用生产者模式写入一个消息,消费者模式能得到同样的消息,则kafka服务正常

 

上面这么多要求,有一大部分,都需要远程执行命令。那么如何使用python来执行远程命令呢?

使用paramiko模块即可!

paramiko

安装paramiko模块

 

使用paramiko

这里,我封装了一个函数ssh2,代码如下:

 

执行此函数,会返回一个列表。因为是使用readlines,将结果转换为列表了!

 

如果执行时,输出:

 

原因

paramiko 2.4.2 依赖 cryptography,而最新的cryptography==2.5里有一些弃用的API。

解决

删掉cryptography,安装2.4.2,就不会报错了。

 


我们需要获取多台服务器的时间,并且还需要对比时间差。那么最简单办法,就是获取时间戳,它是一段数字,那么数字之间,就可以做减法了!

使用 date +%s

 

怎么去对比,每一天服务器的时间戳呢?上面已经获取到时间戳了,关键问题是,如何对比?

构造字典

这里需要构造一个数据字典,将每一台服务器的ip以及时间戳存储一下,数据格式如下:

 

对比数据

首先从字典里面取出第一个值,由于python 3.5是无需的,所以取出的数据,每次可能不一样。不过没有关系,取出之后,再删除即可!

然后将取出的第一个值,和字典中的其他值,做对比即可!注意:时间戳要转换为int类型才行!

 

ntp.py

View Code

 

执行脚本,输出如下:

 

查看k8s版本,使用命令 kubectl version 

 

那么要获取到 "v1.11.2" ,还需要进一步过滤

 

使用上面的ssh2函数之后,输出的值,是这样的

 

这里会有一个换行符,为了避免这种问题,使用 json.loads() 反序列一下,就可以还原为 v1.11.2,连双引号也没有了!

 

kube_v.py

View Code

 

执行输出:

 

查看cluster nodes信息,使用命令

 

请确保服务器,已经安装了redis,可以执行redis-cli命令

 

执行输出:

 

从上面的输出信息,可以看出,有3个master节点,3个slave节点。其中紫色部分,如果id一致,表示这是一组服务器!

请确保这一组服务器不能同时挂掉,否则会造成数据丢失!

默认redis集群要求至少6个节点,当redis集群中的master节点,挂掉一半时,集群不可用。

也就是说,目前有3个master节点,最多允许1台mater节点挂掉!

判断依据

还有一点,当有任意一个节点状态为fail时,也表示集群不正常!说明:mater节点已经挂掉了一半!

因此,使用python来判断集群是否状态的关键点,就是判断状态中是否有fail即可!

 

在redis.conf配置文件中, 有一个参数 appendonly ,表示是否开启aof,默认是关闭的。

那么使用redis-cli可以获取它的状态

 

执行输出:

 

上面这段输出,表示 没有开启aof

 

redis.py

View Code

 

执行程序,输出:

 

判断etcd工作是否正常,只需要能访问到api地址,就说明正常,url如下:

 

etcd.py

View Code

 

执行输出:

 

查看mysql的运行统计时间,使用命令

 

View Code

 

执行输出:

 

查看节点信息,需要在 主节点操作

 

View Code

 

执行输出:

 

手动创建名为test的topic

 

因为python中的kakfa包无法直接创建 topic,所以需要手动创建

 

由于线上kafka启动了ACL,那么请确保相关用户设置了ACL规则,关于acl的配置,请参考链接:


 

为了方便,这里直接使用超级用户。注意:超级用户是不需要设置ACL规则的,拥有所有权限

View Code

 

执行程序,输出:

 

注意:第一次执行时,会卡住1分钟。多执行几次就会很快了,至于什么原因,不知道!

就是在执行这一行代码时,会卡住

 


 
特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

举报收藏 0打赏 0评论 0
 
更多>同类最新资讯
0相关评论

相关文章
最新文章
推荐文章
推荐图文
最新资讯
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号