DevOps训练营-Kubernetes监控与分析最佳实践

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 近年来,Kubernetes作为众多公司云原生改造的首选容器化编排平台,越来越多的开发和运维工作都围绕Kubernetes展开,保证Kubernetes的稳定性和可用性是最基础的需求,而这其中最核心的就是如何有效地监控Kubernetes集群,保证整个集群的一个良好的可观察性。本期将为大家介绍如何对Kubernetes开展全方位的监控与分析。

近年来,Kubernetes作为众多公司云原生改造的首选容器化编排平台,越来越多的开发和运维工作都围绕Kubernetes展开,保证Kubernetes的稳定性和可用性是最基础的需求,而这其中最核心的就是如何有效地监控Kubernetes集群,保证整个集群的一个良好的可观察性。本期将为大家介绍如何对Kubernetes开展全方位的监控与分析。

监控整体架构

image.png

Kubernetes的监控整体上可以分为4层,自底向上包括基础设施监控、ServiceMesh监控、接入层监控、业务监控,其中越底层的监控覆盖面越广,可能也会包括一些上层的监控,比如从K8s的事件中也可以监控业务容器的一些状态,做到一定程度的业务监控;而越往上会更加贴近业务,相关的指标也更能反映出业务是否正常,比如接入层的Ingress日志,直接就能看到当前服务的成功率、延迟等关键指标,而业务日志的监控则会更加具有针对性,所以监控的价值也越高。


从实施角度上来讲,一般会自底向上逐步实施,而且底层的监控相对固定,SLS都提供了一些标准的监控模板可以直接使用,部署复杂度会低;而上层的业务监控一般需要依赖业务方的日志/监控数据输出,而且不同公司不同技术栈的数据格式都不一样,需要实施者做很多定制化工作。

数据中台实施方式

image.png


上述的监控架构设计非常多的数据源和数据格式,包括硬件、操作系统、Kubernetes系统组件、ServiceMesh、Ingress、业务Pod等,数据格式包括日志(Logging)、监控指标(Metrics)、链路追踪(Tracing)数据。需要借助于阿里云SLS才能完整支持一整套监控体系。SLS提供了支持日志(Logging)、监控指标(Metrics)、链路追踪(Tracing)数据的存储和查询引擎,并支持各种分析、可视化、告警方式,而且所有功能都提供了API接口调用,可定制程度极高。基于SLS提供的DevOps数据中台,可快速构建出一套适用于自己公司的Kubernetes监控方案。

目前SLS对于Kubernetes的基础监控、ServiceMesh、接入层都提供了监控模板,可以借助模板快速部署一套监控方案。下面我们将为大家介绍如何部署这些监控模板。

基础指标监控-Prometheus

众所周知,Kubernetes是CNCF的第一个毕业项目,也是最火的项目,而Prometheus则是CNCF下第二个毕业的项目,也是CNCF除Kubernetes外最火爆的项目。可以毫不夸张的说,Prometheus已经成为了云原生领域监控的事实标准,如果说开启云原生的第一步是拥有一个Kubernetes环境,那Prometheus就是云原生下监控的第一步。关于SLS支持Prometheus的相关功能介绍可以参考之前的文章:《高性能、高可用、免运维-云原生Prometheus方案与实践》。
image.png



Prometheus在Kubernetes上部署非常简单,只需要部署一个Prometheus Operator即可完成,目前阿里云Kubernetes的应用市场已经内置了Prometheus Operator,可以直接选择安装,具体操作方式可以参考:《使用Prometheus采集Kubernetes监控数据》。整体步骤分为:

  1. 创建一个Namespace,名为monitoring
  2. 在monitoring下创建一个保密词典,填写上申请好的只具备SLS权限的AK
  3. 在容器服务Kubernetes应用市场安装PrometheusOperator,修改其中的RemoteWrite部分参数
  4. 配置Grafana连接SLS进行可视化
  5. 基于Grafana或SLS配置监控告警

image.png

基础事件监控-Kubernetes事件中心


