【云原生K8S】Kubernetes之探针

这篇具有很好参考价值的文章主要介绍了【云原生K8S】Kubernetes之探针。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、探针是什么

二、探针类型 

Ⅰ、livenessProbe

容器重启策略 

Ⅱ、readinessProbe

Ⅲ、startupProbe

执行顺序:

字段详情

三、探测机制

Ⅰ、HTTP GET探针

Ⅱ、TCP套接字探针

Ⅲ、Exec探针


一、探针是什么

探针:是由 kubelet 对容器执行的定期诊断

要执行诊断,则需kubelet 调用由容器实现的 Handler。探针有三种类型的处理程序:

ExecAction:在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。
TCPSocketAction:对指定端口上的容器的 IP 地址进行 TCP 检查。如果端口打开,则诊断被认为是成功的。
HTTPGetAction:对指定的端口和路径上的容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码大于等于200 且小于 400,则诊断被认为是成功的。
和微服务的心跳检测类似,每隔一段时间,检测这个容器是否还正常工作,检测状态分为三种,每次检测,都会得到其中一种

成功:容器通过了诊断。
失败:容器未通过诊断。
未知:诊断失败,因此不会采取任何行动。
k8s会根据检测到的不同状态,对容器进行不同的处理

二、探针类型 

探针主要有以下三种类型:

livenessProbe 
readinessProbe
startupProbe

Ⅰ、livenessProbe

livenessProbe:存活性探针

指检测容器是否正在运行。

如果存活探测失败,则 kubelet 会杀死容器(需要注意:杀死的是container不是pod),并且容器将受到其重启策略(Always,OnFailure,Never)的影响。
如果容器不提供存活探针,则默认状态为 Success。

容器重启策略 

PodSpec 中有一个 restartPolicy 字段,其值可以设置为

Always          (默认为 Always)
OnFailure
Never

Always:表示一旦不管以何种方式终止运行,kubelet都将重启

OnFailure:表示只有Pod以非0退出码退出才重启

Nerver:表示不再重启该Pod

restartPolicy 适用于 Pod 中的所有容器。

restartPolicy 仅指通过同一节点上的 kubelet 重新启动容器。

失败的容器由 kubelet 以五分钟为上限的指数退避延迟(10秒,20秒,40秒…)重新启动,并在成功执行十分钟后重置。

如 Pod 官方文档中所说,一旦pod绑定到一个节点,Pod 将永远不会重新绑定到另一个节点。
 

Ⅱ、readinessProbe

readinessProbe:就绪性探针

指示容器是否准备好服务请求【对外接受请求访问】。

如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址IP:Port。
初始延迟之前的就绪状态默认为 Failure。
如果容器不提供就绪探针,则默认状态为 Success。  
用于判断容器内的程序是否存活,如果不满足健康条件,那么会自动从Service的 EndPoint 列表中去除该pod的 IP:Port

Ⅲ、startupProbe

startupProbe:启动探针,k8s1.16新增加的一种类型

指检测容器中的应用是否已经启动。

如果提供了启动探测(startup probe),则禁用所有其他探测,直到它成功为止。
如果启动探测失败,kubelet 将杀死容器,容器服从其重启策略进行重启。
如果容器没有提供启动探测,则默认状态为成功Success。
主要解决在慢启动程序或复杂程序中readinessProbe、livenessProbe探针无法较好的判断程序是否启动、是否存活。

引入startupProbe探针是为readinessProbe、livenessProbe探针服务。

执行顺序:

如果三个探针同时存在,则先执行startupProbe探针,其他两个探针将会被暂时禁用,直到startupProbe一次探测成功,其他2个探针才启动;如果startupProbe探测失败,kubelet 将杀死容器,并根据restartPolicy重启策略来判断容器是否要进行重启操作。

就绪探针与存活探针之间的重要区别:如果容器未通过准备检查,则不会被终止或重新启动。
存活探针:通过杀死异常的容器,并用新的正常容器替代他们来保持Pod正常工作
就绪探针:确保只有准备好处理请求的Pod才可以接收探针请求

探针示例

探针资源 yml 中的常用的配置,如下。可根据具体的需求去设置

spec:
    containers:
        # 就绪探针
        readinessProbe:
            # 检测方式
            httpGet: 
            # 超时时间
            timeoutSeconds: 
            # 延迟时间
            initialDelaySeconds:
            # 失败次数限制
            failureThreshold:
            # 每多少秒检测一次
            periodSeconds:
        # 存活探针
        livenessProbe:
            # 检测方式
            httpGet: 
            # 超时时间
            timeoutSeconds: 
            # 延迟时间
            initialDelaySeconds:
            # 失败次数限制
            failureThreshold:
            # 每多少秒检测一次
            periodSeconds:

字段详情

这些字段可以精确的控制存活和就绪检测

initialDelaySeconds:容器启动后要等待多少秒后存活和就绪探测器才被初始化

默认是 0 秒,最小值是 0

 periodSeconds:执行探测的时间间隔(单位是秒)

默认是 10 秒。最小值是 1。

timeoutSeconds:探测的超时时间

默认值是 1 秒。最小值是 1。 

successThreshold:探测器在失败后,被视为成功的最小连续成功数。

默认值是 1。存活探测的这个值必须是 1。最小值是 1。 

failureThreshold:当探测失败时,Kubernetes 的重试次数。存活探测情况下的放弃就意味着重新启动容器。就绪探测情况下的放弃 Pod 会被打上未就绪的标签。

默认值是 3。最小值是 1。 

 在 httpGet 上配置额外的字段: 

host:连接使用的主机名,默认是 Pod 的 IP。也可以在 HTTP 头中设置 “Host” 来代替。

 scheme :用于设置连接主机的方式(HTTP 还是 HTTPS)。

