排除Kubernetes故障,只需3步

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 排除Kubernetes故障,只需3步

目录

第一步:理解

第二步:管理

最后一个步:预防

一步都不能少


Kubernetes 生态系统充斥着各种工具,例如监控、可观察性、跟踪、日志记录等,但一般很难真正理解故障排除与这些工具有何联系。

当故障发生时,我们要掌握是从哪里发生,了解所面临的问题,解决眼前的问题,然后修复根本原因。随着系统规模的扩大,这一切会变得越来越复杂。

一名从事现代、复杂、分布式系统工作的软件工程师,会经常发现,每次出现问题或故障时,都需要了解引发问题的原因以及是谁造成的,但是,这并不是一件容易的事。更难的,是弄清楚幕后发生了什么,以及如何防止它再次发生。

一般,我们会这样思考:

  • 究竟发生了什么?
  • 哪些事情是相关的?
  • 什么与我们试图排除故障的特定症状相关?
  • 我们如何确定根本原因?
  • 最终,我们还要确保将来不再发生此问题或类似问题?

本文中,我们将之简化为3个步骤:

  • 理解
  • 管理
  • 预防

我将深入探讨如何实施好这三个步,以及它们如何帮助我们对Kubernetes 进行故障排除。我还将回顾哪些生态系统工具适合哪个步,以更好地掌握或使用那些工具。


第一步:理解

毫不奇怪,这是重要的一步。理解系统资源,通常使你能够了解发生了什么、出了什么问题以及我们接下来应该做什么。

为了尝试了解故障原因,开发人员将首先分析系统最近的修改以及可能导致此故障发生的更改。

当然,这说起来容易做起来难。在复杂的分布式系统,尤其是基于 Kubernetes 的系统中,这意味着大量使用 kubectl 来对部署日志、跟踪和指标进行故障排除,验证 pod 健康状况和资源上限,以及服务连接,以及其他常见的 pod 错误,检查 YAML 配置文件,验证第三方工具和集成等等。这可能是一行代码、一行配置的更改,触发了故障。

下图一张图,可以帮助我们在排除 K8s 系统进行故障时,缩小问题的范围。

图片来源: 有关 Kubernetes 部署故障排除的指南

接下来,我们将查看事件:系统中实际发生了什么 - 系统是否过载?是否丢失了数据?是否存在服务中断?这与系统的初始变化有何关系?

然后,我们查看一下我们创建的指标、仪表板和数据,以基于数据源对问题进行某种理解。是否不止一个系统表现相同?影响两个系统的服务之一是否存在依赖性?最后,我们能否从看似相似的先前事件中学到一些东西,让我们对我们现在正在经历的事情有所了解?

仅就某些情况而言,下面是你需要使用的一些工具的列表,以便对系统中发生的事情有一个基本的了解。

监控工具: Datadog、Dynatrace、Grafana Labs、New Relic

可观察性工具: Lightstep、Honeycomb

实时调试工具: OzCode、Rookout

日志工具: Splunk、LogDNA、Logz.io


第二步:管理

在当今的微服务架构中,很多时候相互依赖的服务由不同的团队管理。发生故障时,解决问题的关键之一是团队之间的沟通与协作。

根据潜在问题的类型,你可能想要采取的操作,包括像重启系统这样简单的操作,或者更'严厉'的措施,例如版本回滚或恢复最近的配置,直到更清楚地了解潜在问题。最终,你可能需要采取主动措施,如增加内存上限或机器数量的形式增加容量。但是,所有这些都不应该是你实时尝试和弄清楚的。今天有很多工具,从 Jenkins 到 ArgoCD,云提供商的专有工具,甚至更多的 kubectl 来采取这些行动和措施。

一旦更好地理解了潜在问题,补救就不应该是主要是反复试验的临时操作,或者存在于当前团队和实践中的记录。根据公司的技术堆栈和可能的根本原因,应使用定制的运行手册来管理任何给定的事件,并针对每种警报提供具体的任务和操作。

团队中的每一位工程师,无论是高级还是初级,都可以利用这一份友好的运行手册来实时排除故障。

此阶段的工具包将包括以下一些内容:

事件管理: PagerDuty,Kintaba

项目管理: Jira、Monday、Trello

CI/CD 管理: ArgoCD、Jenkins


