概述下面几个问题,相信广大 K8s 用户在日常集群运维中都曾经遇到过:
以前,排查这些问题,对客户来说并不容易。生产环境中的 Kubernetes 集群通常是一个相当复杂的系统,底层是各种异构的主机、网络、存储等云基础设施,上层承载着大量的应用负载,中间运行着各种原生(例如:Scheduler、Kubelet)和第三方(例如:各种 Operator)的组件,负责对基础设施和应用进行管理和调度; 此外不同角色的人员频繁地在集群上进行部署应用、添加节点等各种操作。在集群运行的过程中,为了对集群中发生的状况能够尽可能的了如指掌,我们通常会从多个维度对集群进行观测。 日志,作为实现软件可观测性的三大支柱之一,为了解系统运行状况,排查系统故障提供了关键的线索,在运维管理中起着至关重要的作用。Kubernetes 提供了两种原生的日志形式——审计(Audit)和事件(Event),它们分别记录了对于集群资源的访问以及集群中发生的事件信息。从腾讯云容器团队长期运维 K8s 集群的经验来看,审计和事件并不是可有可无的东西,善用它们可以极大的提高集群的可观测性,为运维带来巨大的便利。下面让我们先来简单认识一下它们。 什么是 Kubernetes 审计?Kubernetes 审计日志是 Kube-apiserver 产生的可配置策略的结构化日志,记录了对 Apiserver 的访问事件。审计日志提供 Metrics 之外的另一种集群观测维度,通过查看、分析审计日志,可以追溯对集群状态的变更;了解集群的运行状况;排查异常;发现集群潜在的安全、性能风险等等。 审计来源在 Kubernetes 中,所有对集群状态的查询和修改都是通过向 Apiserver 发送请求,对 Apiserver 的请求来源可以分为4类
审计中都记录了些什么?每一条审计日志都是一个 JSON 格式的结构化记录,包括元数据(metadata)、请求内容(requestObject)和响应内容(responseObject)3个部分。其中元数据一定会存在,请求和响应内容是否存在取决于审计级别。元数据包含了请求的上下文信息,例如谁发起的请求,从哪里发起的,访问的 URI 等等; 审计有什么用?Apiserver 做为 Kubernetes 集群唯一的资源查询、变更入口,审计日志可以说记录了所有对于集群访问的流水, 通过它可以从宏观和微观了解整个集群的运行状况,比如:
什么是Kubernetes事件?事件(Event)是 Kubernetes 中众多资源对象中的一员,通常用来记录集群内发生的状态变更,大到集群节点异常,小到 Pod 启动、调度成功等等。我们常用的 事件中记录了什么?
事件有什么用?集群内已经翻江倒海,集群外却风平浪静,这可能是我们日常集群运维中常常遇到的情况,集群内的状况如果无法透过事件来感知,很可能会错过最佳的问题处理时间,待问题扩大,影响到业务时才发现往往已经为时已晚;除了早早发现问题,Event 也是排查问题的最佳帮手,由于 Event 记录了全面的集群状态变更信息,所以大部分的集群问题都可通过 Event 来排查。总结一下 Event 在集群中扮演两大重要角色:
TKE 如何发掘审计/事件的价值传统的通过输入查询语句检索日志的方式来使用审计和事件,固然可以提供很高的灵活性,但也有着较高的使用门槛,不仅要求使用者对于日志的数据结构非常了解,还要熟悉 Lucene、SQL 语法。这往往导致使用效率偏低,也无法充分发掘数据的价值。 腾讯云容器服务 TKE 联合腾讯云日志服务CLS,打造出针对 Kubernetes 审计/事件采集、存储、检索、分析的一站式产品级服务, 不仅提供了一键开启/关闭功能,免去一切繁琐的配置;而且容器团队还从长期运维海量集群的经验中,总结出对于 Kubernetes 审计/事件的最佳使用实践,通过可视化的图表,以多个维度对审计日志和集群事件进行呈现,使用者只需了解 K8s 的基本概念,就能很“直觉”地在 TKE 控制台上进行各种检索和分析操作,足以涵盖绝大多数常见集群运维场景, 让无论是发现问题还是定位问题都事半功倍,提升运维效率,真正将审计和事件数据的价值最大化 。
如何使用 TKE 审计/事件服务去排查问题?场景示例:下面我们看几个现实中的典型场景 示例1: 排查一个工作负载消失的问题在 查询结果如下图所示: 由图可见,是 示例2: 排查一个节点被封锁的问题在 查询结果如下图所示: 由图可见,是 示例3: 排查 Apiserver 响应变慢的问题在
由图可见,用户 码大多数为 403,结合业务日志可知,由于 RBAC 鉴权问题导致
示例4:排查节点异常的问题一台 Node 节点出现异常,在 查询结果显示,有一条 进一步查看异常事件趋势
可以发现, 示例5: 查找触发节点扩容的原因开启了节点池「弹性伸缩」的集群,CA(cluster-autoscler)组件会根据负载状况自动对集群中节点数量进行增减。如果集群中的节点发生了自动扩(缩)容,用户可通过事件检索对整个扩(缩)容过程进行回溯。 在
在左侧隐藏字段中选择 通过上图的事件流水,可以看到节点扩容操作在 总结本文介绍了在 Kubernetes 中两个经常被忽略的元素--「审计日志」和「集群事件」,并讨论了它们在赋能集群运维和提升系统可观测性方面的价值。腾讯云容器团队在长期运维海量 Kubernetes 集群经验总结的基础上,在 TKE 中发布了基于审计和事件的产品服务,帮助用户能够快速高效解决日常集群运维中遇到的问题,将用户从繁杂的集群问题中解放出来。 最后我们从实战角度出发,通过几个经典问题来演示通过 TKE 审计/事件服务来定位排查问题。由于篇幅有限,我们的演示只是产品功能的冰山一角,更多的功能需要用户去探索使用,最后欢迎用户体验 。(腾讯云日志服务 CLS 对于 TKE 产生的所有审计/事件数据提供免费服务至 2021年6月1日。) |
|