大部分的应用程序我们在部署的时候都会适当的添加监控,对于运行载体容器则更应该如此。kubernetes提供了 liveness probes来检查我们的应用程序。它是由节点上的kubelet定期执行的。

首先说一下Pod的整个生命阶段:

  • Pending:表示集群系统正在创建Pod,但是Pod中的container还没有全部被创建,这其中也包含集群为container创建网络,或者下载镜像的时间;
  • Running:表示pod已经运行在一个节点商量,并且所有的container都已经被创建。但是并不代表所有的container都运行,它仅仅代表至少有一个container是处于运行的状态或者进程出于启动中或者重启中;
  • Succeeded:所有Pod中的container都已经终止成功,并且没有处于重启的container;
  • Failed:所有的Pod中的container都已经终止了,但是至少还有一个container没有被正常的终止(其终止时的退出码不为0)

对于liveness probes的结果也有几个固定的可选项值:

  • Success:表示通过检测
  • Failure:表示没有通过检测
  • Unknown:表示检测没有正常进行

Liveness Probe的种类:

  • ExecAction:在container中执行指定的命令。当其执行成功时,将其退出码设置为0;
  • TCPSocketAction:执行一个TCP检查使用container的IP地址和指定的端口作为socket。如果端口处于打开状态视为成功;
  • HTTPGetAcction:执行一个HTTP默认请求使用container的IP地址和指定的端口以及请求的路径作为url,用户可以通过host参数设置请求的地址,通过scheme参数设置协议类型(HTTP、HTTPS)如果其响应代码在200~400之间,设为成功。

当前kubelet拥有两个检测器,他们分别对应不通的触发器(根据触发器的结构执行进一步的动作):

  • Liveness Probe:表示container是否处于live状态。如果 LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉 container,并根据RestarPolicy进行进一步的操作。默认情况下LivenessProbe在第一次检测之前初始化值为 Success,如果container没有提供LivenessProbe,则也认为是Success;
  • ReadinessProbe:表示container是否以及处于可接受service请求的状态了。如 果ReadinessProbe失败,endpoints controller将会从service所匹配到的endpoint列表中移除关于这个container的IP地址。因此对于Service匹配到的 endpoint的维护其核心是ReadinessProbe。默认Readiness的初始值是Failure,如果一个container没有提供 Readiness则被认为是Success。

对于LivenessProbe和ReadinessProbe用法都一样,拥有相同的参数和相同的监测方式。

  • initialDelaySeconds:用来表示初始化延迟的时间,也就是告诉监测从多久之后开始运行,单位是秒
  • timeoutSeconds: 用来表示监测的超时时间,如果超过这个时长后,则认为监测失败

当前对每一个Container都可以设置不同的restartpolicy,有三种值可以设置:

  • Always: 只要container退出就重新启动
  • OnFailure: 当container非正常退出后重新启动
  • Never: 从不进行重新启动

如果restartpolicy没有设置,那么默认值是Always。如果container需要重启,仅仅是通过kubelet在当前节点进行container级别的重启。

最后针对LivenessProbe如何使用,请看下面的几种方式,如果要使用ReadinessProbe只需要将livenessProbe修改为readinessProbe即可:

apiVersion: v1
kind: Pod
metadata:
name: probe-exec
namespace: coocla
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
exec:
command:
- cat
- /tmp/health
initialDelaySeconds: 5
timeoutSeconds: 1
---
apiVersion: v1
kind: Pod
metadata:
name: probe-http
namespace: coocla
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
httpGet:
path: /
port: 80
host: www.baidu.com
scheme: HTTPS
initialDelaySeconds: 5
timeoutSeconds: 1
---
apiVersion: v1
kind: Pod
metadata:
name: probe-tcp
namespace: coocla
spec:
containers:
- name: nginx
image: nginx
livenessProbe:
initialDelaySeconds: 5
timeoutSeconds: 1
tcpSocket:
port: 80

关于kubectl资源创建的语法可以参考: kubernetes技术学习之—Construct语法

我们使用上面的construct创建资源:

kubectl create -f probe.yaml
kubectl get event

通过event我们可以发现对应的container由于probe监测失败一直处于循环重启中,其事件原因:unhealthy

查看原文:http://www.zoues.com/index.php/2016/02/27/dcosk8sliveness/

