k8s保持pod健康

news/2024/11/16 6:03:17/

存活探针

Kubemetes 可以通过存活探针 (liveness probe) 检查容器是否还在运行。可以为 pod 中的每个容器单独指定存活探针。如果探测失败,Kubemetes 将定期执行探针并重新启动容器
Kubemetes 有以下三种探测容器的机制:

  • HTTP GET 探针对容器的 IP 地址(用户指定的端口和路径)执行 HTTP GET 请求。
    如果探测器收到响应,并且响应状态码不代表错误(如果 HTTP 响应状态码是2xx或3xx), 则认为探测成功。
    如果服务器返回错误响应状态码或者根本没有响应,那么探测就被认为是失败的,容器将被重新启动。
    在这里插入图片描述
  • TCP 套接字探针尝试与容器指定端口建立TCP连接。如果连接成功建立,则探测成功。否则,容器重新启动。
  • Exec 探针在容器内执行任意命令,并检查命令的退出状态码。如果状态码是 0, 则探测成功。所有其他状态码都被认为失败。
    在这里插入图片描述
    在这里插入图片描述
    RESTARTS 列显示 pod 的容器已被重启一次,可以通过查看kubectl describe的内容来了解为什么必须重启容器
    可以看到容器现在正在运行,但之前由于错误而终止。
    退出代码为137, 这有特殊的含义:表示该进程由外部信号终止。数字137是两个数字的总和:
    128+x, 其中x是终止进程的信号编号。在这个例子中,x等于9, 这是 SIGKILL 的信号编号,意味着这个进程被强行终止。

在底部列出的事件显示了容器为什么终止:Kubemetes发现容器不健康,所以终止并重新创建。
容器被强行终止时,会创建一个全新的容器,而不是重启原来的容器
kubectl describe 还显示关于存活探针的附加信息:
在这里插入图片描述

  • delay=0s 表示在容器启动后立即开始探测。
  • timeout=1s 表示容器必须在1秒内进行响应,否则这次探测记作失败。
  • period=10s 表示每10秒探测一次容器
  • failure=3 表示在探测连续三次失败后重启容器
    定义探针时可以自定义这些附加参数, 比如设置初始延迟。

如果没有设置初始延迟,探针将在启动时立即开始探测容器, 这通常会导致探测失败,因为应用程序还没准备好开始接收请求。如果失败次数超过阈值,在应用程序能正确响应请求之前, 容器就会重启。

总结

Kubernetes 会在容器崩溃或其存活探针失败时,通过重启容器来保持运行,由承载 pod 的节点上的 Kubelet 执行,在主服务器上运行的 Control Plane 组件不会参与此过程。

如果节点本身崩溃,那么 Control Plane 必须为所有随节点停止运行的 pod 创建新的 pod。它不会为你直接创建的 pod 执行此操作,这些 pod 只被 Kubelet 管理,但由于 Kubelet 本身运行在节点上,所以如果节点异常终止,它将无法执行任何操作。


http://www.ppmy.cn/news/1456126.html

相关文章

【SolidWorks】快速做一个密闭箱体的方法

最近博主在用SolidWorks搭建一个带有上盖的方壳体,经过一番摸索,发现采用“特征”里的“拉伸”和“抽壳”两个功能,就可以快速搭建一个封闭箱体。这里将快速做密闭箱体的方法分享给大家。 1、在草图里画一个箱体的底部图形,比如方…

如何使用Knife4j进行接口测试

Knife4j是一个为Java MVC框架提供增强的Swagger UI界面的开源工具,它集成了Swagger UI并提供了更丰富的功能。使用Knife4j可以进行接口的测试,以下是使用Knife4j进行接口测试的详细步骤和解释: 1. 引入Knife4j依赖 首先,确保你的…

python获取图像边缘轮廓

在计算机视觉领域,图像边缘检测是基础且关键的一环,它能够帮助我们从复杂的图像数据中提取有用的结构信息,进而用于物体识别、形状分析等多种应用。Python凭借其丰富的库支持,如OpenCV、Pillow、Scikit-image等,成为了实现图像边缘检测的热门工具。本文将详细介绍如何使用…

虚幻引擎5 Gameplay框架(二)

Gameplay重要类及重要功能使用方法(一) 配置LOG类及PlayerController的网络机制 探索验证GamePlay重要函数、类的执行顺序与含义 我们定义自己的日志,专门建立一个存放自己日志的类,这个类继承自BlueprintFunctionLibrary 然后…

c++ 唤醒指定线程

在C中,直接唤醒一个特定的线程并不像在Java的Thread类中有interrupt()方法或者某些操作系统特定的API(如POSIX的pthread_cond_signal或Windows的SetEvent)那样简单。C标准库没有提供一个直接的方法来"唤醒"一个正在等待的线程。然而…

sh: 1: appimagetool: not found

下载 appimagetool: 首先,访问 AppImageHub 或者 AppImage GitHub releases 页面 查找 appimagetool 的最新版本。 安装 appimagetool: 下载完成后,你将获得一个 .AppImage 文件。你需要将这个文件转换为可执行文件&#xff0c…

1077 互评成绩计算

solution 总成绩 &#xff08;老师成绩 同学去掉最高分去掉最低分的平均分&#xff09;/2&#xff0c;其中总成绩四舍五入取整 #include<iostream> #include<algorithm> using namespace std; int main(){int n, m, worst, better, sum, g, x, cnt;scanf("…

Flutter笔记:Widgets Easier组件库(9)使用弹窗

Flutter笔记 Widgets Easier组件库&#xff08;9&#xff09;&#xff1a;使用弹窗 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress o…