解决方案—K8S集群的日志按天并按照命名空间分类定时同步到日志服务器

1. 备份需求

单节点k8s集群节点IP为10.10.14.155,需要把集群日志定时备份到远程日志服务器10.10.14.132,并保留日志服务器近半年的日志。

2. 解决方案

2.1 基于Shell脚本和Rsync的Shell脚本

复制代码
#!/bin/bash
# k8s_log_sync.sh

# 定义变量
LOG_BASE_DIR="/mnt/k8s_logs_rsync/k8s_logs"
DATE=$(date +"%Y-%m-%d")
REMOTE_USER="root"
REMOTE_SERVER="10.10.14.132"
REMOTE_BASE_DIR="/data/k8s_test_log_bak"

# 获取所有命名空间
NAMESPACES=$(kubectl get namespaces -o jsonpath='{.items[*].metadata.name}')

for NS in $NAMESPACES; do
    # 创建本地命名空间目录
    NS_LOG_DIR="$LOG_BASE_DIR/$DATE/$NS"
    mkdir -p $NS_LOG_DIR

    # 获取该命名空间下的所有Pod
    PODS=$(kubectl get pods -n $NS -o jsonpath='{.items[*].metadata.name}' 2>/dev/null)

    if [ -n "$PODS" ]; then
        for POD in $PODS; do
            echo "$(date) - 正在获取命名空间 $NS 中Pod $POD 的日志..."
            # 获取过去24小时的日志
            kubectl logs -n $NS $POD --since=24h > "$NS_LOG_DIR/${POD}.log" 2>/dev/null ||
            echo "无法获取Pod $POD 的日志" > "$NS_LOG_DIR/${POD}.error"
        done
    fi
done

# 同步到远程服务器
echo "开始同步日志到远程服务器..."
rsync -avz --progress -e ssh $LOG_BASE_DIR/$DATE/ $REMOTE_USER@$REMOTE_SERVER:$REMOTE_BASE_DIR/$DATE/

# 清理3天前的本地临时日志
find $LOG_BASE_DIR -type d -mtime +3 -exec rm -rf {} \;
echo "$(date) - 日志同步完成"

2.2 配置SSH密钥认证

复制代码
ssh-keygen -t rsa -b 4096
ssh-copy-id $REMOTE_USER@$REMOTE_SERVER

2.3 配置定时任务

复制代码
# 编辑crontab
crontab -e

# 添加以下行
0 2 * * * /bin/bash /path/to/k8s_log_sync.sh >> /var/log/k8s_log_sync.log 2>&1
相关推荐
我爱吃土豆120 小时前
AI 编程工具远程开发指南:Codex 桌面版与 WorkBuddy 通过 SSH 连接云服务器实践
服务器·人工智能·ssh
生活爱好者!20 小时前
哇!影视新玩法!docker部署NEOWATCH NAS
运维·docker·容器
一技安身20 小时前
【信创】银河麒麟V10、统信UOS解压7Z文件
linux·运维·服务器
吴声子夜歌1 天前
Shell编程——if条件语句
linux·运维·shell
Dawn-bit1 天前
Linux 运维基础扩展:跳板机、堡垒机与物理服务器全流程
linux·运维·服务器·云计算·运维开发
新时代牛马1 天前
Linux 定时任务:crontab、anacron 与systemd timer
linux·运维·服务器
IT摆渡者1 天前
1panel 配置申请手动解析网站SSL证书
服务器·网络协议·ssl
疯狂打码的少年1 天前
【计算机网络】子网掩码与子网划分计算(含CIDR表示法)
服务器·笔记·计算机网络·php
cpolar技术支持1 天前
Docker 容器启动失败怎么查?端口、日志、权限与网络排障完整教程
linux·docker·容器·cpolar·网络排障
网硕互联的小客服1 天前
怎样在CMD里用chkntfs /x C: 命令来取消磁盘自检?——原理与实践全解
运维·服务器·网络