默认是 HTTP。

path:访问 HTTP 服务的路径。 

httpHeaders:请求中自定义的 HTTP 头。HTTP 头字段允许重复。 

port:访问容器的端口号或者端口名。如果数字必须在 1 ~ 65535 之间。 

三、探测机制

探测机制有三种:

HTTP GET探针
TCP套接字探针
Exec探针

就绪探针/存活探针,都有这三种探测机制。

Ⅰ、HTTP GET探针

该探针,是针对容器的IP地址(或者是指定的端口和地址)执行HTTP GET请求,状态码:

如果返回状态码是2xx或者3xx,则探测成功。
如果服务器返回错误的状态码或者根本没有反应,那么认定探测失败,容器会被重新启动。

Ⅱ、TCP套接字探针

TCP套接字探针:尝试与容器指定的端口建立连接,

如果连接成功,则探测成功,
如果连接失败,则认定为探测失败,容器将被重新启动

Ⅲ、Exec探针

Exec探针:在容器内执行任意命令,并检查命令的退出状态码,

如果返回的状态码为0,则探测成功,
如果返回状态码不为0,则探测失败,容器将被重新启动。

 文章来源地址https://www.toymoban.com/news/detail-486748.html

到了这里,关于【云原生K8S】Kubernetes之探针的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云原生Kubernetes:K8S概述

    目录 一、理论 1.云原生 2.K8S 3.k8s集群架构与组件 4.K8S网络 二、总结 (1)概念 云原生是一种基于容器、微服务和自动化运维的软件开发和部署方法。它可以使应用程序更加高效、可靠和可扩展,适用于各种不同的云平台。 如果要更直接通俗的来解释下上面的概念,云原生更

    2024年02月10日
    浏览(37)
  • 【云原生 • Kubernetes】认识 k8s、k8s 架构、核心概念点介绍

    目录 一、Kubernetes 简介 二、Kubernetes 架构 三、Kunbernetes 有哪些核心概念? 1. 集群 Cluster 2. 容器 Container 3. POD 4. 副本集 ReplicaSet 5. 服务 service 6. 发布 Deployment 7. ConfigMap/Secret 8. DaemonSet 9. 核心概念总结 Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌。谷歌早在十几

    2024年02月03日
    浏览(60)
  • 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

    目录 一、认识 Kubernetes 网络 二、外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress Kubernetes 最底层的网络为节点网络,用来保证 k8s 集群的节点(master 和 worker、worker 节点之间)能够做正常的 IP 寻址和通讯。 Kubernetes 第二层网络就是 Pod 网络,构建于节点网络之上

    2024年01月16日
    浏览(37)
  • 云原生Kubernetes:K8S存储卷

    目录 一、理论 1.存储卷 2.emptyDir 存储卷 3.hostPath卷 4.NFS共享存储 5.PVC 和 PV 6.静态创建PV 7.动态创建PV 二、实验  1.emptyDir 存储卷 2.hostPath卷 3.NFS共享存储 4.静态创建PV 5.动态创建PV 三、问题 1.生成pod一直pending 2.shoumount -e未显示共享目录 3.静态创建pv 报错 4.使用 Deployment 来创建

    2024年02月07日
    浏览(38)
  • 云原生Kubernetes:K8S安全机制

    目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜像拉取失败 四、总结 (1)概念 Kubernetes 作为一个分

    2024年02月07日
    浏览(40)
  • 云原生_kubernetes(k8s)介绍

    目录 一、应用部署方式演变 二、k8s介绍 三、k8s的组件 四、k8s中的概念 五、k8s资源管理方式 1、命令式对象管理 2、命令式对象配置 3、声明式对象配置 在部署应用程序的方式上,主要经历了三个时代: 1 、物理机部署: 互联网早期,会直接将应用程序部署在物理机上 优点

    2023年04月13日
    浏览(34)
  • 云原生Kubernetes:K8S常用服务端口

    目录 一、理论 1.K8S常用服务端口号 (1)K8S集群 表1 K8S集群端口 协议 端口号 K8S集群 TCP 22 使用主机驱动通过SSH进行节点配置 TCP 53 集群DNS服务 UDP 53 集群DNS服务 TCP 2376 主机驱动与Docker守护进程通信的TLS端口 TCP 2379 etcd客户端请求 TCP 2380 etcd节点通信 UDP 8472 Canal/Flannel VXLAN ove

    2024年02月10日
    浏览(51)
  • 云原生Kubernetes:K8S配置资源管理

    目录 一、理论 1.Secret 2.Secret创建 3.Secret使用 4.Configmap 5.Configmap创建 6.Configmap使用 二、实验 1.Secret创建 2.Secret使用 3.Configmap创建 4.Configmap使用 三、问题 1.变量引用生成资源报错 2.查看pod日志失败 3.创建configmap报错 4.YAML创建configmap报错 5. 生成资源报错 6.文件挂载pod报错Error 四

    2024年02月07日
    浏览(34)
  • 【云原生K8s】初识Kubernetes的理论基础

      K8S由google的Borg系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经GO语言延用Borg的思路重写并捐献给CNCF基金会开源。 云原生基金会(CNCF)于2015年12月成立,隶属于Linux基金会。CNCF孵化的第一个项目就是Kubernetes, 随着容器的广泛使用,Kubernetes已经成为容

    2024年02月14日
    浏览(47)
  • 【云原生、k8s】管理Kubernetes应用搭建与部署

    官方提供Kubernetes部署3种方式 (一)minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。 官方文档:https://kubernetes.io/docs/setup/minikube/ (二)二进制包 从官方下载发行版的二进制包,手动部署每个组件,

    2024年01月21日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包