Kubernetes日志采集Sidecar模式介绍

简介: DaemonSet和Sidecar模式各有优缺点,目前没有哪种方式可以适用于所有场景。因此我们阿里云日志服务同时支持了DaemonSet以及Sidecar两种方式,并对每种方式进行了一些额外的改进,更加适用于K8S下的动态场景。
+关注继续查看

Kubernetes(K8S)作为CNCF(cloud native computing foundation)的一个核心项目,背靠Google和Redhat的强大社区,近两年发展十分迅速,在成为容器编排领域中领导者的同时,也正在朝着PAAS底座标配的方向发展。


日志采集方式


日志作为任一系统不可或缺的部分,在K8S的官方文档中也介绍了多种的日志采集形式,总结起来主要有下述3种:原生方式、DaemonSet方式和Sidecar方式。


  1. 原生方式:使用 kubectl logs 直接在查看本地保留的日志,或者通过docker engine的 log driver 把日志重定向到文件、syslog、fluentd等系统中。
  2. DaemonSet方式:在K8S的每个node上部署日志agent,由agent采集所有容器的日志到服务端。
  3. Sidecar方式:一个POD中运行一个sidecar的日志agent容器,用于采集该POD主容器产生的日志。


e469affc-e2ac-4c45-8283-e15c8d0357be.png


采集方式对比


每种采集方式都有一定的优劣势,这里我们进行简单的对比:



原生方式

DaemonSet方式

Sidecar方式

采集日志类型

标准输出

标准输出+部分文件

文件

部署运维

低,原生支持

一般,需维护DaemonSet

较高,每个需要采集日志的POD都需要部署sidecar容器

日志分类存储

无法实现

一般,可通过容器/路径等映射

每个POD可单独配置,灵活性高

多租户隔离

一般,只能通过配置间隔离

强,通过容器进行隔离,可单独分配资源

支持集群规模

本地存储无限制,若使用syslog、fluentd会有单点限制

中小型规模,业务数最多支持百级别

无限制

资源占用

低,docker engine提供

较低,每个节点运行一个容器

较高,每个POD运行一个容器

查询便捷性

较高,可进行自定义的查询、统计

高,可根据业务特点进行定制

可定制性

高,每个POD单独配置

适用场景

测试、POC等非生产场景

功能单一型的集群

大型、混合型、PAAS型集群


从上述表格中可以看出:


  1. 原生方式相对功能太弱,一般不建议在生产系统中使用,否则问题调查、数据统计等工作很难完成;
  2. DaemonSet方式在每个节点只允许一个日志agent,相对资源占用要小很多,但扩展性、租户隔离性受限,比较适用于功能单一或业务不是很多的集群;
  3. Sidecar方式为每个POD单独部署日志agent,相对资源占用较多,但灵活性以及多租户隔离性较强,建议大型的K8S集群或作为PAAS平台为多个业务方服务的集群使用该方式。


日志服务K8S采集方式


DaemonSet和Sidecar模式各有优缺点,目前没有哪种方式可以适用于所有场景。因此我们阿里云日志服务同时支持了DaemonSet以及Sidecar两种方式,并对每种方式进行了一些额外的改进,更加适用于K8S下的动态场景。


这两种模式均基于Logtail实现,日志服务客户端Logtail目前已有百万级部署,每天采集上万应用、数PB的数据,历经多次双11、双12考验。相关技术分享可以参见文章:多租户隔离技术+双十一实战效果Polling + Inotify 组合下的日志保序采集方案


DaemonSet采集方式


DaemonSet方式下Logtail做了非常多的适配工作,包括:


  • 一条命令一个参数即可实现部署,资源自动初始化
  • 支持CRD方式配置,支持K8S控制台、kubectl、kube api等,与K8S发布、部署无缝集成
  • K8S RBAC鉴权,日志服务STS鉴权管理


609a6e61-fafc-48e1-b9ed-a7b072a2e84d.png


详细的介绍文章可以参考:
再次升级!阿里云Kubernetes日志解决方案
LC3视角:Kubernetes下日志采集、存储与处理技术实践


Sidecar采集方式


