第3步Kubernetes集群的监控和日志|学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习第3步Kubernetes集群的监控和日志

开发者学堂课程【云原生实践公开课第3步 Kubernetes 集群的监控和日志】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/698/detail/12268


第3步 Kubernetes 集群的监控和日志


内容介绍:

一、 监控体系介绍

二、 日志体系介绍

三、 回归可观测性的本质

四、 阿里云可观测性体系

五、 容器可观测性的困境

 

一、监控体系介绍

容器可观测性的困境

容器可观测性主要由监控与日志两大部分组成,监控系统可以帮助开发者查看系统的运行状态,而日志系统可以协助问题的排查和诊断,但是和传统的可观测性体系相比,容器的可观测性带来了新的挑战。

  • 可监控的内容变多了应该怎么选型?

传统架构:资源监控、应用监控

容器架构:资源监控、管控系统监控、微服务拓扑监控、中间件系统监控、应用监控

Kubernetes 通过标准化的方式定义了交付,同样也规约了可观测性的接入方式,从而更多的组件可以接入到监控体系。

  • 采集的方式动态化了应该怎么使用?

传统架构:配置静态采集对象、正向拓扑关系配置

容器架构:服务发现动态采集、反向拓扑关系聚合

在 Kubernetes 中,监控采集的对象会随着应用的发布、升级而动态生成与销毁。因此采集对象的元数据和监控数据应该是解耦的、动态的,并通过一定的规则进行聚合。

  • 观测性能力整合了应该怎么运维?

传统架构:

-报警->运维->报警消除

容器架构:

–报警->自愈->报警消除->复盘

–报警->自愈失败-→运维->报警消除

在Kubernetes 中,所有的监控对象默认都是可宕机、可漂移、可恢复的。因此,故障产生和自愈是同步进行的,报警与报警消除是用来回溯自愈能力是否生效的方式,我们应该将系统设计符合自愈的要求,降低人工的运维。


二、监控体系介绍

1. Kubernetes的监控体系–常用的监控方式

  • 资源监控

CPU、内存、网络等资源类的指标,常以数值、百分比为单位进行统计,是最常见的资源监控方式。

  • 性能监控

应用的内部监控,通常是通过Hook的机制在虚拟机层、字节码执行层隐式回调,或者在应用层显示注入,获取更深层次的监控指标,常用来应用诊断与调优。

  • 安全监控

这个在容器里边,也是比较常见的,特别是对于一些对外提供多租服务的一些客户,比如说一个集群里对外服务了很多客户,然后客户之间有数据的隔离性的要求,有网络隔离性的要求等等,那这时,会针对不同的安全进行的一系列监控策略,例如越权管理、安全漏洞扫描等等。

  • 事件监控

Kubernetes 中一种另类的监控方式,紧密贴合 Kubernetes 的设计理念,补充常规监控方案的缺欠与弊端。

事件监控K8S里面的这个有一个非常重要的机制,就是这个状态机的机制,状态之间的这个转换,就是把装载机画出来的状态之间的这个转化,就是那条转化的那条曲线。

2. Kubernetes的监控体系–监控接口标准化

  • 选择 Kubernetes 监控的方案时需要考虑因素不止有提供的监控指标丰富度,还

有与 Kubernetes 的整合能力的完备性,包括上层 kubectl 的查询、HPA 的弹性能力等等。

  • 那K8s和监控方案之间的整合是通过三种接口来对外实现,分别是 Resource

Metrics、Custom Metrics、External Metrics。

  • Resource Metrics、Custom Metrics、External Metrics 三种接口的对比:

监控接口标准:Resource Metrics

APIService 地址:metrics.k8s.io

接口使用场景描述:主要用于Kubernetes内置的消费链路,通常由 Metrcis-Server提供。

监控接口标准:Custom Metrics

APIService地址:custom.metrics.k8s.io

接口使用场景描述:主要的实现为 Prometheus,提供资源监控和自定义监控

监控接口标准:External Metrics

APIService地址:external.metrics.k8s.io

接口使用场景描述:主要的实现为云厂商的 Provider 提供云资源的监控指标

3. Kubernetes的监控体系-metrics-server

image.png

metrics-server

  • metrics-server 是一个监控的聚合和监控的接口的提供方。在 KS 里面,整个监

控采集并不是 metrics-server 去采集,而是 cgroup [Linux Kernel]来采集的。

  • 容器的场景的一个底层的原理就是基于 Linux name space,然后通过 cgroup

