按照这篇博文的介绍,可以在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. Delphi 设计模式:《HeadFirst设计模式》---行为模式之责任链模式

    模式解说 责任链模式是一种对象的行为模式,它将处理客户端请求的那些对象联成一条链,并沿着这条链传递请求,直到有一个对象处理它为止. 通常使用在以下场合 1 有多个对象可以处理一个请求,哪个对象处理该请 ...

  2. spring cloud深入学习(十一)-----服务网关zuul

    前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服务集群配置中心,似乎一个 ...

  3. 在Linux中常用的启动引导工具:grub和lilo

    在Linux和WINDOWS两系统并存时就需要安装GRUB(Grand Unified Bootloader),GRUB被广泛地用于替代lilo,GRUB支持在启动时使用命令行模式,支持md5加密保护 ...

  4. leetcode 352 & leetcode 239 & leetcode 295 & leetcode 53 & leetcode 209

    lc352 Data Stream as Disjoint Intervals 可以用treemap解 key保存interval的start,value保存interval的end.分别找出当前va ...

  5. 【xlwings1】快速入门

    前言:安装 pip install xlwings xlwings 安装成功后,如果运行提示报错“ImportError: no module named win32api”,请再安装 pypiwin ...

  6. 【noip】跟着洛谷刷noip题

    传送门 1.铺地毯 d1t1 模拟 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> # ...

  7. Linux字体美化实战(Fontconfig配置)(转)

    原文地址:http://www.jinbuguo.com/gui/linux_fontconfig.html 本文的主题是Linux环境下的字体美化,但是首先得要有字体,然后才能谈美化.所以第一件事就 ...

  8. ES6学习笔记之字符串的扩展

    字符串的for of ES6 为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历. const str='abcd'; for(let s of str){ console.log(s ...

  9. Linux中管理员用户与普通用户之间的切换

    使用su进行用户切换 管理员用户切换至普通用户:  su [用户名] 使用su命令从高级别用户切换至低级别用户无需输入密码 普通用户切换至管理员用户:  普通用户切换至管理员用户使用 su - 使用l ...

  10. nginx源码分析线程池详解

    nginx源码分析线程池详解 一.前言     nginx是采用多进程模型,master和worker之间主要通过pipe管道的方式进行通信,多进程的优势就在于各个进程互不影响.但是经常会有人问道,n ...