sidecar方式的配置以及使用相对在虚拟机/物理机上采集数据区别不大,从Logtail容器视角来看:Logtail工作在一个“虚拟机”上,需要采集这个机器上某个/某些日志文件。



5900c61e-7bf6-4b15-97c3-67cb467f5f6f.png


但在容器场景下还需解决两个问题:


  1. 配置:使用编排的方式配置agent容器
  2. 动态性:需适应POD的IP地址和hostname的变化
    目前Logtail的容器支持通过环境变量配置相关参数,并支持自定义标识的机器组进行工作,可以完美解决上述两个问题。


Sidecar配置示例


Sidecar模式下日志组件安装、配置方式如下:


步骤一: 部署Logtail容器


  1. 在部署POD时将日志路径挂载到本地,并将对应的volume也挂载到Logtail容器。
  2. Logtail容器需配置 ALIYUN_LOGTAIL_USER_IDALIYUN_LOGTAIL_CONFIGALIYUN_LOGTAIL_USER_DEFINED_ID ,参数含义以及值的选取参见:标准Docker日志采集


tips:


  1. Logtail容器建议配置健康检查,在运行环境、内核等出现异常时可自动恢复。
  2. 示例中使用的Logtail镜像访问的是阿里云hangzhou公网镜像仓库,您可根据需求替换成本Region的镜像,并使用内网方式。


apiVersion: batch/v1
kind: Job
metadata:
  name: nginx-log-sidecar-demo
  namespace: kube-system
spec:
  template:
    metadata:
      name: nginx-log-sidecar-demo
    spec:
      # volumes配置
      volumes:
      - name: nginx-log
        emptyDir: {}
      containers:
      # 主容器配置
      - name: nginx-log-demo
        image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latest
        command: ["/bin/mock_log"]
        args: ["--log-type=nginx", "--stdout=false", "--stderr=true", "--path=/var/log/nginx/access.log", "--total-count=1000000000", "--logs-per-sec=100"]
        volumeMounts:
        - name: nginx-log
          mountPath: /var/log/ngin
      # Logtail的Sidecar容器配置
      - name: logtail
        image: registry.cn-hangzhou.aliyuncs.com/log-service/logtail:latest
        env:
          # aliuid
          - name: "ALIYUN_LOGTAIL_USER_ID"
            value: "165421******3050"
          # 自定义标识机器组配置
          - name: "ALIYUN_LOGTAIL_USER_DEFINED_ID"
            value: "nginx-log-sidecar"
          # 启动配置(用于选择Logtail所在Region)
          - name: "ALIYUN_LOGTAIL_CONFIG"
            value: "/etc/ilogtail/conf/cn-hangzhou/ilogtail_config.json"
        # 和主容器共享volume
        volumeMounts:
        - name: nginx-log
          mountPath: /var/log/nginx
        # 健康检查
        livenessProbe:
          exec:
            command:
            - /etc/init.d/ilogtaild
            - status
          initialDelaySeconds: 30
          periodSeconds: 30


步骤二: 配置机器组


如下图所示,在日志服务控制台创建一个Logtail的机器组,机器组选择自定义标识,可以动态适应POD ip地址的改变。具体操作步骤如下:


  1. 开通日志服务并创建Project、Logstore,详细步骤请参考准备流程
  2. 在日志服务控制台的机器组列表页面单击创建机器组
  3. 选择用户自定义标识,将您上一步配置的 ALIYUN_LOGTAIL_USER_DEFINED_ID填入用户自定义标识内容框中。



6a3f17e6-b4ce-4de2-941b-5e5d16daf28f.png


步骤三:配置采集方式


机器组创建完成后,即可配置对应文件的采集配置,目前支持极简、Nginx访问日志、分隔符日志、JSON日志、正则日志等格式,具体可参考:文本日志配置方式。本示例中配置如下:



image



步骤四:查询日志


采集配置完成并应用到机器组后,1分钟内日志即可采集上来,进入对应logstore的查询页面即可查询到采集上来的日志。


image




日志进阶


