首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

分布式系统恐怖故事:Kubernetes 深度健康检查

在这篇第一篇文章中,我分享一个错误,我已经在多个公司看到过这个错误,可能导致连锁故障。我称之为 Kubernetes 深度健康检查。...如果存活探测失败,应用程序重启。这可以用来捕捉死锁等问题,使应用程序更可用。我在 Cloudflare 的同事曾撰文阐述我们如何使用它来重启“卡住的” Kafka 消费者,文章链接在此。...当 Pod 中所有的容器就绪Pod 被认为已准备好接收流量。如果 Pod 中的任何容器就绪探测失败,它将从服务负载均衡器中删除,不会接收任何 HTTP 请求。...由于请求没有到达我们的 Pod,我们无法增加代码中精心设置的 Prometheus 指标,而是需要查看集群中标记为就绪的所有 Pod。...,然后一位高级工程师会出现并争辩他们的情况特殊,适合他们(也许确实如此,如果是这样,我很乐意听听您的使用案例)。 当我们使事物分布式,我们增加了复杂性。

7910

K8S deployment可视化故障排查指南

常见pod错误 Pod可能会出现启动和运行时错误。...以下是最常见的错误以及如何修复它们的列表。 ImagePullBackOff 当Kubernetes无法检索Pod容器之一的registry,将出现错误。...如果由于容器重新启动太快而看不到日志,则可以使用以下命令: kubectl logs --previous 打印前一个容器的错误信息 RunContainerError 当容器无法启动出现错误...当 readiness探针失败Pod连接到服务,并且没有流量转发到该实例。...如果您可以在 Backend列中看到端点,但仍然无法访问该应用程序,则可能是以下问题: 您如何Ingress暴露于公共互联网 您如何群集暴露于公共互联网 您可以通过直接连接到Ingress Pod基础结构问题

2.5K10
您找到你想要的搜索结果了吗?
是的
没有找到

落地k8s容易出现13个实践错误

例如:当容器中的进程尝试消耗的内存大小超过允许的内存,系统内核终止尝试分配的进程,并出现内存不足(OOM)错误。 容器可以使用比其请求更多的资源,但永远不能超过其限制。...如果探测失败,活动探测重新启动您的Pod 就绪探针会在kubernetes服务失败Pod失败断开连接(您可以在kubectl get端点中进行检查),并且不再有流量发送给它,直到探针再次成功...在这种情况下(当准备就绪探测失败),活动探测也失败会适得其反。您为什么要重新启动运行良好的Pod? 有时,未定义任何一个探针比定义错误的探针要好。...如果 Readiness 探针失败,则端点控制器将从 Pod 匹配的所有服务的端点中删除 Pod 的 IP 地址。”...我们注意到,当我们启动这些 Pod 的滚动部署,活动连接在成功终止之前已被删除。经过广泛的在线研究,事实证明 Kubernetes 在终止 Pod 之前并没有等待 Nginx 清理其连接

1.7K20

Kubernetes 探针(以及为什么它们对自动缩放很重要)

传输后,这些数据将以度量的形式系统管理员、DevOps 团队和站点可靠性工程师 (SRE) 共享,以帮助确定我们必须在何处采取行动。 一种收集遥测信息的方法是使用探针。...如果端点没有响应,负载平衡器(在这种情况下)跳过端点而不将用户发送到可能失败的网站。这意味着探针已经失败了。 我们可以使用 Kubernetes 探针在 Kubernetes 中执行这些检查。...让我们一起探索 Kubernetes 探针是什么,突出它们的好处,以及如何充分利用它们。...Pod 可能已经准备就绪,但这并不意味着应用程序可以处理请求。 想象一个Web应用程序,它显示一个 HTTP 503 错误页面,因为它无法连接到后端数据库,这使它可以检索信息。...当 pod 自动添加以支持扩张的应用程序工作负载(通常是在需求增加导致CPU、内存或其他关键资源需求增加),就会实现水平 pod 自动伸缩。

18110

CKAD考试实操指南(六)---剖析系统:深入可观察性实践