做隔离,也就是说,监控指标在cgroup那层就已经决定好了,只是这个监控的数据,在 Cgroup 层是一个不太可读的一个状态。

( 1)优点

- Kubernetes 社区孵化的监控采集组件-简单便捷,提供 Kubernetes 集成完备性

(2)缺点

-无法支持自定义监控

image.png

4. Kubernetes的监控体系-prometheus

Prometheus

(1) 优点

  • CNCF社区孵化的监控采集组件
  • 社区活跃且丰富度较高
  • 功能强大且灵活

(2)缺点

  • 学习成本高
  • 架构复杂性较大
  • 组件成熟度良莠不齐
  • 资源消耗较多

5. Kubernetes 中日志的分类

  • 主机内核的日志

主机内核日志可以协助开发者诊断例如:网络栈异常,驱动异常,文件系统异常,影响节点(内核)稳定的异常。

  • Runtime 的日志

最常见的运行时是 Docker,可以通过 Docker 的日志排查例如删除 Pod Hang 等问题。

  • 核心组件的日志

APIServer 日志可以用来审计,Scheduler 日志可以诊断调度,etcd 日志可以查看存储状态,Ingress 日志可以分析接入层流量。

  • 部署应用的日志

可以通过应用日志分析查看业务层的状态,诊断异常

6. Kubernetes 中日志的采集方式

只要有三种采集方式:挂载宿主机采集、标准输入输出采集、sidecar采集。

(1) 挂载宿主机采集

直接把这个日志路径挂出来,挂到这个宿主机特定的一个路径,然后再把对应的这个配置下沉,给采集的组件,由采集的组件去生成采集任务,把这个数据收回到监控的整个离线的数据通路里面,实现数据采集。

(2) 标准输入输出采集

容器里边最常见的、最推荐大家使用的采集方式。在程序里面自己去设置日志,导流到标准输入输出里边,那此时你就可以通过 controllog 或者是这个 doctor locks直接去获取对应的日志。和挂载宿主机采集没有太大的差别。

(3)sidecar 采集

这个采集方式是需要注入一个 container 到我们的 pod 里,然后让两个 container互用相同的这个 name space,两者可以共享 PID/共享文件。然后,在 sidecar 里面去安装对应的 language 然后把它去写到远程。

这种方式,一般情况下是组件要有一些特别的一个诉求,比如,组件里面有一些安全的一个策略,就必须要独立采集,不能够混在一起采集等等,会使用 sidecar 采集。

这三种方式,其实就是K8S里面标准的日志采集的一个主要的策略。

image.png

7. Kubernetes 开源日志方案–Flunetd

  • Flunetd 中的 Flunetdb 就是采集的一个 agent,然后由 agent 去把对应的数据

推到 Flunetd,再由 Flunetd 去连线 elasticsearch 等再进行整合。

  • 不太建议在云上的这个场景,或者是在自建的这个场景直接去使用 Flunetd,建

议大家是使用类似一些云厂商提供的日志策略。比如说在云上的时候,可以通过不同的云厂商提供的日志策略,那种动态的配置策略去实现共同采集。在云下可以把集群移动到云上,然后再下载云上提供的日志组件。

 

三、回归可观性的本质

1. 回归可观测性的本质–提高系统稳定性

容器可观测性的本质是为了更全面、更快速、更准确地发现系统的问题,核心目标是为了提高系统的稳定性,提升系统稳定性不能只依赖可观测性的滞后的运维操作,而是要把怎么减少出现问题并降低影响范围,怎么准确快速定位问题,标准化的问题怎么系统解决这三个策略整合起来。

(1) 如何减少出现问题,有以下建议:

  • 集群组件尽可能精简,减少全局组件
  • 应用配置合理的 Request/Limit 超卖比
  • 在线业务配置 Readiness/Liveness

(2) 如何更快速、更准确定位问题

  • 建立有梯度的监控体系
  • 事件监控是容器场景下的利器

(3) 标准化的问题怎么系统解决

  • 资源/容量的问题配置HPA或者资源弹性
  • 常见的问题固化为自愈脚本、文档、手册

2. 可观测性不是一次性投入,而是持续迭代的循环

阿里云可观测性体系–监控

image.png

  • 该图为阿里云监控体系的全貌,SLS 是一个日志服务,可以采集系统组件的日

网关的日志应用日志等等在 SLS 之上,还有各种不同的这个可视化的Dashboard,在 Dashboard 里面去查看特异性的可视化分析

  • 第二个就是APM工具阿里云上的arms的这个组件, 实际上是通过 kubelet