最后一个步:预防

预防可能是最重要的步,以确保类似事件不再发生。防止类似问题的方法是根据每个事件创建定义明确的策略和规则。在“理解”阶段要采取哪些行动,我们如何最快速地识别问题并将问题上报给相关团队?

我们如何委派责任,确保团队之间无摩擦的沟通和协作?这包括手头任务和操作的完全透明度,以及进度的实时更新。每种警报和事件的任务的规范顺序是什么?

一旦我们弄清楚了上述所有内容,我们就可以开始考虑如何自动化和协调这些事件,并尽可能接近传说中的“自我修复”系统。

这一步的特点是通过不断将系统推向极限,从而创建更具弹性和适应变化的系统的工具。例如:

Chaos Engineering: Gremlin、Chaos Monkey、ChaosIQ

Auto Remediation: Shoreline、OpsGenie


一步都不能少

我们相信,通过以上三步的结合,可以将故障排除与监控、可观察性、跟踪等区别开来。然而,可能最重要的是深入到系统和流程中,以防止它们再次发生。

我们都见过这个表情包:

或者这个:

它们仍然被广泛使用并如此受欢迎的原因是,即使我们在“DevOps 工具”方面取得了巨大进步后,对于实时的问题或故障,很多时候依然捉襟见肘。

因此,我建议将应用程序和运维数据集中到一个平台中,使团队成员能够真正了解他们的系统,并最终了解对复杂系统出现的警报如何采取行动。当我们将最好的开发人员和运维人员结合在一起时,我们可以通过更好地合作来更快地解决故障。


译文链接:


The Three Pillars of Kubernetes Troubleshooting - DZone Cloud


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
6月前
|
存储 Kubernetes API
K8S上生产环境后,90%都会遇到这个故障
K8S上生产环境后,90%都会遇到这个故障
294 0
|
6月前
|
Kubernetes 应用服务中间件 nginx
提升K8S故障排除效率:详解Pod内抓包的高效策略!
提升K8S故障排除效率:详解Pod内抓包的高效策略!
297 0
|
Kubernetes 监控 Java
【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
797 0
【JVM故障问题排查心得】「内存诊断系列」Docker容器经常被kill掉,k8s中该节点的pod也被驱赶,怎么分析?
|
3月前
|
Kubernetes 调度 Perl
在K8S中,节点故障驱逐pod过程时间怎么定义?
在K8S中,节点故障驱逐pod过程时间怎么定义?
|
1月前
|
Kubernetes Docker Perl
k8s常见故障--yaml文件检查没有问题 pod起不来(一直处于创建中)
k8s常见故障--yaml文件检查没有问题 pod起不来(一直处于创建中)
|
3月前
|
运维 Kubernetes Perl
在K8S中,节点故障pod驱逐pod过程,时间怎么定义的?
在K8S中,节点故障pod驱逐pod过程,时间怎么定义的?
|
3月前
|
Kubernetes 监控 Shell
掌握Kubernetes故障排除技巧:kubectl命令的基本指南
以上是使用 `kubectl` 进行故障排除的一些基本指南。熟悉这些命令能够帮助您快速定位和解决在Kubernetes集群中遇到的问题。在实际使用中,您可能还需要结合其他工具和资源,如官方文档、社区论坛以及第三方监控和日志服务来进行更深入的故障诊断和排除。
95 0
|
5月前
|
Kubernetes 网络协议 Docker
k8s 开船记-故障公告:自建 k8s 集群在阿里云上大翻船
k8s 开船记-故障公告:自建 k8s 集群在阿里云上大翻船
|
6月前
|
Kubernetes 监控 容器
K8S故障注入混沌工程开源平台ChaosMesh
总之,ChaosMesh作为一个Kubernetes混沌工程平台,为用户提供了测试和验证Kubernetes集群的可靠性的工具和框架,有助于提高系统的稳定性和性能。
235 0
|
Kubernetes jenkins 测试技术
【Kubernetes的DevOps自动化,Jenkins上的Pipeline实现自动化构建、测试、部署、发布以及Bookinginfo实例的部署灰度发布故障注入流量】
【Kubernetes的DevOps自动化,Jenkins上的Pipeline实现自动化构建、测试、部署、发布以及Bookinginfo实例的部署灰度发布故障注入流量】
260 1