为了让用户对Kubernetes的内部状态有更好的了解,Kubernetes引入了事件(Events)系统,在Kubernetes的资源产生变化的时候,会以事件的形式记录在APIServer中,并可以通过API或者 kubectl 命令去查看件。

Kubernetes事件包含了发生的时间、组件、等级(Normal、Warning、Error)、类型、详细信息,通过事件我们能够知道应用的部署、调度、运行、停止等整个生命周期,也能通过事件去了解系统中正在发生的一些异常。在Kubernetes各个组件的源码中都会定义该组件可能会触发的事件类型,例如kubelet的事件源码

为了让大家更便捷的使用Kubernetes事件功能,阿里云容器服务Kubernetes和日志服务SLS合作推出了Kubernetes事件中心,支持将Kubernetes中的事件实时采集到日志服务中,把阿里工程师在多年Kubernetes运维中积累的事件监控、告警指标提炼到事件中心,开箱即可获得这些积累的运维经验,相关文章可以参考《Kubernetes可观察性:全方位事件监控》。

事件中心的部署方式非常简单,默认在阿里云Kubernetes开通的时候就已经勾选,开通后就会自动创建出事件中心;如果没有勾选安装事件中心,可以在阿里云Kubernetes应用市场安装ack-node-problem-detector,具体可参考《创建并使用Kubernetes事件中心》,安装后会自动开启事件中心。

image.png

接入层监控-Ingress访问日志监控与分析

在K8s中,组件通过Service对外暴露服务,常见的包括NodePort、LoadBalancer、Ingress等。其中Ingress主要提供HTTP层(7层)路由功能,相比TCP(4层)的负载均衡具备非常多的优势(路由规则更加灵活、支持金丝雀、蓝绿、A/B Test发布模式、SSL支持、日志、监控、支持自定义扩展等),是目前K8s中HTTP/HTTPS服务的主流暴露方式。

K8s中Ingress只是一种API资源的声明,具体的实现需要安装对应的Ingress Controller,由Ingress Controller接管Ingress定义,将流量转发到对应的Service。目前Ingress Controller的实现有非常多种(具体可以参考Ingress Controller官方文档),比较流行的有Nginx、Traefik、Istio、Kong等,在国内接受度最高的是Nginx Ingress Controller。

Ingress日志的分析与监控方案需要搭建多个模块(采集Agent、数据队列、索引、可视化、告警灯),工作量极大。为简化广大用户对于Ingress日志分析与监控的门槛,阿里云容器服务和日志服务将Ingress日志打通(官方文档),只需要应用一个yaml资源即可完成日志采集、分析、可视化等一整套Ingress日志方案的部署。

整个Ingress的监控方案部署极其简单,默认在阿里云Kubernetes开通的时候就已经支持,开通后就会自动创建出Ingress方案;如果没有勾选安装,只需按照文档应用一个yaml即可完成。Ingress监控提供了秒级的各类维度监控信息,包括PV、UV、地域分布、成功率、平均延迟、P99/P9999延迟等,此外还支持蓝绿版本对比,便于灰度发布时对比新老版本的关键指标。

image.png


ServiceMesh监控-Istio访问日志监控

image.png


现在越来越多的企业开始选择使用ServiceMesh,其中Istio已经逐渐成为主流。目前SLS已经支持和阿里云服务网格(ASM)直接对接,和Ingress方案类似,直接控制台勾选或手动部署yaml即可完成安装,详细使用过程可参考《使用日志服务采集数据平面的AccessLog》。
image.png

业务监控-自定义日志分析


image.png

Kubernetes下的业务监控最佳方式还是基于日志的分析与监控,日志采集在Kubernetes中相比传统的采集方式要复杂,需要考虑动态性、多目标、多日志格式等问题,主流的采集软件很难稳定工作。目前Kubernetes日志借助于SLS提供的Logtail可以实现非常稳定的采集,支持CRD的Operator扩展方式,使用起来非常便捷,只需要部署一个yaml即可定义采集的数据源和目标存储,并且支持stdout、文件、宿主机、Journal等各种方式。详细的功能优势以及特点可以参考《直击痛点,详解 K8s 日志采集最佳实践》。


