K8S:容器日志收集与管理

news2024/11/27 5:37:37

Kubernetes 里面对容器日志的处理方式,都叫作 cluster-level-logging,即:这个日志处理系统,与容器、Pod 以及 Node 的生命周期都是完全无关的。这种设计当然是为了保证,无论是容器挂了、Pod 被删除,甚至节点宕机的时候,应用的日志依然可以被正常获取到。

而对于一个容器来说,当应用把日志输出到 stdout 和 stderr 之后,容器项目在默认情况下就会把这些日志输出到宿主机上的一个 JSON 文件里。这样,你通过 kubectl logs 命令就可以看到这些容器的日志了。

第一种,在 Node 上部署 logging agent,将日志文件转发到后端存储里保存起来。这个方案的架构图如下所示

核心就在于 logging agent ,它一般都会以 DaemonSet 的方式运行在节点上,然后将宿主机上的容器日志目录挂载进去,最后由 logging-agent 把日志转发出去。

在 Node 上部署 logging agent 最大的优点,在于一个节点只需要部署一个 agent,并且不会对应用和 Pod 有任何侵入性。所以,这个方案,在社区里是最常用的一种。

Kubernetes 容器日志方案的第二种,就是对这种特殊情况的一个处理,即:当容器的日志只能输出到某些文件里的时候,我们可以通过一个 sidecar 容器把这些日志文件重新输出到 sidecar 的 stdout 和 stderr 上,这样就能够继续使用第一种方案了。

 由于 sidecar 跟主容器之间是共享 Volume 的,所以这里的 sidecar 方案的额外性能损耗并不高,也就是多占用一点 CPU 和内存罢了。

宿主机上实际上会存在两份相同的日志文件:一份是应用自己写入的;另一份则是 sidecar 的 stdout 和 stderr 对应的 JSON 文件。这对磁盘是很大的浪费。所以说,除非万不得已或者应用容器完全不可能被修改,否则还是建议你直接使用方案一,或者直接使用下面的第三种方案。

第三种方案,就是通过一个 sidecar 容器,直接把应用的日志文件发送到远程存储里面去。也就是相当于把方案一里的 logging agent,放在了应用 Pod 里。这种方案的架构如下所示:

 在这种方案里,你的应用还可以直接把日志输出到固定的文件里而不是 stdout,你的 logging-agent 还可以使用 fluentd,后端存储还可以是 ElasticSearch。只不过, fluentd 的输入源,变成了应用的日志文件。一般来说,我们会把 fluentd 的输入源配置保存在一个 ConfigMap 里。

这种方案虽然部署简单,并且对宿主机非常友好,但是这个 sidecar 容器很可能会消耗较多的资源,甚至拖垮应用容器。并且,由于日志还是没有输出到 stdout 上,所以你通过 kubectl logs 是看不到任何日志输出的。

此文章为7月Day26学习笔记,内容来源于极客时间《深入浅出Kubernetes》,推荐该课程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/793908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux_CentOS_7.9部署Docker以及镜像加速配置等实操验证全过程手册

