调试 Kubernetes - 故障排除指南

随着 Kubernetes 不断彻底改变我们管理和部署应用程序的方式,了解其复杂性对于开发人员和运营团队来说都变得至关重要。如果您没有专门的 DevOps 团队,您可能不应该使用 Kubernetes。尽管如此,在某些情况下,当我们调试问题时,DevOps 工程师可能不在。对于这些情况以及一般的熟悉程度,我们仍然应该熟悉常见的 Kubernetes 问题,以弥合开发和运营之间的差距。我认为这也提供了一项重要技能,可以帮助我们更好地理解 DevOps 的工作,有了这种理解,我们可以提高团队的凝聚力。本指南探讨了常见的 Kubernetes 错误,并提供了故障排除技巧,以帮助开发人员驾驭复杂的容器编排环境。

图片

识别配置问题

在 Kubernetes 中遇到配置问题时,首先要检查的是使用kubectl get pods命令的状态列。常见错误会在这里出现,需要使用 进行进一步检查kubectl describe pod。

图片

常见原因和解决方案

  • 资源不足:请注意,这指的是 POD 本身的资源,而不是容器内的资源。这意味着硬件或周围的 VM 已达到极限。

  • 症状:由于资源限制,Pod 无法调度。

  • 解决方案:通过添加更多节点来扩大集群以满足资源需求。

  • 卷安装失败:

  • 症状:Pod 无法正确挂载卷。

  • 解决方案:确保在 pod 规范中准确定义存储,并检查存储类和持久卷 (PV) 配置。

详细调查步骤

我们可以使用kubectl describe pod:此命令提供 pod 的详细描述,包括已发生的事件。通过检查这些事件,我们可以查明问题的确切原因。

另一个重要步骤是资源配额分析。有时,资源限制是由于命名空间级别的资源配额造成的。用于kubectl get resourcequotas检查配额是否限制了 Pod 的创建。

处理镜像拉取错误

错误类似于ErrImagePull或ImagePullBackOff表示获取容器映像时出现问题。这些错误通常与映像可用性或访问权限有关。

故障排除步骤

第一步是检查图像名称,我们可以使用以下命令执行此操作:

图片

然后我们需要验证图像名称是否存在拼写错误或无效字符。我通过 grep 管道传输命令来验证名称是否 100% 相同,有些拼写错误很难发现。

凭证也可能是一个重大陷阱。例如,从私有存储库提取图像时授权失败。

我们必须确保 Docker 注册表凭据在 Kubernetes 机密中正确配置。

还应检查网络配置。确保 Kubernetes 节点可以通过网络访问 Docker 注册表。网络策略或防火墙规则可能会阻止访问。

还有不少其他陷阱,例如图像标签问题。确保您使用正确的图像标签。最新标签可能并不总是指向预期的图像版本。

如果您使用的是私有注册表,则可能会遇到访问问题。请确保您的凭据是最新的,并且注册表可从所有区域的所有节点访问。

处理节点问题

与节点相关的错误通常指向物理机或虚拟机问题。这些问题可能会破坏 Kubernetes 集群的正常运行,需要立即引起注意。

要检查节点状态,请使用以下命令:

图片

然后我们可以在结果输出中识别有问题的节点。

虽然这是老生常谈,但有时重启节点是解决某些问题的最佳方法。我们可以重启受影响的机器或虚拟机。Kubernetes 应该尝试“自我修复”并在几分钟内恢复。

要调查节点状况,我们可以使用以下命令:

图片

我们应该寻找诸如MemoryPressure、DiskPressure或 之类的条件NetworkUnavailable。这些条件为我们应在节点中解决的根本问题提供了线索。

预防措施

节点监控应与 Prometheus、Grafana 等工具配合使用,以监控节点的健康和性能。这些工具对于解决 Kubernetes 的低级问题非常有用,我们也可以将它们用于解决高级应用程序问题。

我们可以利用一些自动修复工具(例如 Kubernetes Cluster Autoscaler)根据工作负载需求自动管理集群中的节点数量。就我个人而言,我不太喜欢这些工具,因为我担心连锁故障会引发额外的资源消耗。

管理缺失的配置密钥或机密

缺少配置密钥或机密是中断 Kubernetes 部署的常见问题。正确管理这些元素对于顺利运行至关重要。

