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

简介: 快速学习第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 会生成对状态机的这个转化事件。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2天前
|
Kubernetes 微服务 容器
Aspire项目发布到远程k8s集群
Aspire项目发布到远程k8s集群
19 2
Aspire项目发布到远程k8s集群
|
3天前
|
运维 Kubernetes 调度
【kubernetes】关于k8s集群的污点、容忍、驱逐以及k8s集群故障排查思路
【kubernetes】关于k8s集群的污点、容忍、驱逐以及k8s集群故障排查思路
|
3天前
|
Kubernetes 微服务 容器
Aspire项目发布到win11本地k8s集群
Aspire项目发布到win11本地k8s集群
11 0
Aspire项目发布到win11本地k8s集群
|
4天前
|
运维 Prometheus 监控
Kubernetes 集群的监控与维护策略
【5月更文挑战第30天】 在微服务架构日益普及的背景下,容器编排工具如Kubernetes成为确保服务高效运行的关键。本文聚焦于Kubernetes集群的监控和维护,首先探讨了监控系统的重要性及其对集群健康的影响,随后详细介绍了一套综合监控策略,包括节点性能监控、应用服务质量跟踪以及日志管理等方面。此外,文章还提出了一系列实用的集群维护技巧和最佳实践,旨在帮助运维人员预防故障发生,快速定位问题,并确保集群长期稳定运行。
|
4天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理实践深入理解PHP的命名空间与自动加载机制
【5月更文挑战第30天】 在容器化和微服务架构日益普及的背景下,Kubernetes 已成为众多企业的首选容器编排工具。然而,随之而来的挑战是集群的监控与日志管理。本文将深入探讨 Kubernetes 集群监控的最佳实践,包括节点资源使用情况、Pods 健康状态以及网络流量分析等关键指标的监控方法。同时,我们也将讨论日志聚合、存储和查询策略,以确保快速定位问题并优化系统性能。文中将介绍常用的开源工具如 Prometheus 和 Fluentd,并分享如何结合这些工具构建高效、可靠的监控和日志管理系统。
|
17天前
|
关系型数据库 MySQL 数据库
mysql数据库bin-log日志管理
mysql数据库bin-log日志管理
|
17天前
|
存储 关系型数据库 数据库
关系型数据库文件方式存储LOG FILE(日志文件)
【5月更文挑战第11天】关系型数据库文件方式存储LOG FILE(日志文件)
78 1
|
18天前
|
运维 监控 安全
Java一分钟之-Log4j与日志记录的重要性
【5月更文挑战第16天】Log4j是Java常用的日志框架,用于灵活地记录程序状态和调试问题。通过设置日志级别和过滤器,可避免日志输出混乱。为防止日志文件过大,可配置滚动策略。关注日志安全性,如Log4j 2.x的CVE-2021-44228漏洞,及时更新至安全版本。合理使用日志能提升故障排查和系统监控效率。
75 0
|
19天前
|
C++
JNI Log 日志输出
JNI Log 日志输出
56 1
|
19天前
|
存储 运维 大数据
聊聊日志硬扫描,阿里 Log Scan 的设计与实践
泛日志(Log/Trace/Metric)是大数据的重要组成,伴随着每一年业务峰值的新脉冲,日志数据量在快速增长。同时,业务数字化运营、软件可观测性等浪潮又在对日志的存储、计算提出更高的要求。
267 6