阿里云日志服务针对日志提供了完整的解决方案,日志采集只是其中的第一步,以下相关功能是日志进阶的必备良药:


  1. 日志上下文查询:https://help.aliyun.com/document_detail/48148.html
  2. 快速查询:https://help.aliyun.com/document_detail/88985.html
  3. 实时分析:https://help.aliyun.com/document_detail/53608.html
  4. 快速分析:https://help.aliyun.com/document_detail/66275.html
  5. 基于日志设置告警:https://help.aliyun.com/document_detail/48162.html
  6. 配置大盘:https://help.aliyun.com/document_detail/69313.html
    更多日志进阶内容可以参考:日志服务学习路径
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
5天前
|
Kubernetes Cloud Native KVM
Kubernetes(k8s)部署模式发展
Kubernetes(k8s)部署模式发展
22 0
|
2月前
|
Kubernetes API 容器
Kubernetes 控制器模式为何会依赖声明式 API?
Kubernetes 控制器模式依赖声明式的 API。另外一种常见的 API 类型是命令式 API。
36 0
|
2月前
|
Kubernetes Linux Shell
Linux k8s Kubernetes All-in-One 模式安装 KubeSphere 详细教程
Linux k8s Kubernetes All-in-One 模式安装 KubeSphere 详细教程
|
8月前
|
Kubernetes 网络安全 容器
查看k8s集群使用的防火墙模式
查看k8s集群使用的防火墙模式
114 0
|
10月前
|
存储 Kubernetes 网络协议
在Linux上以all in one模式安装kubernetes & kubesphere
在Linux上以all in one模式安装kubernetes & kubesphere
232 0
在Linux上以all in one模式安装kubernetes & kubesphere
|
Kubernetes 容器 Perl
Kubernetes的Sidecar模式
Kubernetes的Sidecar模式
734 0
Kubernetes的Sidecar模式
|
Kubernetes 网络协议 机器人
K8S 之 Flannel 的 vxlan 网络模式初步源码解析
详细解析过 Flannel 的 vxlan 模式的网络通信原理,本篇将继续深入结合源码进行探索
|
消息中间件 数据采集 Kubernetes
iLogtail社区版使用入门 - 使用DaemonSet模式采集K8s容器日志
本文介绍K8s的日志架构,并通过利用K8s提供的基础能力完成数据驱动应用架构的第一步,使用iLogtail将日志统一采集写入Kafka。 iLogtail已经完整开源,期望同众多开发者一起将iLogtail打造成世界一流的可观测数据采集器。
698 0
|
运维 Kubernetes 网络协议
kubernetes(k8s)安装BGP模式calico网络支持IPV4和IPV6
BGP是互联网上一个核心的去中心化自治路由协议,它通过维护IP路由表或“前缀”表来实现自治系统AS之间的可达性,属于矢量路由协议。不过,考虑到并非所有的网络都能支持BGP,以及Calico控制平面的设计要求物理网络必须是二层网络,以确保 vRouter间均直接可达,路由不能够将物理设备当作下一跳等原因,为了支持三层网络,Calico还推出了IP-in-IP叠加的模型,它也使用Overlay的方式来传输数据。IPIP的包头非常小,而且也是内置在内核中,因此理论上它的速度要比VxLAN快一点 ,但安全性更差。Calico 3.x的默认配置使用的是IPIP类型的传输方案而非BGP。
767 1
|
Kubernetes Cloud Native Linux
冰河教你一次性成功安装K8S集群(基于一主两从模式)!! 原创 冰河 冰河技术 2020-12-01
研究K8S有一段时间了,最开始学习K8S时,根据网上的教程安装K8S环境总是报错。所以,我就改变了学习策略,先不搞环境搭建了。先通过官网学习了K8S的整体架构,底层原理,又硬啃了一遍K8S源码。别问我为哈这样学,只是我觉得对我个人来说,这样学能让我更好的理解整套云原生体系。这不,这次,我总结了如何一次性成功安装K8S集群的方法。我们今天先来说说如何基于一主两从模式搭建K8S集群。后面,我们再上如何完全无坑搭建K8S高可用集群的方案。
195 0
相关产品
对象存储
日志服务
文件存储NAS
推荐文章
更多