您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

从Kubernetes的探针到DevOps

时间:2023-12-27 13:23:59  来源:微信公众号  作者:云云众生s

今天在群里又看有人问如何设置 Kube.NETes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps 这么难?

探针的作用

从功能上讲,探针的作用很简单,之前我也发文澄清过许多人的一些概念不清,本文是希望让运维和开发都能理解,所以会尽量简单的表达。

探针功能是 Kubernetes 提供的一个侦测应用是否正常运行的检查机制。最常见的探测方式是 HTTP 探测。应用需要暴露一个地址,Kubernetes 会定期调用该地址,如果地址返回 200 状态码,则认为应用正常,否则认为应用异常。

一般情况下会需要为应用配置两个探针,分别是存活(liveness)探针和就绪(readiness)探针。存活探针可以在应用有问题时触发重启,应用在重启后可能可以恢复正常。而就绪探针,保证应用有问题时切断流量,避免该应用被调用到:

 

从Kubernetes的探针到DevOps图片

 

如果只是从功能角度看,似乎二者的区别不大,配置一个相同的应用接口似乎也没啥问题,那为什么还要设置两个不同的探针呢?“假设” Kubernetes 的开发者是理智的,则肯定有原因,这个原因后面详细说,先看看运维面临的问题。

宏观的意义

运维的朋友,尤其是做过微服务应用运维的朋友,一定见识过某个基础组件或上游服务出故障的情况吧?可观测做的“到位”,可能是满大屏的红色惊叹号。《发布!设计与部署稳定的分布式系统》书中将这个稳定性反模式叫做“级联效应”。

产生级联效应的过程,可以用下图来展示:

 

从Kubernetes的探针到DevOps图片

 

当上游的 Pod 不可用时,其下游的 Pod 也无法工作,然后传播到所有相关的 Pod 中。

此时此刻,如果可观测工具将所有的错误一股脑的抛出来,运维人员一定会感到非常的绝望,一定希望有一个工具可以告诉他:某个 Pod 本身出问题了,其他 Pod 是因为依赖的 Pod 出问题了所以报错了。这样才能能专注于解决关键问题。

此外,这种级联反应的故障恢复时,也往往绝非“病去如抽丝”,可能不断会遇到个别的业务问题,有时运维人员需要去手工重启服务才能解决。他一定希望:应用要是能够在条件具备时自动恢复就好了。

没错,解决这两个需求的方法就是探针。

探针如何发挥作用

这两个探针正是 Kubernetes 平台与应用之间沟通的契约,当返回报错时,应用实际要表达的意思和做出的承诺是:

  • 存活探针: 我不行了,多试几次,如果还不行,就干掉我重启试试。
  • 就绪探针:我现在没法对外提供服务,不要将请求转给我。可能是我依赖的服务有异常,如果依赖的服务恢复,我应该也能恢复。

这样看,两个探针有着明显的区别。而这两个探针与应用配合,是如何解决上一章所说的问题呢?

首先说说应用完全hang死的情况。此时无论是存活探针还是就绪探针,都会探测异常,肯定会触发重启,这种情况在应用也没法做什么预设,是探针机制最立竿见影的一个情况。

当应用本身发生问题时,存活探针应该报告异常,从而触发重启。此时,问题的关键是,应用如何知道自己存在异常?确实挺难的,这个探针对应的接口应该能够模拟正常业务的主要逻辑,而且如果依赖的服务有问题,而且应用能够处理这个问题,则不应该报告异常。

当应用依赖的服务出现故障时。我们希望应用的存活探针报告正常,而就绪探针报告报告异常。因为此时存活探针报告异常触发了应用重启也解决不了任务问题,大量的重启以及相关的报错反而会让运维人员感到恐慌。探针这样工作有一个非常重要的前提条件,那就是应用在其依赖服务恢复时也能够自己恢复。如果应用无法自动恢复,也许我们只能选择让存活探针在此时报告异常,运维需要面对反复重启的无尽惶恐之中。

问题到了开发这里

道理都懂了,但是该如何解决呢?对运维来说意义重大的一个功能,却必须依靠开发人员来完成。首先,需要开发人员理解上述过程,这也是编写本文的目的之一,然后就是去实现了。

尽管像 Spring 这样的开发框架,已经提供了探针相关的功能,开发可能配置一下就能完成,但实际情况往往并不简单。例如 spring 文档说了:

The “liveness” Probe should not depend on health checks for external systems.

意思就是 liveness 探针不应当依赖外部系统的状态,但实际上有时这个外部系统的定义未必那么笃定;也可能我们的应用无法从某个外部系统的故障中恢复,所以即使是外部系统,我们可能也会将其纳入到 liveness 探针需要检查的范畴。

而且,很有可能我们不能一次做好这个事情,需要在结合实际出现的问题进行调整。如果开发没有参与运维,或者中间的沟通不畅,亦或者没把这件是当做自己的事情,这个探针的问题未必能简单的解决。

