按照这篇博文的介绍,可以在ACK集群上通过Helm的方式部署虚拟节点,提升集群的弹性能力。现在,通过虚拟节点部署的ECI弹性容器实例也支持将stdout输出、日志文件同步到阿里云日志服务(SLS)进行统一管理,所有日志能够被统一收集同一个日志服务project里面。并且,日志收集方式与集群上普通容器收集方式一致,无缝结合。

本文将结合虚拟节点弹性伸缩的能力来介绍日志收集。

在ACK集群部署日志服务支撑组件

在ACK集群安装界面勾选使用日志服务,集群会安装支持日志收集的必要组件。

集群安装完毕后,可以在日志服务控制台 查看到按k8s-log-{Kubernetes 集群 ID}形式命名的工程。收集到的业务容器日志都会放在该工程下。

已有集群可以按照阿里云帮助文档去部署相关组件。如果在普通集群没有部署相关日志服务组件,那么ECI实例的日志将会被统一收集到eci-log-default-project-开头的project内。

部署虚拟节点

可以按照ACK容器服务发布virtual node addon,快速部署虚拟节点提升集群弹性能力这篇文章在集群内部署虚拟节点。

使用YAML模版来收集普通业务容器日志

YAML 模板的语法同 Kubernetes 语法,但是为了给容器指定采集配置,需要使用 env 来为 container 增加采集配置和自定义 Tag,并根据采集配置,创建对应的 volumeMounts 和 volumes。以下是一个简单的 Deployment 示例:

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: alpine
name: alpine
spec:
replicas: 2
selector:
matchLabels:
app: alpine
template:
metadata:
labels:
app: alpine
spec:
containers:
- image: alpine
imagePullPolicy: Always
args:
- ping
- 127.0.0.1
name: alpine
env:
######### 配置 环境变量 ###########
- name: aliyun_logs_test-stdout
value: stdout
- name: aliyun_logs_test-file
value: /log/*.log
- name: aliyun_logs_log_tags
value: tag1=v1
#################################
######### 配置vulume mount #######
volumeMounts:
- name: volume-sls
mountPath: /log
volumes:
- name: volume-sls
###############################

其中有三部分需要根据您的需求进行配置,一般按照顺序进行配置。

  • 第一部分通过环境变量来创建您的采集配置和自定义 Tag,所有与配置相关的环境变量都采用aliyun_logs_作为前缀。
    创建采集配置的规则如下:
- name: aliyun_logs_{Logstore 名称}
value: {日志采集路径}

示例中创建了两个采集配置,其中 aliyun_logs_log-stdout 这个 env 表示创建一个 Logstore 名字为 log-stdout,日志采集路径为 stdout 的配置,从而将容器的标准输出采集到 log-stdout 这个 Logstore 中。

说明 Logstore 名称中不能包含下划线(_),可以使用 - 来代替。

  • 创建自定义 Tag 的规则如下:
- name: aliyun_logs_{任意不包含'_'的名称}_tags
value: {Tag 名}={Tag 值}

配置 Tag 后,当采集到该容器的日志时,会自动附加对应的字段到日志服务。

  • 如果您的采集配置中指定了非 stdout 的采集路径,需要在此部分创建相应的 volumnMounts。
    示例中采集配置添加了对c:log*.log 的采集,因此相应地添加了c:log的 volumeMounts。

将上述yaml保存为test.yaml,应用在集群上:

$ kubectl create ns virtual
$ kubectl create -f test.yaml -n virtual # 查看pod部署情况
$ kubectl get pods -n virtual -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
alpine-57c9977fd6-bsvwh 1/1 Running 0 10m 172.18.1.161 cn-hangzhou.10.1.190.228 <none>
alpine-57c9977fd6-wc89v 1/1 Running 0 10m 172.18.0.169 cn-hangzhou.10.1.190.229 <none>

查看日志

到日志服务控制台的相应工程下找到test-stdout这个logstore,点击查询可以看到收集到的普通容器的stdout日志:

将业务容器扩容到虚拟节点

将把上面创建的命名空间virtual标记为使用虚拟节点进行部署,然后伸缩两个pod到虚拟节点。

# 标记namespace
$ kubectl label namespace virtual virtual-node-affinity-injection=enabled # scale deployment/alpine
$ kubectl scale --replicas=4 deployments/alpine -n virtual # 查看pod部署情况,可以看到2个部署在正常节点,2个部署在虚拟节点
$ kubectl get pods -n virtual -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
alpine-57c9977fd6-2ctp7 1/1 Running 0 23s 10.1.190.231 virtual-kubelet <none>
alpine-57c9977fd6-b4445 1/1 Running 0 23s 10.1.190.230 virtual-kubelet <none>
alpine-57c9977fd6-bsvwh 1/1 Running 0 10m 172.18.1.161 cn-hangzhou.10.1.190.228 <none>
alpine-57c9977fd6-wc89v 1/1 Running 0 10m 172.18.0.169 cn-hangzhou.10.1.190.229 <none>

再次查看日志

再点开test-stdout这个logstore,可以看到收集到的普通容器和ECI实例的混合stdout日志:

需要注意: 您账户下不同集群内的不同logstore不可以配置收集相同匹配规则的ECI实例日志,如stdout;同一个集群下,不同logstore不可以配置收集相同匹配规则的普通容器、ECI实例日志。

本文作者:柏理

原文链接

本文为云栖社区原创内容,未经允许不得转载。

ACK容器服务虚拟节点使用阿里云日志服务来收集业务容器日志的更多相关文章

  1. 杂项-分布式-EDAS:深度解析阿里云EDAS服务

    ylbtech-杂项-分布式-EDAS:深度解析阿里云EDAS服务 1.返回顶部 1. 深度解析阿里云EDAS服务 弹性伸缩 摘要: 第一种只适用于业务较少的情况,而在新业务不断增加的情况下,增加新应 ...

  2. 阿里云Kubernetes服务 - Service Broker快速入门指南

    4月底阿里云容器服务上线了基于Kubernetes集群的服务目录功能.阿里云的容器的服务目录遵循Open Service Broker API标准,提供了一系列的服务代理组件,实现了对主流开源服务如M ...

  3. 深度解析双十一背后的阿里云 Redis 服务

    摘要: Redis是一个使用范围很广的NOSQL数据库,阿里云Redis同时在公有云和阿里集团内部进行服务,本文介绍了阿里云Redis双11的一些业务场景:微淘社区之亿级关系链存储.天猫直播之评论商品 ...

  4. 重磅!容器集群监控利器 阿里云Prometheus 正式免费公测

    Prometheus 作为容器生态下集群监控的首选方案,是一套开源的系统监控报警框架.它启发于 Google 的 borgmon 监控系统,并于 2015 年正式发布.2016 年,Prometheu ...

  5. 阿里云Kubernetes服务上使用Tekton完成应用发布初体验

    Tekton 是一个功能强大且灵活的 Kubernetes 原生开源框架,用于创建持续集成和交付(CI/CD)系统.通过抽象底层实现细节,用户可以跨多云平台和本地系统进行构建.测试和部署. 本文是基于 ...

  6. 【工具-代码】OSS阿里云存储服务-代码实现

    上一章节[工具]OSS阿里云存储服务--超级简单--个人还是觉得Fastdfs好玩 https://www.cnblogs.com/Yangbuyi/p/13488323.html 接上一个文章讲解还 ...

  7. 用StackExchange.Redis客户端连接阿里云Redis服务遇到的问题

    阿里云推荐的Redis服务.NET客户端是ServiceStack.Redis,但ServiceStack.Redis不支持异步,不支持.NET Core,于是尝试使用StackExchange.Re ...

  8. 阿里云 Redis 服务遇到的问题

    ERR unknown command eval 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: St ...

  9. 物联网架构成长之路(18)-接阿里云OSS服务

    1.申请/购买OSS服务 在阿里云上申请/购买OSS服务, 然后在会得AccessKeyID,AccessKeySecret,bucketName 这三个东西 2.增删改查 在pom.xml文件上增加 ...

随机推荐

  1. 深入浅出 Java Concurrency (15): 锁机制 part 10 锁的一些其它问题[转]

    主要谈谈锁的性能以及其它一些理论知识,内容主要的出处是<Java Concurrency in Practice>,结合自己的理解和实际应用对锁机制进行一个小小的总结. 首先需要强调的一点 ...

  2. 深入浅出 Java Concurrency (5): 原子操作 part 4[转]

    在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁(后面的章节还会谈到锁). 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度 ...

  3. python—时间与时间戳之间的转换

    python-时间与时间戳之间的转换 对于时间数据,如2016-05-05 20:28:54,有时需要与时间戳进行相互的运算,此时就需要对两种形式进行转换,在Python中,转换时需要用到time模块 ...

  4. 【DM642学习笔记六】TI参考文档--DM642 Video Port Mini Driver

     这个文档介绍了在DM642EVM板上视频采集和显示微驱动的使用和设计.用EDMA进行存储器和视频端口的数据传输.为了增强代码的复用性和简化设计过程,驱动分为通用视频端口层和特定编解码芯片微驱动层两个 ...

  5. 如何提高英语听力(内容摘自NECCS)+ 乘法表

    乘法表 print('\n'.join([' '.join(['%s*%s=%-2s'%(y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]) ...

  6. pytorch 多GPU训练过程中出现ap=0情况

    原因可能是pytorch 自带的BN bug:安装nvidia apex 可以解决: $ git clone https://github.com/NVIDIA/apex $ cd apex $ pi ...

  7. Redis源码解析:30发布和订阅

    Redis的发布与订阅功能,由SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE,PUNSUBSCRIBE,以及PUBLISH等命令实现. 通过执行SUBSCRIBE命令,客户端可以订阅 ...

  8. 访问树中的所有元素(DOM)

    创建一个函数,给定页面上的DOM元素,将访问元素本身及其所有后代(而不仅仅是它的直接子代).对于访问的每个元素,函数应将该元素传递给提供的回调函数. 函数的参数应该是: 一个DOM元素 一个回调函数( ...

  9. 组件化开发之vue

    今天写了写vue的组件化开发demo,有些小的心得.分享一下. 组件化意味着代码可以复用,调用组件就可以了.然后可以通过组件调用组件的相关能力. 例如以前我做组件化开发的一个小项目 原生js组件的实现 ...

  10. loading遮罩

    .loading{ position: relative; cursor: default; point-events: none; text-shadow: none!important; colo ...