首页 > 编程语言 >ansible 清理k8s集群的node节点日志

ansible 清理k8s集群的node节点日志

时间:2022-12-06 17:47:42浏览次数:45  
标签:node log sh ansible docker k8s 节点 日志

目录

ansible 清理k8s集群的node节点日志

自己产品线所使用的k8s集群的node节点经常磁盘告警,因此写了个简单脚本清理各个节点上的日志
我在k8s集群部署了rocketmq,且没指定节点,所以会经常漂移,导致各个节点有mq日志,以及docker自身的日志

获取对应节点信息脚本

我这里用kubectl通过标签筛选出属于我们产品线的node节点Ip,并加入到ansible管理
用到的脚本如下:

cat check8snode.sh

#!/bin/bash
#根据标签获取node节点Ip并排除master节点写入nodelist文件
GETNODEIP() {
    rancher kubectl  get nodes -o wide --show-labels | grep -E "productLine=ecs2|productLine=hotfix|productLine=ecs-micro-first" | awk '{print $6}' | grep -vE  "48.85|INTERNAL-IP" | tee nodelist
}

#读取nodelist文件并把节点信息同步到ansible配置中,然后删除nodelist文件
UPDATEANSIBLE() {
    echo "[k8son]" > /etc/ansible/hosts 
    for i in `cat nodelist`;do echo $i >> /etc/ansible/hosts;done
    rm -rf nodelist
}


GETNODEIP
UPDATEANSIBLE

加入自动计划任务

crontab -e
#每天凌晨7点检查一次k8s的节点并同步更新到ansible配置
30 7 * * * /opt/helloWorld/check8snode.sh

删除各个节点的日志脚本

因为机器不是同一个人提供的,所以docker日志路径有所不同

cat clear_docker_log.sh

#!/bin/bash
set -e
set -x
#for循环嵌套清理rocketmq日志
CLEARMQLOG() {
    for path in {"/data/docker/overlay2/","/var/lib/docker/overlay2/"};
        do
            logs=$(find ${path} -name rocketmq_client.log.* || echo "nopath")
            for log in $logs
                do
                    echo "clean logs : $log"
                    cat /dev/null > $log
                 done
        done
}

#for循环嵌套containers日志
CLEARCONTAINERLOG() {
    for path in {"/data/docker/containers/","/var/lib/docker/containers/"};
        do
            logs=$(find ${path} -name *-json.log || echo "nopath")
            for log in $logs
                do
                    echo "clean logs : $log"
                    cat /dev/null > $log
                done
        done

}

CLEARMQLOG
CLEARCONTAINERLOG
#清理后重启docker,防止程序占用磁盘空间不释放
systemctl restart docker

ansible分发clear_docker_log.sh并做成计划任务

//探测上面k8s节点是否可以通信
ansible k8son -m ping

//拷贝ansible当前的清理日志脚本/opt/helloWorld/clear_docker_log.sh 到每个k8s节点的/opt下并授权755
ansible k8son -m copy -a "src=/opt/helloWorld/clear_docker_log.sh  dest=/opt/clear_docker_log.sh backup=yes mode=755 owner=root"

//给每个k8s节点添加定时任务
//job:定义是操作的行为
//weekday:每周
//day:天
//minute:分钟
//hour:小时
//month:月份
ansible k8son -m cron -a 'minute=35 hour=6 job="/opt/clear_docker_log.sh" name="CLEAR DOCKER LOGS EVERYDAY"'

//如果想注释自动计划任务
ansible k8son -m cron -a 'job="/opt/clear_docker_log.sh" name="CLEAR DOCKER LOGS EVERYDAY" disabled=True'

//如果想再打开计划任务
ansible k8son -m cron -a 'job="/opt/clear_docker_log.sh" name="CLEAR DOCKER LOGS EVERYDAY" disabled=false'

怎么样?这样管理起来就方便多了对不
基于这几个命令我们也可以把他门加入自动计划任务

//因为懒得再加定时任务和脚本,我们重新编辑上面check8snode.sh脚本
cat check8snode.sh