我们需要使用 ConfigMap 和 Secret。它们让我们可以安全地存储配置值和敏感信息。为了避免这种情况,我们需要确保 ConfigMap 和 Secrets 在您的 pod 规范中得到正确引用。

使用以下命令检查 pod 描述:

图片

查看输出并查找缺少的配置详细信息。纠正任何错误配置。

可以使用以下命令验证 ConfigMap 和 secret 创建:

图片

和:

图片

确保所需的 ConfigMap 和 Secrets 存在于命名空间中并包含预期的数据。

最好将 ConfigMap 的非敏感部分保留在版本控制中,同时排除 Secret 以确保安全。此外,您应该针对不同的环境(开发、暂存、生产)使用不同的 ConfigMap 和 Secret,以避免配置泄露。

利用 Buildg 进行交互式调试

Buildg 是一个相对较新的工具,它通过允许交互式调试来增强 Docker 配置的调试过程。

它以类似于标准调试的方式为配置问题提供交互式调试。它允许我们逐步完成各个Dockerfile阶段并设置断点。Buildg 通过调试适配器协议 (DAP) 与 VSCode 和其他 IDE 兼容。

Buildg 让我们在构建过程的每个阶段检查容器状态,以便尽早发现问题。

结论

调试 Kubernetes 可能具有挑战性,但只要具备正确的知识和工具,开发人员就可以有效地识别和解决常见问题。通过了解配置问题、镜像拉取错误、节点问题以及 ConfigMaps 和 Secrets 的重要性,开发人员可以为更强大、更可靠的 Kubernetes 部署做出贡献。Buildg 等工具在交互式调试方面取得了有希望的进步,进一步缩小了开发和运营之间的差距。

随着 Kubernetes 的不断发展,了解新工具和最佳实践对于成功管理和部署应用程序至关重要。通过主动解决这些常见问题,开发人员可以确保 Kubernetes 运行更顺畅、更高效,最终实现更具弹性和可扩展的应用程序。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网页发起 http 请求的全过程详解图

原文地址:https://dev.to/gallau/lifecycle-of-a-url-request-2gan

stable diffusion 局部重绘 reference-only api 接口调试

webUI api payload 插件生成的接口参数不准确,reference-only 的image不是对象,就是不同字符串字段,直接传,不是套image。 综上,那个插件参数不确定,应直接看插件的源码,看它接受什么参数 错误…

Vue3 + TS + Antd + Pinia 从零搭建后台系统(四) ant-design-vue Layout布局,导航栏,标签页

书接上回本篇主要介绍: Layout布局,导航栏,标签页继续填充目录 按需引入组件Layout布局,导航栏,标签页css样式 按需引入组件 使用unplugin-vue-components插件完成ant-design-vue组件的按需加载。 前文中已处理过&…

基于SSM的个人博客管理系统

有需要请加文章底部Q哦 可远程调试 基于SSM的个人博客管理系统 一 介绍 个人博客管理系统基于SSM框架开发,数据库mysql,前端layui。系统角色分为用户和管理员。(附带配套设计文档!) 技术栈:JavaSSM框架mysqllayuiIDEAMaventomcat8.5jdk1.8 …

彻底卸载Ubuntu双系统

操作系统 文章目录 操作系统前言一、把开机启动项设为默认Windows启动二、删除Ubuntu系统分区三、删除开机启动引导项 前言 我们卸载Ubuntu双系统,可能出于以下原因: 1、Ubuntu系统内核损坏无法正常进入 2、Ubuntu系统分配空间不足,直接扩区…

就因为没在大屏项目加全屏按钮,早上在地铁挨了领导一顿骂

“嗯嗯”,“嗯嗯”,“那产品也没说加呀”,“按F11不行吗?”,“嗯嗯”,“好的”。 早上在4号线上,我正坐在地铁里,边上站着的妹子,我看他背着双肩包,打着电话…

HeidiSQL导入与导出数据

HeidiSQL两种导入与导出数据的方法:整个库复制,和仅复制数据 一 整个库复制 1 选中需要导出的数据库(这里是MyDBdata),点击导出为SQL脚本。 2 按照如图进行选择 3 选做:删除当前数据库【如果有】 -- 删除数据库 USE mysql; D…

白酒:中国的酒文化的传承与发扬

