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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
4月前
|
Kubernetes Devops 持续交付
DevOps实践:使用Docker和Kubernetes实现持续集成和部署网络安全的守护盾:加密技术与安全意识的重要性
【8月更文挑战第27天】本文将引导读者理解并应用DevOps的核心理念,通过Docker和Kubernetes的实战案例,深入探讨如何在现代软件开发中实现自动化的持续集成和部署。文章不仅提供理论知识,还结合真实示例,旨在帮助开发者提升效率,优化工作流程。
|
2月前
|
Kubernetes 持续交付 Docker
探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
【10月更文挑战第18天】探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
89 2
|
2月前
|
安全 Devops 网络安全
【DevOps】Docker 最佳实践指南(绝对干货)
Docker 是一种领先的容器化平台,可简化应用开发、部署和管理。本文档介绍 Docker 的最佳实践,涵盖安全性、网络、镜像、主机安全及资源限制等方面,帮助用户高效利用 Docker,确保应用的安全性和性能。
133 0
|
3月前
|
运维 监控 Devops
拥抱 DevOps 文化:实现持续交付与部署的最佳实践
在软件开发领域,DevOps 强调开发与运维团队的协作,通过自动化、持续集成与部署等实践缩短系统开发生命周期,提升软件质量。其核心原则包括自动化、协作、度量与共享责任。实施 DevOps 需要建立跨功能团队、采用版本控制、持续集成与部署、自动化测试及监控反馈。常用工具有 Jenkins、GitLab CI/CD、Ansible、Prometheus 和 ELK Stack 等。DevOps 通过文化与技术变革,加速软件交付并提高客户满意度。
|
4月前
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
88 1
|
4月前
|
Kubernetes 容器 Perl
【Azure K8S】AKS升级 Kubernetes version 失败问题的分析与解决
【Azure K8S】AKS升级 Kubernetes version 失败问题的分析与解决
|
3月前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
328 0
|
4月前
|
Prometheus 监控 安全
|
4月前
|
Prometheus 监控 Kubernetes
在k8S中,状态码监控是怎么做的?
在k8S中,状态码监控是怎么做的?
|
4月前
|
Prometheus 监控 Kubernetes
在k8S中,blackbox主要是监控什么的?
在k8S中,blackbox主要是监控什么的?

相关产品

  • 容器服务Kubernetes版