在Kubernetes中最常见的是使用stdout和文件的采集方式,相关的采集都可以通过CRD的方式来实现,详情操作方式可参考:

  1. 安装Kubernetes日志采集组件
  2. Kubernetes CRD采集标准输出日志
  3. Kubernetes CRD采集文件日志


数据采集完毕后,SLS支持各类日志查看、分析、可视化以及监控方式,这里建议使用的功能如下:

  1. 问题排查时使用日志查询LiveTail上下文日志聚类等功能;
  2. 配置可视化报表用户业务指标展示;
  3. 使用关键词告警功能,对日志中出现的Error、Exception等进行实时告警;
  4. 使用业务指标告警功能,对业务流量、延迟、错误率等关键指标进行实时告警。

总结

Kubernetes提供了强大的功能,让我们服务发布、运维管理复杂性大大降低,但由于整体架构多了一个编排层,所以需要监控方案针对Kubernetes进行单独的配置,最佳的方式还是部署一整套自底向上的监控系统。借助于SLS提供的各类模板和功能,可以快速搭建出适应于自己业务场景的Kubernetes监控。


大家在使用SLS过程中,如有任何问题, 可提工单, 或在用户群中反馈(见下放钉钉二维码), 也欢迎关注我们的微信公众号, 会推送实用的使用技巧和最佳实践哦~


image.png

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
1月前
|
Prometheus 监控 Kubernetes
如何用 Prometheus Operator 监控 K8s 集群外服务?
如何用 Prometheus Operator 监控 K8s 集群外服务?
|
1月前
|
存储 Kubernetes 监控
Kubecost | Kubernetes 开支监控和管理 🤑🤑🤑
Kubecost | Kubernetes 开支监控和管理 🤑🤑🤑
|
3月前
|
Kubernetes 监控 容器
k8s学习-CKA真题-监控Pod日志
k8s学习-CKA真题-监控Pod日志
73 0
|
8天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群监控与日志管理实践
【2月更文挑战第29天】 在微服务架构日益普及的当下,Kubernetes 已成为容器编排的事实标准。然而,随着集群规模的扩大和业务复杂度的提升,有效的监控和日志管理变得至关重要。本文将探讨构建高效 Kubernetes 集群监控系统的策略,以及实施日志聚合和分析的最佳实践。通过引入如 Prometheus 和 Fluentd 等开源工具,我们旨在为运维专家提供一套完整的解决方案,以保障系统的稳定性和可靠性。
|
1月前
|
Prometheus 监控 Kubernetes
监控 Kubernetes 集群证书过期时间的三种方案
监控 Kubernetes 集群证书过期时间的三种方案
|
6天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理实践
【2月更文挑战第31天】 在微服务架构日益普及的今天,容器编排工具如Kubernetes已成为部署、管理和扩展容器化应用的关键平台。然而,随着集群规模的扩大和业务复杂性的增加,如何有效监控集群状态、及时响应系统异常,以及管理海量日志信息成为了运维人员面临的重要挑战。本文将深入探讨 Kubernetes 集群监控的最佳实践和日志管理的高效策略,旨在为运维团队提供一套系统的解决思路和操作指南。
11 0
|
8天前
|
Kubernetes Cloud Native Devops
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
云原生技术落地实现之二KubeSphere DevOps 系统在 Kubernetes 集群上实现springboot项目的自动部署和管理 CI/CD (2/2)
31 1
|
1月前
|
存储 Kubernetes 容灾
Velero 系列文章(五):基于 Velero 的 Kubernetes 集群备份容灾生产最佳实践
Velero 系列文章(五):基于 Velero 的 Kubernetes 集群备份容灾生产最佳实践
|
1月前
|
消息中间件 Kubernetes NoSQL
「译文」K8S 及 OpenShift 上应用程序的 Labels 和 Annotations 最佳实践
「译文」K8S 及 OpenShift 上应用程序的 Labels 和 Annotations 最佳实践
|
1月前
|
Kubernetes 监控 调度
「译文」Kubernetes 时代的监控(一)
「译文」Kubernetes 时代的监控(一)

相关产品

  • 容器服务Kubernetes版