中国,一个拥有五千年文明史的国度,其深厚的文化底蕴孕育出了丰富多彩的酒文化。在这片广袤的土地上,酒不仅仅是一种产品,更是一种情感的寄托,一种文化的传承。云仓酒庄的豪迈白酒,正是这一文化脉络中的一颗…

图卷积网络(Graph Convolutional Network, GCN)

图卷积网络(Graph Convolutional Network, GCN)是一种用于处理图结构数据的深度学习模型。GCN编码器的核心思想是通过邻接节点的信息聚合来更新节点表示。 图的表示 一个图 G通常表示为 G(V,E),其中: V 是节点集合,…

2024青海三支一扶报名流程图解❗

报考公告 1、招考人数: 1910 人 2、报名时间:6月20-6月25 3、笔试时间:7月6日 4、笔试内容:综合知识和能力素质测验 🔴线上报名流程图解 一、本次报名采用线上报名方式,考生需登录《青海省人事考试信息网》…

xss一些笔记

(乱写的一些笔记) innerHTML只防script像是img就不会防 innerText都防 上面代码执行避免用户交互 js也可以用’‘执行 例子 alert’1‘ document.location.hash // #号后的部分,包括#号 document.location.host // 域名…

广告权重及出价解析

由于算法一直在不断改变,所以公式只能作为参考,不过核心是不变的。一、广告权重及出价解析 链接质量分CTR分值**CR分值(点击率*转化率)广告质量分广告出价*链接质量分我们的出价下一名产品的广告质量评分/我们的链接质量分0.01 …

Building wheels for collected packages: mmcv, mmcv-full 卡住

安装 anime-face-detector 的时候遇到一个问题:Installation takes forever #1386:在构建mmcv-full时卡住,这里分享下解决方法(安装 mmcv 同理,将下面命令中的 mmcv-full 替换成 mmcv) 具体表现如下&#x…

“华数杯”全国大学生数学建模竞赛含金量如何?

“华数杯”全国大学生数学建模竞赛是由华中师范大学主办的一项全国性的大学生数学建模竞赛。该竞赛旨在提高大学生的数学建模能力和实践能力,增强大学生的创新意识和团队协作精神。 搜集一些评价,有人说该竞赛的含金量较高,但是也有一些人认…

什么是进程?

目录 进程 进程的特征, 概念 我们下面先简单介绍一下什么是进程 接下来看看一个程序的运行过程 进程的组成 进程的状态和转换 进程的状态 进程状态的转换 ​编辑 进程的组织方式 进程控制 如何实现进程控制 为什么进程控制的过程需要一气呵成? 进程控制的实现…

05-对混合app应用中的元素进行定位

本文介绍对于混合app应用中的元素如何进行定位。 一、app的类型 1)Native App(原生应用) 原生应用是指利用Android、IOS平台官方的开发语言、开发类库、工具等进行开发的app应用,在应用性能和交互体验上应该是最好的。 通俗点来…

【论文精读】RayMVSNet

今天读的是发表在CVPR2022上的无监督MVS文章,作者来自于国防科大。 文章链接:RayMVSNet 项目地址:Github Abstract 作者希望直接优化每个camera ray上的深度值,所以提出这个RayMVSNet来学习1D implicit field的序列预测。使用了…

springboot+vue+mybatis酒店管理系统+PPT+论文+讲解+售后

基于Spring框架的小型宾馆旅客信息管理系统采用B/S结构、java开发语言、以及Mysql数据库等技术。系统主要分为管理员和用户二部分,管理员:首页、个人中心、用户管理、客房类型管理、客房信息管理、客房预订管理、入住登记管理、退房评价管理、系统管理&a…

基于Redis提高查询性能(保持数据一致性)

Redis实战篇 | Kyles Blog (cyborg2077.github.io) 目录 背景 商户查询缓存(根据ID查询) 根据店铺类型查询(List型) 缓存更新策略(保证数据一致性) 案例(利用缓存更新策略) 背景 起初客户端…

2024-06-19,面试官问的问题

文章目录 1、采用minIO完成了图片存储,采用阿里云OSS服务器存储图片这两个功能面试官理解为重复,面试官又问minIO怎么同步到OSS?2、讲一下ThreadLocal?3、为什么用ThreadLocal存数据?4、redis有几种数据结构&#xff1…