AHAS Agent 的方式进行注入的开发者无需关心怎么去集成它只需要通过Application Performance 就可以动态的使用这个 APM 的这个能力。

  • 第三个是 AHAS是一个应用 Topology Architecture Monitoring 控制的一个

组件,在容器上很多的服务是微服务的架构,微服务架构里面有一个很重要的一个问题,就是服务之间的流量治理的问题,那对于这个问题来讲,AHAS 是非常合适的,可以可视化微服务框架的东西和南北的流量走向,并且设置对应的一些报警策略来去实现深入的监控,就是云监控。

  • eventer 是独立的一个事件监控体系可以配合 npd去采集积累上的一些异

常,由 npd 产生对应的事件,再由 eventer 去连线到客户的软件。

image.png


四、阿里云可观测性体系–日志

日志体系是基于 Log-Pilot 的一个开源组件来去实现的,Log-Pilot 可以去采集 pod 的日志,到 engine 的日志和一kubelet等等一系列日志,还有 Linux kernel 的日志,并且把这些日志统一聚合到 SLS,由 SLS 去负责上层的这个可视化,以及数据离线和归档,和对应的这个日志分析的这个处理的逻辑。

实操

  • 首先,先部署一个应用 workshop kubectl apply -f deploy . yaml,这个应

用两个副本的 replicas,然后申请1cpu的资源。

  • 应用布置下去之后,看应用目前的一个状态,现在使用多少资源,输入pod

集群里由于没有安装任何监控组件,一个错误,就目前的 pod 命令是无法使用的。

  • 部署一个 metrics-server,观察如何与 Mac、搜狗之间进行联动在阿里云

上,这些步骤不需要去做,因为阿里云上默认情况下已经安装好了 metrics-server。

  • metrics-server 由三部分组成 metrics-server 的组件、rbacsvc
  • 首先 workshop kubectl apply -f rbac.yaml,创建完成后,在 workshop

kubectl apply -f svc.yaml,之后是 workshop kubectl apply -f metrics-server.yaml,然后 workshop kubectl get pod -n kube-system,查看 metrics-server的状态,已经安装完成。

  • 但是还不能使用,因为 metrics-server 和 K8s 之间还没有整合,workshop

kubectl apply -f apiservice.yaml注册一个 apiservice,之后就可以正常使用metrics-server了。

  • 下载 HPA workshop kubectl apply-f hpa.yaml,使用 HPA workshop kubectl

describe hpa nginx-deployment-basic-hpa刚开始的时候,这个地方是一个unknown 的一个状态,正常情况下,应用没有任何问题或异常的时候,这个地方应该是有值的,HPA 是15秒钟做一次判断,所以,当15秒判断之后,获取第一次这个监控指标,当这个监控指标获取到了之后,才会开始判断当前 HPA 的一个弹性

  • status 其实就是状态集中的一个一个的步骤。如果当前这个状态, desired 这

个状态由2改为1的话,在 Events 会生成对状态机的这个转化事件。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
434 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
|
2月前
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
48 2
|
2月前
|
分布式计算 资源调度 数据可视化
Hadoop-06-Hadoop集群 历史服务器配置 超详细 执行任务记录 JobHistoryServer MapReduce执行记录 日志聚合结果可视化查看
Hadoop-06-Hadoop集群 历史服务器配置 超详细 执行任务记录 JobHistoryServer MapReduce执行记录 日志聚合结果可视化查看
42 1
|
2月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
39 1
|
3月前
|
Kubernetes API Docker
跟着iLogtail学习容器运行时与K8s下日志采集方案
iLogtail 作为开源可观测数据采集器,对 Kubernetes 环境下日志采集有着非常好的支持,本文跟随 iLogtail 的脚步,了解容器运行时与 K8s 下日志数据采集原理。
|
2月前
|
数据可视化
Tensorboard可视化学习笔记(一):如何可视化通过网页查看log日志
关于如何使用TensorBoard进行数据可视化的教程,包括TensorBoard的安装、配置环境变量、将数据写入TensorBoard、启动TensorBoard以及如何通过网页查看日志文件。
217 0
|
2月前
|
存储 分布式计算 NoSQL
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
大数据-136 - ClickHouse 集群 表引擎详解1 - 日志、Log、Memory、Merge
42 0
|
3月前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
315 0
|
11天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
41 1
|
2月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
下一篇
无影云桌面