DCOS之k8s的容器监测探针相关推荐

  1. Kubernetes(K8s)容器设计模式实践案例 – 分散收集模式

    <Kubernetes与云原生应用>专栏是InfoQ向轻元科技首席架构师王昕约稿的系列 文章.本专栏包含8篇内容,将会从介绍和分析Kubernetes系统以及云原生应用 入手,逐步推出基于 ...

  2. K8S查看容器日志、进入容器内部

    K8S查看容器日志.进入容器内部 前言 常用命令 查看所有正在运行的pod 查看容器日志 查看pod的详细信息,以yaml格式或json格式显示 查看pod的描述信息 查看node或pod的资源使用情 ...

  3. k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?

    k8s中有很多的api,我们的yaml文件开头一定要申明一个apiversion,怎么知道该使用哪个api呢?如何来选择正确的api呢? 我们又该如何来开发一个基于k8s的容器管理平台,开发k8s容器 ...

  4. 浅谈K8S的容器管理

    一.引言 目录 一.引言 Kubernetes(K8S)基本概念 K8S是什么? K8S对象管理 对象规约(Spec)与状态(Status) 标签和选择算符 理解命名空间 名字空间 何时使用多个名字空 ...

  5. 2021年最新 k8s安装部署步骤 kubernetes从入门到实践 K8S实战容器化迁移实战教程 K8S存储之Ceph分布式存储系统 K8S架构师实战指南

    2021年最新 k8s安装部署步骤 kubernetes从入门到实践 K8S实战容器化迁移实战教程 K8S存储之Ceph分布式存储系统 K8S架构师实战指南

  6. k8s探针检测php,k8s实践11:kubernetes监测探针简单测试

    探针实践 1.两种探针 readiness probe(就绪探针) 监测容器是否就绪?只有pod里的容器就绪,kubelet才会认为pod处于就绪状态. 就绪探针的作用是控制哪些pod可以作为svc的 ...

  7. k8s、容器监控检查及恢复机制、http get方式探针,超细详解

    文章目录 容器监控检查及恢复机制 http get方式探针 POD 的恢复策略 容器监控检查及恢复机制 在 k8s 中,可以为 Pod 里的容器定义一个健康检查"探针"(Probe ...

  8. K8s Liveness/Readiness/Startup 探针机制

    官方参考文档 目录 前言 一.默认健康检测 1.1 restartPolicy 1.2 测试案例 二.Liveness 三.Readiness 四.Startup 前言 玩过 Docker Swarm ...

  9. 从零开始入门 K8s | 理解容器运行时接口 CRI

    作者 | 知谨 阿里云工程师 本文整理自<CNCF x Alibaba 云原生技术公开课>第 28 讲,点击直达课程页面. 关注"阿里巴巴云原生"公众号,回复关键词** ...

最新文章

  1. linux 内核 时间片,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...
  2. 高速跟踪--High-Speed Tracking-by-Detection Without Using Image Information
  3. 简单介绍Linux下安装Tomcat的步骤
  4. boost::allocator_value_type的实例
  5. Hadoop2.4.1入门实例:MaxTemperature
  6. react复制内容到剪贴板
  7. c++ helloworld_《Linux设备驱动程序》(二)——Hello World
  8. 装建津说计算机丢失,宽带连接上网时老是连接不上说缺少netcfg.hlp文件怎么办...
  9. android 电池(三):android电池系统
  10. 关于c# 静态构造函数的说明
  11. linux 按序号创建文件夹,在Linux终端中创建M3U播放列表的方法
  12. 凸优化第六章逼近与拟合 作业题
  13. Java探索之旅(18)——多线程(2)
  14. selenium之 富文本框和editor编辑器的处理
  15. HTML5 颜色及透明度
  16. js实现每次调用一个函数自动加1
  17. 涉密计算机外送维修,涉密计算机及涉密介质维修
  18. matplotlib——画布分辨率和尺寸
  19. Windows 10的TPM模块到底是不是美国全球监控体系的奠基石?
  20. rv1109/rv1126 编译并部署QT项目(详解)

热门文章

  1. win7计算机窗口像xp,在Win7系统中登录界面变成Xp样式的方法
  2. aspx如何获取aspx.cs中定义的变量、方法;
  3. BZOJ2876: [Noi2012]骑行川藏
  4. Vue Uncaught SyntaxError: Unexpected token ‘<‘ 路由问题
  5. 计算机专业毕业设计答辩ppt案例,计算机专业 毕业设计答辩PPT.ppt
  6. K_A11_008 基于STM32等单片机驱动SHT30和SHT31 串口与OLED0.96双显示
  7. 传奇私服中检查人物穿戴指定装备的两种方法
  8. 什么是虚拟机管理程序hypervisor,什么是hypervisor type 1, hypervisor type 2
  9. ping android模拟器,Android模拟器之间的网络通信及Ping主机
  10. 怎么挑选一部适合自己的全景相机?