其实群里人家问的是探针的参数问题,但其实这些参数只是控制故障能多快的暴露出来,如果应用的探针本身就有问题,这些参数设置的再精妙都没有意义。我觉得这是许多团队的一种工作状态:我们部门自己能搞定的尽量不要依赖别的团队。例如,要是我能找到一个可观测工具,直接给我定位哪个pod出问题,那我还找什么开发。

实际上呢?太难了,做这样包治百病的工具太难了。不过,根据许多人的选择,我们知道这可能比让 Dev 和 Ops 高效的配合起来更简单,至少没那么绝望吧。

谨以本文给大家一个例子,希望大家能够互相体谅,保持一点 DevOps 的精神,高层领导也能意识到这个问题,看看怎么解决。再就是看看平台工程,是不是可以建设一个好的平台,让开发能够更轻松的直面这个问题,毕竟自己写的程序最了解。

参考

  • [1] 链式反应和级联故障:https://www.bilibili.com/video/BV13Q4y1K7FU/
  • [2] 2.9.2. Application lifecycle and Probes states:https://docs.spring.io/spring-boot/docs/2.4.1/reference/html/production-ready-features.html#production-ready-kubernetes-probes-external-state
  • [3] 探针对于伸缩的意义和一些参数说明https://yylives.cc/2023/02/25/kubernetes-probes-and-why-they-matter-for-autoscaling/


Tags:Kubernetes   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  Search: Kubernetes  点击:(5)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  Search: Kubernetes  点击:(12)  评论:(0)  加入收藏
聊聊 Kubernetes 网络模型综合指南
这篇详细的博文探讨了 Kubernetes 网络的复杂性,提供了关于如何在容器化环境中确保高效和安全通信的见解。译自Navigating the Network: A Comprehensive Guide to Kubernete...【详细内容】
2024-02-19  Search: Kubernetes  点击:(37)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01  Search: Kubernetes  点击:(153)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  Search: Kubernetes  点击:(50)  评论:(0)  加入收藏
Kubernetes Informer基本原理,你明白了吗?
本文分析 k8s controller 中 informer 启动的基本流程不论是 k8s 自身组件,还是自己编写 controller,都需要通过 apiserver 监听 etcd 事件来完成自己的控制循环逻辑。如何高...【详细内容】
2024-01-30  Search: Kubernetes  点击:(37)  评论:(0)  加入收藏
Kubernetes 100个常用命令!
这篇文章是关于使用 Kubectl 进行 Kubernetes 诊断的指南。列出了 100 个 Kubectl 命令,这些命令对于诊断 Kubernetes 集群中的问题非常有用。这些问题包括但不限于:• 集...【详细内容】
2024-01-03  Search: Kubernetes  点击:(76)  评论:(0)  加入收藏
一文读懂Kubernetes部署策略
在这篇文章中,我们将深入研究 Kubernetes 部署概念和一些常见策略,了解每种策略的优缺点。合适的部署策略使我们能够在发布应用程序时最大限度地减少停机时间、增强客户体验并...【详细内容】
2024-01-03  Search: Kubernetes  点击:(58)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  Search: Kubernetes  点击:(113)  评论:(0)  加入收藏
如何基于Kubernetes运行Nacos高可用集群
Nacos(Namings and Configuration Management)是阿里巴巴开源的一个易于构建云原生应用的动态服务发现、配置管理和服务管理平台。以下是Nacos的一些主要功能和特点: 服务发现...【详细内容】
2023-12-18  Search: Kubernetes  点击:(68)  评论:(0)  加入收藏
▌简易百科推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  小白debug  微信公众号  Tags:Docker   点击:(11)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22    51CTO  Tags:Docker   点击:(10)  评论:(0)  加入收藏
Containerd容器管理
Nginx 指定容器名称 使用 ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。容器基本操作容器基本操作主要是 ctr image 命令,查看命令帮...【详细内容】
2024-03-20  云原生运维圈  微信公众号  Tags:容器   点击:(13)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  云原生运维圈  微信公众号  Tags:Docker   点击:(22)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01    简易百科  Tags:Kubernetes   点击:(153)  评论:(0)  加入收藏
我们一起聊聊容器资源自愈
在企业实际在使用容器这类资源的时候,除了技术本身,要考虑的其他问题也会很多。企业管理的容器有千千万万,出于效率考虑,对于有特殊需求的容器如何进行批量创建和管理呢,这就需要...【详细内容】
2024-01-30  匠心独运维妙维效  微信公众号  Tags:容器   点击:(47)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  waynblog  微信公众号  Tags:Docker   点击:(65)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  编程技术汇  今日头条  Tags:Docker   点击:(75)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04    Linux中国  Tags:Docker   点击:(124)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  云云众生s  微信公众号  Tags:Kubernetes   点击:(113)  评论:(0)  加入收藏
站内最新
站内热门
站内头条