前言:实操之前大家应该熟悉一个新的名词DevOps 俗称开发即运维、新一代开发工程师(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障&…

【*1800树上贪心】CF1401 D

Problem - D - Codeforces 题意: 思路: 首先,1尽可能少,那就是让pi尽可能不合并地摊到所有边上,然后计算贡献 按照CF惯用套路,这样的n^2贡献肯定是更换枚举对象,我们去枚举边,按边…

Docker consul 的容器服务更新与发现

目录 一、Consul 简介 1.什么是服务注册与发现 2. 什么是consul 3.consul 架构 二、部署 consul 服务器(192.168.88.10) 1.建立 Consul 服务 2.查看集群信息 3.通过 http api 获取集群信息 三、registrator服务器(192.168.88.60&…

Gnomon水下环境 下

不会全下去 鱼群 方向反了,位置不对 不动了 速度快,一个条 数量太多 太卡 使用的弧线没问题 ,这块我有点晕 水泡制作 运动严重 减少晃动 turbulenceField1.phaseZ time*20; 总结 使用晶格调节大概样子,变成柔体 particleShape1.daxiaorand(…

shell实现数据库分库分表备份

#!/bin/bash2 3 backup/backup/db #存放数据库的位置4 nodatabasesinformation_schema|mycat|performance_schema|sys|mysql #要过滤的数据库5 6 mysql -uroot -predhat -e "show databases" -N | egrep -v "${nodatabases}" > dbname #将数据库存放在…

ansible自动化运维(二)剧本、角色编写实战

😘作者简介:一名运维工作人员。 👊宣言:人生就是B(birth)和D(death)之间的C(choise),做好每一个选择。 🙏创作不易,动动小…

在C语言中,变量主要的作用是什么?

常量记忆数据只能存储一个固定的数据,永远不变,所以这当然不能算得上是记忆数据 变量存储的数据可以改变,你可以让它记忆5,下一步它可以变为10 如果你还无法理解 那么请不用尝试变量编程实现以下: 输入一个100之内…

Cesium态势标绘专题-简单箭头(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

NoSQL-Redis持久化

NoSQL-Redis持久化 一、Redis 高可用:1.概述: 二、Redis持久化:1.持久化的功能:2.Redis 提供两种方式进行持久化: 三、RDB 持久化:1.定义:2.触发条件:3.执行流程:4.启动时…

地下水除砷工艺盘点:生物法、混凝法、沉淀法、吸附法和离子交换法

砷(As)为非人体必需元素,既不溶解于水又不溶解于酸,在自然界有三价无机态 As(III)、五价无机态 As(V)以及有机砷MMA(甲基胂酸)、DMA(二甲基胂酸)、TMA(三甲基胂酸)等。 砷在水体中主要以三价和五价的无机酸形式存在,三价砷的毒性更强&#xf…

作为一名测试工程师,你知道“微信红包”怎么测试吗?

测试思维 测试任何事物的测试思路可以总结如下: 第一步:梳理产品的核心业务流程:明白这是个什么项目,实现了什么业务,以及是怎么实现的? 这个步骤一般是参考公司的需求文档来的,如果产品提供…

Mr. Cappuccino的第52杯咖啡——Mybatis环境搭建与使用

Mybatis环境搭建与使用 Mybatis介绍Mybatis环境搭建与使用基于XML方式-原生方式开发创建数据库表项目准备项目结构项目代码实体类中添加有参构造方法产生的问题 基于XML方式-mapper代理开发项目准备项目结构项目代码SQL映射文件中namespace未设置为接口全限定名产生的问题 基于…

ESP32 LVGL:使用menuconfig配置LVGL会导致全部文件重新编译问题解决

问题描述 在使用ESP32 IDF LVGL时,我们可以通过idf.py menuconfig来对LVGL进行配置,但是每次使用idf.py menuconfig配置完LVGL后,由于修改了工程的sdkconfig文件,因此所有的文件都需要重新编译。如下图: 需要编译几千…

Mkdocs中利用Js实现大小圈鼠标拖动样式

在docs/javascripts/extra.js下复制粘贴: var CURSOR;Math.lerp (a, b, n) > (1 - n) * a n * b;const getStyle (el, attr) > {try {return window.getComputedStyle? window.getComputedStyle(el)[attr]: el.currentStyle[attr];} catch (e) {}return …

Java并发(十三)----共享存在的问题

1、小故事 老王(操作系统)有一个功能强大的算盘(CPU),现在想把它租出去,赚一点外快 小南、小女(不同的线程)来使用这个算盘来进行一些计算,并按照时间给老王支付费用…

多元函数习题

目录 例题1: 例题2: 例题3: 证明题 例1: 例题2 ​编辑 例题3: 例题4: 例题1: 第二问的解法2: 例题2: 选择D,偏导数存在与函数连续并没有关系。 例题3&…

Git竞合处理

Gitee新建一个代码仓库,clone到本地,模拟竞合的情况出现 这里仓库已经配好了ssh,所以没有添加账户绑定的步骤 clone到本地 模拟A同学Clone代码 git clone 项目地址新建一个文件,上传到仓库 push到仓库 代码仓库已经可以看到了…

mysql-速成补充

目录 1.演示事务 ​编辑 1.1 read-uncommitted 1.2 read-committed 1.3 repeatable read 1.4 幻读 1.5 serializable 1.6 savepoint 2 变量 2.1 语法 2.2 举例 3 存储过程和函数 3.1 特点和语法 3.2 举例 4.函数 4.1 语法 4.2 举例 5 流程控制 5.1 分…

window.location.protocol使用实战图片不同浏览器显示问题解决方案

图片在不同浏览器可能会显示不出来个别原因分析, 如火狐浏览器协议类型会有问题 但是谷歌可以 解决方案:将写死的协议 如http换成window.location.protocol就可以了 前景:前台项目和后台项目有时返回的并不是图片全路径 ,有时候…

接口测试进阶之数据模板

大家好久不见了。今天的文章将介绍jinja2模板在接口测试数据上的应用。 这几个月我在想,进阶系列要怎么写。 毕竟很多情况下,我觉得写技术文章和做培训一样,都会有两个结果: 1.是需要这些知识的人看不懂。 2.是看得懂的人不需要…