学习
实践
活动
专区
工具
TVP
写文章
专栏首页腾讯云容器服务团队的专栏在腾讯云容器服务中对容器实例日志设置定期清理和回卷
原创

在腾讯云容器服务中对容器实例日志设置定期清理和回卷

引言

Kubernetes对于容器实例的日志收集,并没有提供原生的解决方案。但提供使用kubectl logs命令查看容器实例运行时的日志。kubectl logs命令实现的基本原理为:容器运行时默认将标准输出和标准错误中的日志输出到磁盘上保存。保存至主机目录:/var/lib/docker/containers/container_id/目录。用户调用kubectl logs命令时,kubelet读取对应的日志文件中的数据,将数据回传给master,再由master返回到用户。从而实现用户对日志的查看。

腾讯云容器服务利用kubectl logs命令,实现在控制台即可查看对应容器实例的日志,并且提供查看某个特定时间段的日志的功能,这极大的方便了用户对容器实例中的程序进行定位和跟踪。但是,由于在容器实例日志保存在本地,当程序中大量打印日志时,很容易造成主机上的磁盘空间大量被占用。在日志服务上线一段时间后,发现用户遇到这种情况时,一般是手动去清理日志。我们就考虑是不是有比较简单的方式,在集群节点对日志进行定期清理和回卷。

通过logrotate服务实现日志定期清理和回卷

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。

但如果按照之前的部署方式,需要手动在每个节点上都安装和配置对应logrotate工具。如果通过Kubernetes容器服务编排的能力,将logrotate通过Kubernetes中服务的方式部署到各个节点上,这样既可以实现只需要一次部署,部署到所有节点。并且通过容器的方式保证了logrotate配置的一致性。

具体的实施方案如下图所示:

方案的具体实现是在Kubernetes集群中,创建DaemonSet资源实现。DaemonSet资源会在每个Node节点上都部署一个logrotate的容器实例,并且在容器实例中设置映射主机的log日志目录,从而实现日志的定时清理和回卷。

创建DaemonSet的示例如下

apiVersion: extensions/v1beta1

kind: DaemonSet

metadata:

name: logrotate

spec:

template:

metadata:
  labels:
    app: logging
    id: logrotate
  name: logrotate
spec:
  containers:
  - name: logrotate-es
    image: blacklabelops/logrotate
    securityContext:
      privileged: true
    volumeMounts:
     - name: containers
       mountPath: /var/lib/docker/containers
     - name: varlog
       mountPath: /var/log/docker
     - name: logs
       mountPath: /logs
    env:
    - name: LOGS_DIRECTORIES
      value: "/var/lib/docker/containers /var/log/docker"
    - name: LOGROTATE_INTERVAL
      value: "hourly"
    - name: LOGROTATE_OLDDIR
      value: "/logs"
  volumes:
     - hostPath:
         path: /var/lib/docker/containers
       name: containers
     - hostPath:
         path: /var/log/docker
       name: varlog
     - hostPath:
         path: /var/log/containers/
       name: logs  

使用这个yaml文件,可以直接在Kubernetes中进行部署。

# kubectl create -f logrotate_ds.yaml
daemonset "logrotate" created

在示例的yaml文件中,logrotate服务将按照定时(1小时)的对日志进行回卷,回卷超过5个副本后则会对日志进行清理。如果有需要,可以修改相应的参数,设置不同的回卷规则和清理规则。详细的参数说明可以参考:https://github.com/blacklabelops/logrotate。

通过修改dockerd参数进行回卷和清理

由于Kubernetes的日志收集,底层是通过docker来实现。而docker提供了一定的日志回卷和清理功能。可以通过在dockerd的启动参数中,增加log-opts()参数实现对日志的回卷和清理,其中max-size参数设置日志一个副本的最大值,max-file设置日志的最大的副本数。超过这个副本数则会对日志进行删除。

具体的修改过程包括三个步骤:

1、创建/etc/dockerd/daemon.json

{
  "log-driver":"json-file",
  "log-opts":{
	"max-size" :"10m","max-file":"3"
    }
}

参数说明: 设置单个容器日志超过10M则进行回卷,回卷的副本数超过3个就进行清理。

2、修改dockerd 服务配置文件

在 /etc/systemd/system/multi-user.target.wants/dockerd.serviced文件中

添加dockerd启动参数--config-file=/etc/docker/daemon.json

3、重新启动dockerd服务

