如何像专业人士一样调试 Kubernetes 应用程序错误(一)

news2025/1/9 4:38:00

在当今迅速发展的技术景观中,从单体架构迁移到微服务架构正变得越来越普遍。然而,对于那些在这个领域经验较少的人来说,适应这些新资源可能会带来重大的挑战。

无论您是开发团队、DevOps、基础设施还是其他技术团队的一部分,本文都将为您提供关于如何优化您的调试过程的有价值的见解。

您将了解到我个人使用的工具和策略,这些都是为了节省时间并提高调试微服务时的效率。

继续阅读以发现关于如何像专家一样调试微服务的专家建议和技巧!

【squids.cn】 全网zui低价RDS,免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等


调试Kubernetes中的错误的关键是对应用程序有完美的理解。这不仅仅是知道其他应用程序之间存在依赖关系,或者需要暴露某个端口,或者需要连接到同一个Kubernetes集群中的另一个应用程序。

要真正成功地调试Kubernetes错误,关键是要完全沉浸在开发者的世界中,并深入了解这些应用程序是如何工作的,以及它们为了正常运行需要什么。这样,您将更有能力处理可能出现的任何错误,并确保您的应用程序顺利高效地运行。

因此,请花时间充分了解您的应用程序及其依赖关系,您将大大提高成为Kubernetes调试专家的速度!

本文主要关注的是当您的应用程序已经在Kubernetes中并且遇到问题时该怎么做,而不是应用程序本身存在错误或外部因素阻碍它时该怎么做。我们还将介绍一些常见的错误情境。


在调试方面,我有两种方法,取决于应用的关键性和熟悉程度:自上而下和自下而上。

自上而下的方法

当我们熟悉该应用,并确信问题出在Kubernetes方面时,我们会使用这种方法,而紧急呼叫和解决问题是优先考虑的。

我们首先要查看入口。

图片

从上图中我们可以看到,用户试图通过一个名为“testing.jjotah.com”的域名连接到Kubernetes的入口。通常,如果出现错误,是因为用户无法连接到应用程序,或者他们遇到了一些应用程序错误。从图中可以看出,当发生错误时,用户尝试与入口建立连接,这可能是或可能不是问题所在。

我将与您分享一些对我非常有效的命令。

  • nc → 一个用于在两个计算机网络之间读取和写入数据的命令行工具 

  • curl → 一个命令行工具,可以通过终端在设备和服务器之间交换数据 

  • kubectl → 一个命令行工具,用于使用Kubernetes API与Kubernetes集群的控制平面通信。(别名k) 

在这种情况下,我们尝试使用nc命令检查端口是否开放。

nc -v test.jjotah.com 443

在调试与端口域验证相关的问题时,考虑所有涉及的因素是很重要的。在这种情况下,当出现“未知的名称或服务”错误时,我建议按照以下步骤操作:

1.在您的域名提供商中验证DNS设置。对于这个场景,我们需要确认域名“test.jjotah.com”指向了ingress控制器创建的负载均衡器。为了检查这一点,我们可以使用“dig”命令,并确认它指向了我们的kind集群中使用MetalLB创建的负载均衡器的IP,如图所示。

在我的情况下,我没有创建DNS,所以在创建DNS后,我将DNS名称指向了我的负载均衡器IP地址。

dig test.jjotah.com | grep test.jjotah.com

2.确保集群级别的外部网络连接已正确配置。这意味着需要审查可能影响客户端机器的DNS的任何安全设置或其他因素,特别是如果问题只影响一个人。通过仔细检查所有这些因素,我们可以有效地调试这个问题,并尽快使我们的应用程序重新运行。

INGRESS部分

当我们已经创建了DNS,我们可以再次测试到“443端口”的连接。

图片

现在这个问题是“无法到达主机”,所以我建议检查:

  1. 用户和ingress之间是否有东西,如防火墙、CDN或在集群外工作的东西

  2. Ingress定义

kubectl get ing