图片 在登录状态下,每个环境只能体验15分钟,每天有5次机会使用。登录后,每个环境可用时长为1小,每天登录也有5次的使用机会。 当选择好要进入环境后,通常只需要等待约一分钟左右,就能进入环境中。...DNS 解析问题: 发送 HTTP 请求出现 DNS 解析问题,探针会失败,因无法找到目标地址。 TCP 探针: 尝试容器内的指定端口建立 TCP 连接。如果连接成功,容器被认为是健康的。...不健康判定: TCP 连接失败: 如果在预定的超时时间内无法建立 TCP 连接,探针会被认为是不健康的。这可能是由于应用程序监听指定的端口、端口不可达或防火墙规则等问题。...- **DNS 解析问题:** 发送 HTTP 请求出现 DNS 解析问题,探针会失败,因无法找到目标地址。 - **TCP 探针:** 尝试容器内的指定端口建立 TCP 连接。...默认情况下,命令立即返回。 --ignore-not-found: 使用 --ignore-not-found 标志可以忽略删除不存在的资源错误,而不会显示错误消息。

35000

(译)Kubernetes 存活检测的危险性

Kubernetes 使用就绪检测来探测容器是否准备好开始接收流量。如果 Pod 中所有的容器都准备就绪,这个 Pod 就被当做是就绪状态。...这种信号的一个用途就是来控制 Kubernetes 服务的后端 Pod(尤其是 Ingress)。 Kubernetes 使用存活检测来确定是否需要重启容器。...如果一个应用的存活或者就绪检测失败了,在尝试对其进行更新,滚动更新的过程可能会挂死——K8s 会想要等待你的 Pod 进入就绪状态。...理解缺省行为(缺省行为:10 秒钟间隔、1 秒钟超时、成功阈值 1,失败阈值 3): 在大概 30 秒(3 次失败的检测)后,这个 Pod 会成为就绪状态。...如果使用存活检测,不要让存活检测和就绪检测使用同样的条件 可以让存活检测使用同样的健康检测方法,但是设置更高的 failureThreshold(例如 3 次失败之后设置为就绪,10 次失败后才让存活检测失败

1.5K10

浅析Kubernetes Pod重启策略和健康检查

Kubernetes强大的功能可使应用程序的容器保持连续运行,还可以根据需求的增长自动扩展系统。除此之外在Pod或容器出现故障Kubernetes还可以让系统实现"自愈"。...但是,如果容器内的应用程序抛出错误导致其不断重启,则Kubernetes可以通过使用正确的诊断程序并遵循Pod的重启策略来对其进行修复。...它们都使用相同类型的探针处理程序(HTTP GET请求,TCP连接和命令执行)。他们对未通过检查的Pod做出的纠错措施有所不同。livenessProbe重新启动容器,预期重启后错误不再发生。...readinessProbe会将Pod流量隔离,直到故障原因消失。 通过在同一个Pod中使用这两种健康检查,可以确保流量不会到达尚未准备就绪的Pod,并且确保Pod在发生故障能重新启动。...良好的应用程序设计应同时记录足够的信息,尤其是在引发异常。它还应公开必要的API端点,这些端点将会传达重要的运行状况和状态指标,以供监控系统(如Prometheus)使用。

4.5K20

一个恢复CSI挂载信息的解决方法

CSI插件Pod挂载了主机的/var/lib/kubelet/pods目录,当创建挂载Pvc的业务Pod,CSI插件会启动一个s3fs进程,该进程用于远程连接s3服务,bucket(也即Pvc)挂载到...该插件有个问题,就是当CSI插件重启之后,会丢失调内部负责远程连接s3服务的s3fs进程,因此会导致业务Pod内部挂载目录失效,访问/var/lib/kubelet/pods//volumes/kubernetes.io...~csi//mount目录会出现Transport endpoint is not connected的问题。...解决方式CSI插件的/var/lib/kubelet/pods//volumes/kubernetes.io~csi//mount...但这么做首先要知道Pod映射到主机上的挂载路径,这样就比较麻烦了,因为pod映射到主机上的路径使用的CRI相关,如果朝这一方向下去,难度比较大,在CSI Volume Plugins in Kubernetes

1.1K20

Kubernetes 安全风险以及 29 个最佳实践

我们应该在构建阶段修复已知的漏洞;在构建、部署阶段修复错误的配置;在运行阶段对威胁进行快速响应。 本文深入探讨使用 Kubernetes 可能遇到的一些安全风险和挑战。...例如 Kubernetes 网络策略,它类似于防火墙规则,控制了 Pod 之间以及与其他端点的通信方式。当网络策略 Pod 关联,该 Pod 只能与该网络策略中定义的目标进行通信。...1)使用最小的基础镜像 避免镜像 OS 软件包管理器或 Shell 一起使用,因为它们可能会有未知漏洞。如果必须要使用 OS 软件包,请在后面的步骤中删除软件包管理器。...5)安全性集成到 CI/CD 管道中 让镜像扫描和其他安全检查成为 CI/CD 管道的一部分,这样在扫描程序检测到严重的可修复漏洞,可以自动执行安全保护并使 CI 构建失败同时生成警报。...同时,应用流量允许的流量进行比较,可以提供一些有价值的信息。通过这些信息,我们可以进一步收紧网络策略,以消除多余的网络连接并减少攻击面。