systemctl daemon-reload
service dockerd restart

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • Docker最全教程之使用TeamCity来完成内部CI、CD流程(十六)

    本篇教程主要讲解基于容器服务搭建TeamCity服务,并且完成内部项目的CI流程配置。教程中也分享了一个简单的CI、CD流程,仅作探讨。不过由于篇幅有限,完整的...

    雪雁-心莱科技
  • Docker最全教程之使用TeamCity来完成内部CI、CD流程(十七)

    本篇教程主要讲解基于容器服务搭建TeamCity服务,并且完成内部项目的CI流程配置。教程中也分享了一个简单的CI、CD流程,仅作探讨。不过由于篇幅有限,完整的...

    心莱科技雪雁
  • 在 TKE 中使用 Velero 迁移复制集群资源

    李全江(jokey),腾讯云容器工程师,热衷于云原生领域。目前主要负责腾讯云 TKE 的售中、售后的技术支持,根据客户需求输出合理技术方案与最佳实践。 概述 ...

    腾讯云原生
  • 使用腾讯云容器服务搭建 ELK 日志系统

    目前主流的分布式日志系统有ELK,flume,fluentd,splunk等,本文利用腾讯云容器服务搭建ELK系统收集nginx的访问日志 ,搭建过程中共搭建4...

    腾讯云容器服务团队
  • 《TKE学习》部署容器服务 TKE(二)

    首先您需要创建集群。集群是指容器运行所需云资源的集合,包含了若干台云服务器、负载均衡器等腾讯云资源。

    baron
  • 了解Kubernetes主体架构(二十八)

    接下来还会逐步完善本教程,比如Helm、ELK、Windows Server容器等等。

    心莱科技雪雁
  • 6月腾讯云容器产品技术月报|参与互动赢好礼!

    2022年6月 VOL:26 腾小云告诉你最前线的产品新特性, 总有一款让你心动~ 云说新品 容器产品新特性6月上新 腾讯云弹性容器服务EK...

    腾讯云原生
  • 了解Kubernetes主体架构(二十七)

    接下来还会逐步完善本教程,比如Helm、ELK、Windows Server容器等等。

    雪雁-心莱科技
  • docker高级篇1-dockeran安装mysql主从复制

    大家好,咱们前面通过十篇的文章介绍了docker的基础篇,从本篇开始,咱们的《docker学习系列》将要进入到高级篇阶段(基础篇大家可以查看之前发布的文章)。

    凯哥Java
  • K8S学习笔记之Kubernetes核心概念

    Kubernetes(K8S)是Google开源的容器集群管理系统,其设计源于Google在容器编排方面积累的丰富经验,并结合社区创新的最佳实践。 K8S在D...

    Jetpropelledsnake21
  • 腾讯云容器月报 | 一篇带你看完优秀上新,最飒的功能用起来

    最新发布 腾讯云容器服务公有云版本(TKE 公有云版) 1. TKE 公有云版上线节点池功能 借助腾讯云容器服务节点池统一机型、统一标签和Taint、节点池动...

    腾讯云原生
  • TKE操作笔记02

    本次笔记主要讲述了如何在腾讯云控制台创建并使用你的第一个kubernetes集群,创建过程中每个步骤的区别以及如何选择,保证自己的集群资源达到最优。

    聂伟星
  • 1月容器技术产品月报 | 留言有奖

    2021年1月 VOL:09 腾小云告诉你最前线的产品新特性, 总有一款让你心动~ 云说新品 容器产品新特性 12月上新 腾讯云边缘服务TK...

    腾讯云原生
  • k8s实践(1)--k8s集群入门介绍和基础原理

    1、简单了解集群的工作原理和基础概念,名词解释。 2、安装etcd集群:etcd分布式键值存储系统,用于保持集群状态,比如Pod、Service等对象信息。 ...

    黄规速
  • 云巢揭秘:数据库产品 PaaS On IaaS 实践分享

    作者:kevinyfsun(孙勇福)  腾讯CSIG云产品研发工程师 导语| 随着2B行业的蓬勃发展,数据库产品中心原有烟囱式发展模式,在资源调度和统一管控上...

    腾讯大讲堂
  • 如何在Ubuntu 14.04上使用Shipyard部署Wordpress

    Shipyard是Docker服务器的管理工具。Docker是用于集装箱化的尖端软件。Shipyard允许您查看每个服务器正在运行的容器,以便启动或停止现有容器...

    小铁匠米兰的v
  • Sentry 监控 - 私有 Docker Compose 部署与故障排除详解

    除了公开提供其源代码外,Sentry 还提供并维护了一个最小的设置,可以为简单的用例开箱即用。该存储库还可以作为各种 Sentry 服务如何连接以进行完整设置的...

    为少
  • TKE操作指南 - TKE产品介绍(一)

    腾讯云容器服务(Tencent Kubernetes Engine,TKE)是高度可扩展的高性能容器管理服务,您可以在托管的云服务器实例集群上轻松运行应用程序。...

    亮哥说TKE
  • Docker 基础

    之前讲了很多前端基础知识,这一篇换个口味,讲讲 Docker。然后再继续讲 JavaScript。

    1ess

扫码关注腾讯云开发者

领取腾讯云代金券