这里我们找到了第一个问题:我们正在做检查,看看“443端口”是否开启,我们是否可以访问“80端口”,所以我们必须尝试“80端口”。

如果检查“80端口”你还是遇到同样的问题,也许你应该从自下而上的方法开始。

首先检查容器。我们知道,在Kubernetes中,最小的资源是包含容器的pods。因此,我们需要检查pod是否正确运行。假设你正在你的应用程序所在的命名空间工作,我们可以使用以下命令检查pod的状态:

kubectl get ing

图片

在这种情况下,应用程序重启了三次,最后一次重启是六分钟前。因此,我们需要确定问题的根本原因。为此,执行以下命令,用你的应用程序pod的名字替换POD-NAME。

kubectl logs POD-NAME
kubectl describe pod POD-NAME
kubectl get events

检查是否有任何错误,如果没有,你可以切换到kube-system命名空间,检查主要组件,在以下pods上执行相同的命令。

  • ETCD

  • Apiserver

  • Controller-Manager

  • Scheduler

图片

如果问题仍然存在,你可能需要连接到容器来检查应用程序。尽管以下命令已被弃用,但它仍然可以用来连接到容器:

kubectl exec -it POD-NAME bash

图片

在容器内部,我们需要检查我们的应用程序是否正在运行(在我的情况下,我检查了“nginx”是否正在运行并公开了正确的端口)。我们可以在localhost上使用curl命令来验证应用程序在容器级别是否正常工作。

curl localhost

图片

但是,有些容器可能没有安装像curl/nc/telnet这样的命令或执行它们所需的权限。这些容器被称为无发行版的。在这种情况下,最好在我们的应用程序定义中创建一个Sidecar,以安装调试所需的所有内容。

如果我们只有一个带有“nginx”的pod,我们应该将它转换为部署并添加一个sidecar来调试它。为此,我们可以删除“nginx”pod并创建一个部署定义。

kubectl delete pod nginx

在下一部分,我们将继续学习如何像专家一样调试。

作者:JJotah

更多技术干货请关注公众号 “云原生数据库”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1002881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

万博智云加入光合组织,携手为信创发展贡献力量

日前,万博智云信息科技(上海)有限公司(以下简称“万博智云”)正式加入海光产业生态合作组织(以下简称“光合组织”),并由海光产业生态合作组织颁发“海光产业生态合作组织成员单位证…

成都优优聚为什么值得信任?

成都优优聚能信任作为一家专业的电商服务公司,拥有丰富的经验和专业的团队,能够为商家提供全方位的美团代运营服务。 美团外卖作为国内领先的外卖平台,具有庞大的用户群体和丰富的商家资源。然而,美团代运营对于很多刚开始接触美团…

一文读懂高速电机主轴的技术特性及应用

在现代化的加工制造业中,高速电机主轴是不可或缺的重要设备,它的质量和性能直接影响加工效率和产品质量。本文将介绍高速电机主轴的技术特性及应用,更好地了解这一重要设备。 一、高速电机主轴的技术特性 1.高稳定性 高速电机主轴采用特殊…

长胜证券:融券打新虽失宠 券源分配仍需透明

近期,关于战略投资者出借限售股作为融券券源的准则备受商场热议。不少投资者担心,跟着新股的大都券源被量化私募掌握,量化私募融券打新的战略有或许成为新股上市首日上涨后回身跌跌不休的首要原因。 券源分配是否有失公允?融券打…

高精度(加减乘除)

高精度算法出现的原因 当参与运算的数的范围大大的超出了标准数据类型,如int(-2147483648 ~ 2147483647)或者long long的范围,就需要使用高精度算法来进行数的运算。高精度运算的特点是代码长度比较长,本质是对数学运算…

使用Python编写高效程序

在当今竞争激烈的互联网时代,搜索引擎优化(SEO)成为了各类网站提升曝光度和流量的关键策略。而要在SEO领域中脱颖而出,掌握高效的网络抓取程序编写技巧是至关重要的。本文将分享一些宝贵的知识和技巧,帮助你使用Python…