1.5K30

使用k8s容器钩子触发事件

它是阻塞的,意味着它是同步的, 所以它必须在删除容器的调用发出之前完成 如果钩子在执行期间挂起, Pod阶段停留在running状态并且永不会达到failed状态。...如果PostStart或者PreStop钩子失败, 容器将会被kill。 用户应该使他们的钩子处理程序尽可能的轻量。 钩子处理程序的实现 容器可以通过实现和注册该钩子的处理程序来访问钩子。...HTTP - 对容器上的特定的端点执行HTTP请求。 在Pod的事件中没有钩子处理程序的日志。 如果一个处理程序因为某些原因运行失败,它广播一个事件。...https://raw.githubusercontent.com/kubernetes/website/master/docs/tasks/configure-pod-container/lifecycle-events.yaml...考虑添加优雅的终止方式,错误请求降到最低,直至没有错误出现

1.6K20

现代化Kubernetes的应用程序

Kubernetes是一个高度自动化的环境,可以自动部署和重新启动失败的应用程序容器,因此构建适当的应用程序逻辑以容器协调器进行通信并允许它根据需要自动扩展应用程序非常重要。...构建功能以发布响应持续时间和错误率等性能指标帮助您监控应用程序并在应用程序运行状况不佳提醒您。...这允许您将配置映像清单分开,以便您可以单独管理应用程序并对其进行版本控制。 图像发布到注册表 一旦构建了应用程序映像,为了使它们可供Kubernetes使用,您应该将它们上载到容器映像注册表。...这些注册表可以托管版本控制服务(如GitHub)集成,以便在更新和推送Dockerfile,注册表服务将自动提取新的Dockerfile,构建容器映像,并使更新的映像可用于您的服务。...您还可以这些Pod和部署配置Dockerfiles分开编辑,从而可以快速检测重大更改并进一步配置问题应用程序错误分开。

2K86

探索使用 Kubernetes 扩展专用游戏服务器:第1部分-容器化和部署

相反,我们依靠在 Kubernetes 上安装软件的最基本的构建模块 – PodPod 只是一个或多个某些共享资源(例如 IP 地址和端口空间)一起运行的容器。...幸运的是,通过在配置 Pod hostNetwork 设置为 true,Kubernetes 允许 Pod 直接使用主机网络名称空间。...调用时,它将使用上面的详细信息游戏服务器创建为 Pod。然后,只要需要启动新的游戏服务器以允许两个玩家玩游戏,就可以通过配对服务调用该服务!...它还提供了/ get端点,用于查找游戏服务器在哪个端口上启动。它已与创建游戏服务器的 REST 端点打包在一起,因此我们在 Kubernetes 中提供了一项用于管理游戏服务器的单一服务。...SESSION_NAME 集群唯一的 Pod 名称一起使用,并将其端口组合。

2.5K20

详细了解 Linkerd 2.10 基础功能,一起步入 Service Mesh 微服务架构时代

Ingress:Linkerd 可以您选择的 ingress controller 一起工作。...自动 mTLS 默认情况下,Linkerd 通过在 Linkerd 代理之间建立和验证安全的私有 TLS 连接, 为网状 Pod 之间的大多数 TCP 流量自动启用相互传输层安全性 (mTLS)。...当目的地在 Kubernetes 集群中,控制平面为代理提供目的地的端点地址以及元数据。当身份名称包含在此元数据中,这向代理表明它可以启动双向 TLS。...相反,Linkerd 旨在您选择的 ingress controller 一起工作。...(当代理注入器关闭可能会发生这种情况。) 如果在准入阶段由于无法识别或超时错误导致代理注入过程失败, 则工作负载准入将被 Kubernetes API 服务器拒绝,部署失败

