文章目录

  • 01 引言
  • 02 pod生命周期
  • 03 pod重启策略
  • 04 pod健康检查和服务可用性检查
    • 4.1 方式一:ExecAction
    • 4.2 方式二:TCPSocketAction
    • 4.3 方式三:HTTPGetAction
    • 4.4 其它
  • 05 文末

01 引言

声明:本文为《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第5版)》的读书笔记

本文主要讲解pod的生命周期、重启策略、健康检查及服务可用性检查。

02 pod生命周期

pod在整个生命周期中被系统定义为各种状态,熟悉pod的各种状态对于理解如何设置pod的调度策略、重启策略是很有必要的,pod状态如下:

状态值 描述
Pending API Server已经创建了pod,但在pod内还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程
Running pod内所有容器均已创建,且至少有一个容器处于运行状态、正在启动状态或正在重启状态
Succeeded pod内所有容器均成功执行后退出,且不会在重启
Failed pod内所有容器均已退出,但至少有一个容器为退出失败状态
Unknown 由于某种原因无法获取该Pod的状态,可能由于网络通信不畅导致的

03 pod重启策略

pod的重启策略(RestartPolicy应用于pod内的所有容器,并且仅在pod所处的 nodekubelet 进行判断和重启操作

当某个容器异常退出或者健康检查 失败时,kubelet将根据RestartPolicy的设置进行相应的操作,pod的重启策略包括AlwaysOnFailureNever(默认值为Always):

重启策略 描述
Always 当容器失效时,由kubelet自动重启该容器
OnFailure 当容器终止运行且退出码不为0时,由kubelet自动重启该容器
Never 不论容器运行状态如何,kubelet都不会重启该容器

kubelet重启失效容器的时间间隔以symc-frequency乘以2n来计算,例如1、 2、4、8倍等,最长延时5min,并且在成功重启后的10min后重置该时间。

pod的重启策略与控制方式息息相关,当前可用于管理pod的控制器包括
ReplicationController、Job、DaemonSet,还可以通过kubelet管理(静态
pod)。每种控制器对Pod的重启策略要求如下:

控制器 要求
RC和DaemonSet 必须设置为Always,需要保证该容器持续运行
Job OnFailure或Never,确保容器执行完成后不再重启
kubelet 在Pod失效时自动重启它,不论将RestartPolicy设置为什么值,也不会对Pod进行健康检查

结合pod的状态和重启策略,常见的状态转换场景如下:

04 pod健康检查和服务可用性检查

Kubernetes对Pod的健康状态可以通过三类探针来检查:LivenessProbe、
ReadinessProbe及StartupProbe
,其中最主要的探针为LivenessProbe与
ReadinessProbe,kubelet会定期执行这两类探针来诊断容器的健康状况。

探针 作用
LivenessProbe探针 用于判断容器是否存活(Running状态),如果LivenessProbe探针探测到容器不健康,则kubelet“将“杀掉”该容器,并根据容器的重启策略做相应的处理。如果一个容器不包含LivenessProbe探针,那么kubelet认 为该容器的LivenessProbe探针返回的值永远是Success
ReadinessProbe探针 用于判断容器服务是否可用(Ready状态),达到Ready状态的Pod才可以接收请求。对于被Service管理的Pod、Service与PodEndpoint的关联关系也将基于Pod是否Ready进行设置。如果在运行过程中Ready 状态变为False,则系统自动将其从Service的后端Endpoint列表中隔离出去,后续再把恢复到Ready状态的Pod加回后端Endpoint列表。这样就能保证客户端在访问Service时不会被转发到服务不可用的Pod实例上。需要注意的是ReadinessProbe也是定期触发执行的,存在于Pod的整个生命周期中
StartupProbe探针 某些应用会遇到启动比较慢的情况,例如应用程序启动时需要与远程服务器建立网络连接,或者遇到网络访问较慢等情况时,会造成容器启动缓慢,此时ReadinessProbe就不适用了,因为这属于“有且仅有一次” 的超长延时,可以通过StartupProbe探针解决该问题

以上探针均可配置以下三种实现方式。

4.1 方式一:ExecAction

ExecAction在容器内部运行一个命令,如果该命令的返回码为0,则 表明容器健康。

举例:通过运行cat/tmp/health命令来判断一个容器运行是否正常。在该pod运行后,将在创建/tmp/health文件10s后删除该文件,而LivenessProbe健康检查的初始探测时间(initialDelaySeconds)为15s,探测结果是Fail,将导致kubelet “杀掉” 该容器并重启它

4.2 方式二:TCPSocketAction

TCPSocketAction通过容器的IP地址和端口号执行TCP检查,如果能够建立TCP连接,则表明容器健康。

举例:通过与容器内的localhost:80建立TCP连接进行健康检查:

4.3 方式三:HTTPGetAction

HTTPGetAction通过容器的IP地址、端口号及路径调用HTTP Get方 法,如果响应的状态码大于等于200且小于400,则认为容器健康。

举例:kubelet定时发送HTTP请求到localhost:80/_status/healthz来进行容器应用的健康检查:

4.4 其它

对于每种探测方式,都需要设置initialDelaySecondstimeoutSeconds两个参数,它们的含义分别如下。

参数 含义
initialDelaySeconds 启动容器后进行首次健康检查的等待时间,单位为s
timeoutSeconds 健康检查发送请求后等待响应的超时时间,单位为s ,当超时发生时,kubelet会认为容器已经无法提供服务,将会重启该容器

如下代码片段是StartupProbe探针的一个参考配置,可以看到,这个Pod可以有长达30×10=300s的超长启动时间:

KubernetesPod可用性探针机制可能无法满足某些复杂应用对容器内服务可 用状态的判断,所以Kubernetes从1.11版本开始,引入了Pod Ready++特性对Readiness探测机制进行扩展,在1.14版本时达到GA稳定版本,称其为Pod
Readiness Gates。

Pod Readiness Gates给予了Pod之外的组件控制某个Pod就绪的能力,通过Pod Readiness Gates机制,用户可以设置自定义的Pod可用性探测方式来告诉Kubernetes某个Pod是否可用,具体使用方式是用户提供一个外部的控 制器(Controller)来设置相应Pod的可用性状态。

举例:Pod的Readiness Gates在Pod定义中的ReadinessGate字段进行一个类型为www.example.com/feature-l的新Readiness Gate:

新增的自定义Condition的状态(status)将由用户自定义的外部控制器设置(默认值为FalseKubernetes将在判断全部readinessGates条件都为True时, 才设置Pod为服务可用状态(ReadyTrue)

05 文末

本文主要讲解pod生命周期、重启策略及健康检查,希望能帮助到大家,谢谢大家的阅读,本文完!

k8s教程(pod篇)-生命周期、重启策略及健康检查相关推荐

  1. .net core i上 K8S(四).netcore程序的pod管理,重启策略与健康检查

    目录 1.pod管理 2.重启策略 3.健康检查 4.进入容器 正文 上一章我们已经通过yaml文件将.netcore程序跑起来了,但还有一下细节问题可以分享给大家. 1.pod管理 1.1创建pod ...

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

    使用Kubernetes的主要好处之一是它具有管理和维护集群中容器的能力,几乎可以提供服务零停机时间的保障.在创建一个Pod资源后,Kubernetes会为它选择worker节点,然后将其调度到节点上 ...

  3. k8s中pod的重启策略和健康检查

    目录 k8s中pod的重启策略 pod中一共有以下三个重启策略(restartPolicy) 健康检查: 健康检查类型 支持的检查方法: 检查示例 其他检查方式示例 k8s中pod的重启策略 pod中 ...

  4. k8s 重启策略、健康检查、环境变量、初始化容器

    深入理解Pod对象:基本管理 Pod基本概念 Pod存在意义 Pod资源共享实现机制 Pod管理命令 重启策略 健康检查 环境变量 init Container(初始化容器) 先简单的做出两个运行ht ...

  5. Kubernetes pod的生命周期

    本文翻译自:Kubernetes: Lifecycle of a Pod 原文出处:Kubernetes: Lifecycle of a Pod - DZone Integration 参考:Cont ...

  6. kubernetes Pod Lifecycle生命周期与livenessProbe、 readinessProbe探测方法

    kuberenetes pod Liveness, Readiness and Startup Probes tags: Pod,探针,健康检测 文章目录 kuberenetes pod Livene ...

  7. iOS10 UI教程视图的生命周期

    iOS10 UI教程视图的生命周期 说到视图的生命周期一般都是指视图控制器的视图生命周期.在视图的声明周期中最主要的有8个方法,分别为loadView().viewDidLoad().viewWill ...

  8. java 实例的生命周期_[Java教程]Vue实例生命周期

    [Java教程]Vue实例生命周期 0 2017-08-15 19:00:09 前面的话 Vue实例在创建时有一系列的初始化步骤,例如建立数据观察,编译模板,创建数据绑定等.在此过程中,我们可以通过一 ...

  9. K8s Pod 钩子生命周期

    lifecycle: postStart: #启动指令 exec:command: ["/bin/sh", "-c", "xxx"] pre ...

最新文章

  1. cpc无法获取系统office信息_智能云信息发布系统解锁信息获取新方式
  2. RDKit:运用RDKit计算USRCAT(形状相似性)
  3. Hadoop生态Zookeeper安装
  4. Dynamic Performance Tables not accessible,Automatic Statistics...
  5. dubbo-快速入门-分布式RPC框架Apache Dubbo
  6. python新奇检测_3种Python检测URL状态
  7. Qt文档阅读笔记-QVariant::value()与qvariant_cast解析及使用
  8. 21 CO配置-控制-产品成本控制-成本对象控制-检查制造订单 (PP) 的成本核算变式
  9. 不相交集类及其应用生成迷宫
  10. ubuntu安装hadoop2.9.2
  11. js 获取子节点个数
  12. 北京朝阳行政区划(朝阳区街道行政区划) 用于shp数据转为geojson格式作为ECharts地图
  13. Windows 系统服务优化指南
  14. CAD 二次开发 图层操作(3)取得指定图层下的所有对象id
  15. 快讯 | Elon Musk拟跨界做喜剧,号称要建立跨星系传媒帝国Thud!(轰!)
  16. 巡逻机器人(Patrol Roboot,UVa1600)
  17. Perl 正则表达式 模式匹配
  18. java把字符转成浮点_java 字符型转换成浮点型
  19. HTML-用户登录界面
  20. 价值链-名词解释01

热门文章

  1. python scrapy请求手机版QQ空间数据
  2. 使用Arduino开发ESP32(21):蓝牙基础说明与作为服务器使用
  3. 黑鲨android的开机密码,黑鲨研习win10系统删除开机密码的处理步骤
  4. 标准开道,金融业灾备阔步向前
  5. EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案使用详情功能-视频录像功能说明...
  6. 等保测评是什么意思?为什么要开展等级保护工作
  7. C#/.NET 在EF中连接mySql
  8. Cesium自定义shader材质实现逼真水面,支持uniforms属性实时修改
  9. VS2005中的代码格式化
  10. ununtu14安装ipset-6.24