2023年9月制造业NPDP产品经理国际认证报名来这错不了

产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是…

【ES6知识】简介、语法变化、解构赋值

文章目录 一、概述1.1 ECMAScript 简介1.2 ECMAScript 背景1.3 ECMAScript 的历史1.4 ES6 的目标与愿景1.5 学习路线图1.6 环境搭建 二、语法变化2.1 let 与 const2.2 解构赋值2.3 Symbol 一、概述 1.1 ECMAScript 简介 ES6, 全称 ECMAScript 6.0 ,是 …

高性能MySQL实战(二):索引 | 京东物流技术团队

我们在上篇 高性能MySQL实战(一):表结构 中已经建立好了表结构,这篇我们则是针对已有的表结构和搜索条件为表创建索引。 1. 根据搜索条件创建索引 我们还是先将表结构的初始化 SQL 拿过来: CREATE TABLE service_lo…

成功解决怎么使用Arthas定位CPU突然飙高的问题

1.Arthas的下载地址 https://alibaba.github.io/arthas/arthas-boot.jar 2.启动Arthas(提前下载放到环境上) java -jar arthas-boot.jar 3.dashboard 命令查看线程,CPU情况 可以看到发现确实有几个线程CPU占用过高 4.thread命令查看最繁…

K8S基础概念

1、Node Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。Node上运行着Kubernetes的Kubelet、kube-proxy服务进程,这些服务进程负责Pod的创建、启动、监控、重启、销毁、以及实现软件模式的负载均…

边缘计算技术

边缘计算是指在靠近数据源头的网络边缘侧,融合网络、计算、存储、应用核心能力的分布式开放平台,就近提供边缘智能服务,满足行业数字化在敏捷连接、实时业务、数据优化、应用智能、安全与隐私保护等方面的关键需求。它可以作为连接物理和数字…

count(*) 和 count(1) 有什么区别?哪个性能最好?

哪种 count 性能最好? count() 是什么? count() 是一个聚合函数,函数的参数不仅可以是字段名,也可以是其他任意表达式,该函数的作用是统计符合查询条件的记录中,函数指定的参数不为 NULL 的记录由多少条。…

淘宝api:本地图片上传至淘宝 获取url(联合拍立淘接口)

upload_img-上传图片到淘宝 请求参数 请求参数:imgcodehttps://img14.360buyimg.com/n0/jfs/t1/52280/38/7464/140698/5d511f6bE08290bd7/f0bb32ddb47451e8.jpg 参数说明:imgcode:base64加密后的图片内容(post方式),或者是直接上传(file方式) 响应参数…

无涯教程-JavaScript - NPV函数

描述 NPV函数通过使用折现率以及一系列未来付款(负值)和收入(正值)来计算投资的净现值。 语法 NPV (rate,value1,[value2],...)争论 Argument描述Required/OptionalRateThe rate of discount over the length of one period.RequiredValue11 to 254 arguments representing…

SQL数据分析实战:从导入到高级查询的完整指南

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 当进行SQL数据分析实战时…

2023年上半年系统规划与管理师下午真题及答案解析

试题一(25分) 小李是跨国公司新任命的IT服务经理,帮助提升中国区总部的IT服务管理水平。中国区总部的运维管理体系运营了近三年,内外部环境发生了很多变化,其中: (1)内部变化包括团队组织结构调整、部分团队精简改为外包支持、I…

LeetCode_拓扑排序_BFS_中等_1462.课程表 IV

目录 1.题目2.思路3.代码实现(Java) 1.题目 你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses - 1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] [ai, bi] 表示如果你想选 bi 课程,你必须先…

解决Spring Boot文件上传问题:`MultipartException` 和 `FileUploadException`

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

aardio语言的通用数据表维护

import win.ui; /*DSG{{*/ var winform win.form(text"通用数据表维护";right617;bottom427;bgcolor15780518) winform.add( buttonAdd{cls"button";text"增加空行";left469;top40;right564;bottom80;flat1;z2}; buttonDel{cls"button&quo…