#!/bin/bash
#根据标签获取node节点Ip并排除master节点写入nodelist文件
GETNODEIP() {
    rancher kubectl  get nodes -o wide --show-labels | grep -E "productLine=ecs2|productLine=hotfix|productLine=ecs-micro-first" | awk '{print $6}' | grep -vE  "48.85|INTERNAL-IP" | tee nodelist
}

#读取nodelist文件并把节点信息同步到ansible配置中,然后删除nodelist文件
UPDATEANSIBLE() {
    echo "[k8son]" > /etc/ansible/hosts 
    for i in `cat nodelist`;do echo $i >> /etc/ansible/hosts;done
    rm -rf nodelist
}

COPYFILETONODE() {
      ansible k8son -m copy -a "src=/opt/helloWorld/clear_docker_log.sh  dest=/opt/clear_docker_log.sh backup=yes mode=755 owner=root"
      ansible k8son -m cron -a 'minute=35 hour=6 job="/opt/clear_docker_log.sh" name="CLEAR DOCKER LOGS EVERYDAY"'
}
  
  
 GETNODEIP
 UPDATEANSIBLE
 COPYFILETONODE 

这样即使新增节点,每天自动从k8s节点获取节点Ip,并把清理日志的脚本分发到各个节点并做成计划任务,不用担心新增节点而遗漏计划任务了

标签:node,log,sh,ansible,docker,k8s,节点,日志
From: https://www.cnblogs.com/liwenchao1995/p/16955973.html

相关文章

  • k8s污点
    1、污点的类型介绍NoSchedule:表示k8s将不会将Pod调度到具有该污点的Node上PreferNoSchedule:表示k8s将尽量避免将Pod调度到具有该污点的Node上NoExecute:表示k8s将不......
  • 03.Nodejs中的路由与接口
    路由与接口目录目录路由与接口express基本使用托管静态资源nodemonExpress中的路由路由的匹配路由的使用模块化路由Express中间件中间件的格式全局生效的中间件局部生效......
  • 04.Nodejs操作MySQL
    在Nodejs中操作MySQL数据库目录在Nodejs中操作MySQL数据库MySQL数据库SQL的基本使用SELECT语句INSERTINTO语句UPDATE语句DELETE语句WHERE子句AND与OR运算符ORDERBY子......
  • 05.Nodejs_web开发模式
    Web开发目录目录Web开发Web开发模式服务端渲染的传统Web开发模式前后端分离的Web开发模式Session认证机制在项目中使用Session向session中存入数据:从session中获取数......
  • 00.Nodejs环境搭建
    Nodejs的环境搭建目录Nodejs的环境搭建安装node搭建服务器环境查看本地ip项目复活安装node英文官网:https://nodejs.org/en/中文官网下载node地址https://nodejs.or......
  • 在Node.JS中调用JShaman接口,实现JS代码加密
    在Node.JS中调用JShaman接口,实现JS代码加密。使用axios库实现https的post请求,代码如下:constaxios=require("axios");constjshamanConfig={//源码"js_code":......
  • Ubuntu 14.04 iNode Client找不到库libjpeg和libtiff的解决方法
    iNodeClient在Ubuntu10.04时,直接运行install.sh后便安装成功。在Ubuntu14.04的版本,安装后双击iNodeClient后却无法运行。重装后问题依旧。于是使用命令行来运行。提示......
  • warn]: Component inside <Transition> renders non-element root node that cannot b
    因为比较简单先说解决方法:用一个div把过渡到的代码(组件代码)包起来即可详情:用到transition: (提升用户体验组件动画)警告信息:过渡的组件代码:解决:(用d......
  • win7安装高版本node
    原文链接:https://www.ngui.cc/article/show-584755.htmlexecjs库只支持nodejs14.0.0以上的版本,win7最高只支持node13.14.0版本nvmw:Windowsnodejs版本......
  • K8S环境搭建
    环境参数:系统:ubuntu20.04k8s:1.25.3容器运行时:containerd关闭防火墙sudoufwdisable关闭swap临时关闭:swapoff-a永久关闭:sed-i'/swap/s/^/#/'/etc/fst......