1.2K60

健康检查 - 从Readiness和Liveness 探针说起

如果参数设置得过高,则存在在pod发生故障且重新启动浪费时间的危险。如果此参数设置得太低,则如果pod承受较大的负载,则存在过早重新启动pod的危险。...使 Pod 退出服务(Service) 对于就绪探针,failureThreshold参数定义探针在从端点列表中删除pod之前必须失败的次数。...在下图中,pod连续三次未能响应探测,随后出现一次成功响应(探针 5)。此成功响应在故障重置计数器,然后探针10 从端点表中移除pod之前,又发生了五个故障探测(探针 6 到 10)。... Pod 重新加到服务(Service) 对于就绪探针,successThreshold参数failureThreshold一起工作,以定义 pod 重新加到端点列表的情况。...在下图中,pod 在探针 5 处出现第五次响应失败,导致pod端点列表中移除。请注意,在从探针 1 到探针 5 的时间段内,即使该pod难以成功响应, 它仍保留在端点列表中。

2.9K20

Chaos Mesh 如何助力 Apache APISIX 提高系统稳定性

Chaos Mesh 是一个云原生的 Chaos Engineering 平台,针对 Kubernetes 上的复杂系统提供全方位的故障注入方法,涵盖 Pod、网络、文件系统甚至内核中的故障。...如果问题使应用程序脱离稳定状态,我们会修复它们。 现在,我们通过我们提到的两个场景向您展示我们如何在 Apache APISIX 中使用 Chaos Mesh。...etcd 和 Apache APISIX 之间出现高网络延迟 场景#2 我们在对照组中进行了上述相同的实验后,我们引入了 pod-kill 混沌并重现了预期的错误。...当我们随机删除集群中的少量 etcd 节点,APISIX 有时可以连接到 etcd 有时不能,并且日志打印了大量连接拒绝错误。...当我们删除 etcd 端点列表中的第一个或第三个节点, set route 正常返回一个结果。

67530

揭秘 ChatGPT 背后的技术栈:OpenAI 如何 Kubernetes 扩展到了 7500 个节点

单个 Kubernetes 集群扩展到这种规模很少见,但好处是能够提供一个简单的基础架构,使我们的机器学习研究团队能够更快地推进并扩展,而无需更改代码。...Pod 使用 SSH 直接通过 Pod IP 地址 MPI 进行通信,而不是通过服务端点。服务“发现”是有限的;我们只在作业启动进行一次查找,查找哪些 Pod 参与 MPI。...大多数作业某种形式的 Blob 存储进行交互。它们通常会直接从 Blob 存储流式传输一些数据集的分片或检查点,或将其缓存到快速的本地临时磁盘中。...这些检查监视基本的系统资源,例如网络可达性、坏盘或满盘,或者 GPU 错误。GPU 以许多不同的方式出现问题,但一个容易出现的常见问题是“不可纠正的 ECC 错误”。...VM 可能需要重新启动以应用底层的超级管理程序补丁,或者物理节点替换为其他硬件。 这些被动健康检查在所有节点上不断运行。如果健康检查开始失败,节点将自动划分,因此不会在节点上安排新的 Pod

84240

Cilium 1.11:服务网格的未来已来

当 XDP 程序连接到 bond 设备,XDP_TX 的语义等同于 tc eBPF 程序附加到 bond 设备,这意味着从 bond 设备传输数据包使用 bond 配置的传输方法来选择从属设备。...在这种情况下,重要的是要优雅地终止 Pod 的活跃连接,让应用程序有时间完成请求以最大程度地减少中断。异常连接终止会导致数据丢失,或延迟应用程序的恢复。...当一个 service 端点被终止Kubernetes 为该端点设置 terminating 状态。...注意, CEP 模式相比,在规模较大,如果 Pod 数量剧烈变化(例如大规模扩缩容),可能会产生较高的 Endpoint 信息传播延迟,从而影响到远程节点。...不容错过的一个版本,让我们一起深入了解吧!

14810
领券