## 视频
<video src="https://dev-media.amazoncloud.cn/30-LibaiGenerate/31-LiBaiRebrandingVideo/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey-LBrebrandingWCaptionCN.mp4" class="bytemdVideo" controls="controls"></video>
## 导读
调试基于云的容器化分布式服务就像一场寻宝游戏。如果没有适当的调试和可观察性工具,几乎不可能看到大规模生产部署中发生了什么。本讲座将为负责确保应用程序正常服务的开发人员和操作人员演示多场景故障排除体验。除了涵盖在生产中排除故障的框架外,它还将深入探讨 Kubernetes 架构以及某些错误如何可能不按预期出现。了解 kubectl、[Amazon CloudWatch](https://aws.amazon.com/cn/cloudwatch/?trk=cndc-detail) 和 OpenTelemetry 等其他开源服务如何提高您的故障排除能力。
## 演讲精华
<font color = "grey">以下是小编为您整理的本次演讲的精华,共800字,阅读时间大约是4分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。</font>
演讲者在开场白中提到,采用诸如Kubernetes之类的新技术往往伴随着学习曲线。正如在现实生活中一样,我们不能仅仅通过按下一个按钮就期望达到100%的完美。Kubernetes集群由超过1000个组件组成,其基础设施非常复杂,不仅仅是创建一个集群并部署应用程序那么简单。他们强调,充分了解这项技术的复杂性至关重要,包括Kubernetes的架构及其控制面、数据面以及数千个节点如何工作、功能和故障的不同方式。当管理和排查横跨多个地区和可用性区域的大型生产集群问题时,特别是在各个组件中不可避免地会出现故障的情况下,这种知识变得尤为重要。演讲者向观众询问了在Kubernetes中最难排查的问题是什么。大多数人(超过50%)表示是configmaps和secrets,它们可以包含数百个设置,其次是网络问题,约占回应的约25%。这与演示部分涵盖的问题相一致。演讲者解释说,Kubernetes是一个抽象基础设施复杂性的应用平台,提供了一个“盒子里的虚拟数据中心”,而不受物理硬件的限制。随着应用程序全球范围内增长到数百万用户,潜在的失败场景也会呈指数级增加。演讲者给出了一些大型企业使用Kubernetes运行数千个微服务和处理大规模规模的例子。Kubernetes内的故障可能会影响在平台上运行的应用程序,以及业务运营和收入。演讲者概述了一个“排查循环”作为思维模式:观察、定位、决策、行动。首先观察正在发生的情况,分析问题,决定应对措施,采取行动进行修复,然后重复这个过程。这个迭代的四个步骤的过程可以减少失败的辐射范围,逐步朝着解决方案前进。他们还提到了五个常见的Kubernetes故障领域基石:1. 清单错误,如YAML/JSON定义文件用于配置资源的错误。一个清单可以包含数十个资源定义。2. 网络复杂性,如CNI插件、IP寻址、配置错误等。网络问题是大约40%的用户经常报告的问题痛点。Kubernetes必须协调成千上万个容器跨越成百个pod的网络连接。
3. Kubernetes组件的配置错误可能存在数百个标志和设置。这可能导致与数十个存储系统和数千个pod相关的问题。
4. 存储驱动程序、卷权限等问题可能会影响到数千个pod。
5. DNS问题的诊断可能复杂且困难,涉及到数千个service和pod DNS记录。利用kubectl等工具以及使用stern进行日志分析在解决问题时非常有用。例如,`kubectl get`、`describe`、`logs`等命令可以帮助我们了解数十或数百个资源的问题。常见的错误消息,如ImagePullBackOff和CrashLoopBackOff,提供了有关特定问题的线索。
缓解措施包括使用Vertical Pod Autoscaler (VPA)来确定资源需求,调整每个节点的最大pod数量以防止IP地址耗尽,为有状态的负载工作安装所需的存储插件,并检查访问存储卷的IAM权限。
在演示过程中,演讲者遇到了部署一个简单的Python应用程序的各种问题:
- 在一个YAML清单中缺失服务帐户导致了部署失败。干燥运行标记可以发现此清单问题。
- 由于清单中的1个容器镜像标签命名错误,发生了拉取错误。
- 应用程序因访问错误的DynamoDB表名而崩溃。在修复表名之后,由于缺少授予pod正确IAM角色的注解,pod仍然缺乏访问DynamoDB的权限,导致崩溃。
- 应用程序因超过内存限制而崩溃。演讲者通过将清单中的资源增加4倍来解决这个问题。
- 水平Pod自动缩放器由于应用程序因内存问题而崩溃而无法扩大pod。
演示展示了像清单错误、网络问题、配置问题、存储和IAM权限挑战等常见现实世界情况,这些都可能发生在数千个Kubernetes资源上。
总的来说,演讲者强调了深入理解Kubernetes的概念和组件对于解决复杂生产环境中的问题至关重要。在管理具有数千个移动部件的大型集群时,对控制平面、数据平面、网络、存储、工作负载和基础设施的可见性至关重要。通过观察、分析、决策和行动的迭代方法,可以有计划地解决问题,防止问题恶化。他们建议参加一些关于Kubernetes和可观察性的re:Invent会议以获取更多学习。
这次会议为与会者提供了实用的Kubernetes部署故障排除技巧。通过概述常见的故障点和缓解策略,演讲者使观众能够更有效地大规模运营生产中的Kubernetes集群。主要收获是,花时间充分理解Kubernetes的基本原理,以便在管理大型复杂集群时最大限度地减少停机时间和停机时间。
**下面是一些演讲现场的精彩瞬间:**
一位来自迪拜的资深开发者倡导者和另一位来自丹麦的解决方案架构师,在亚马逊云科技re:Invent上分享了他们的见解和经验。
![](https://d1trpeugzwbig5.cloudfront.net/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey/images/rebranded/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey_0.png)
Kubernetes已成为部署各种应用程序的理想平台,但我们也必须面对分布式系统的复杂性和故障可能的次生影响,因此我们需要采取类似于特权访问控制的防护措施。
![](https://d1trpeugzwbig5.cloudfront.net/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey/images/rebranded/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey_1.png)
他们列举了在Kubernetes中可能遇到的五个常见问题:清单错误、网络复杂性、配置错误、控制平面配置和DNS问题。
![](https://d1trpeugzwbig5.cloudfront.net/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey/images/rebranded/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey_2.png)
演讲者们详细解释了Kubectl如何与Kubernetes集群进行交互,通过向API服务器提交API请求并与诸如Kubelet之类的组件沟通,从而将指标和统计信息返回给控制平面。
![](https://d1trpeugzwbig5.cloudfront.net/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey/images/rebranded/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey_3.png)
他们还强调了Helm在Kubernetes内部的广泛应用,因为它是安装和运行应用程序的通用方法,能够将清单打包在一起以便于部署和回滚。
![](https://d1trpeugzwbig5.cloudfront.net/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey/images/rebranded/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey_4.png)
最后,演讲者们谈到了Kubernetes常见的网络问题,例如IP地址耗尽以及在遇到CrashLoopBackOff等神秘错误消息时的调试挑战。
![](https://d1trpeugzwbig5.cloudfront.net/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey/images/rebranded/BOA205-My_pods_aren_t_responding__A_Kubernetes_troubleshooting_journey_5.png)
## 总结
在Kubernetes上进行故障排除是一项复杂的任务,可能会遇到各种潜在问题,例如清单错误、网络问题、配置错误等。为了优化故障排除过程,建议采用诸如Dry Run等技术,并利用验证工具如Kubeval。网络问题的根源往往在于CNI配置错误或IP地址不足。解决CrashLoopBackOff问题通常需要仔细分析日志和事件,检查相关配置、依赖关系和探针等方面。镜像拉取问题通常与注册表权限有关,可以通过监控资源使用情况、增加节点IP以及安装所需组件(如负载均衡器)等方法来解决。此外,还需要关注Pod调度方面的陷阱,借助垂直Pod自动扩展、Stern和K9s等工具实现优化。为了提高系统的可观察性,应充分利用指标、日志和跟踪功能。在进行故障排除时,要遵循观察、定位、决策和行动的步骤,不断积累Kubernetes架构知识,并为开发人员提供复杂性抽象支持。尽管失败在所难免,但仍需做好应对准备,并采取有计划的策略来降低影响范围。
## 演讲原文
## 想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站!
[2023亚马逊云科技re:Invent全球大会 - 官方网站](https://webinar.amazoncloud.cn/reInvent2023/?s=8739&smid=19458 "2023亚马逊云科技re:Invent全球大会 - 官方网站")
[点击此处](https://aws.amazon.com/cn/new/?trk=6dd7cc20-6afa-4abf-9359-2d6976ff9600&trk=cndc-detail "点击此处"),一键获取亚马逊云科技全球最新产品/服务资讯!
[点击此处](https://www.amazonaws.cn/new/?trk=2ab098aa-0793-48b1-85e6-a9d261bd8cd4&trk=cndc-detail "点击此处"),一键获取亚马逊云科技中国区最新产品/服务资讯!
## 即刻注册亚马逊云科技账户,开启云端之旅!
[【免费】亚马逊云科技“100 余种核心云服务产品免费试用”](https://aws.amazon.com/cn/campaigns/freecenter/?trk=f079813d-3a13-4a50-b67b-e31d930f36a4&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技“100 余种核心云服务产品免费试用“")
[【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”](https://www.amazonaws.cn/campaign/CloudService/?trk=2cdb6245-f491-42bc-b931-c1693fe92be1&sc_channel=el&trk=cndc-detail "【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用“")