DCOS之k8s的容器监测探针
大部分的应用程序我们在部署的时候都会适当的添加监控,对于运行载体容器则更应该如此。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的容器监测探针相关推荐
- Kubernetes(K8s)容器设计模式实践案例 – 分散收集模式
<Kubernetes与云原生应用>专栏是InfoQ向轻元科技首席架构师王昕约稿的系列 文章.本专栏包含8篇内容,将会从介绍和分析Kubernetes系统以及云原生应用 入手,逐步推出基于 ...
- K8S查看容器日志、进入容器内部
K8S查看容器日志.进入容器内部 前言 常用命令 查看所有正在运行的pod 查看容器日志 查看pod的详细信息,以yaml格式或json格式显示 查看pod的描述信息 查看node或pod的资源使用情 ...
- k8s部署-48-k8s中如何选择使用哪个api,开发一个k8s的容器管理平台的思路是什么?
k8s中有很多的api,我们的yaml文件开头一定要申明一个apiversion,怎么知道该使用哪个api呢?如何来选择正确的api呢? 我们又该如何来开发一个基于k8s的容器管理平台,开发k8s容器 ...
- 浅谈K8S的容器管理
一.引言 目录 一.引言 Kubernetes(K8S)基本概念 K8S是什么? K8S对象管理 对象规约(Spec)与状态(Status) 标签和选择算符 理解命名空间 名字空间 何时使用多个名字空 ...
- 2021年最新 k8s安装部署步骤 kubernetes从入门到实践 K8S实战容器化迁移实战教程 K8S存储之Ceph分布式存储系统 K8S架构师实战指南
2021年最新 k8s安装部署步骤 kubernetes从入门到实践 K8S实战容器化迁移实战教程 K8S存储之Ceph分布式存储系统 K8S架构师实战指南
- k8s探针检测php,k8s实践11:kubernetes监测探针简单测试
探针实践 1.两种探针 readiness probe(就绪探针) 监测容器是否就绪?只有pod里的容器就绪,kubelet才会认为pod处于就绪状态. 就绪探针的作用是控制哪些pod可以作为svc的 ...
- k8s、容器监控检查及恢复机制、http get方式探针,超细详解
文章目录 容器监控检查及恢复机制 http get方式探针 POD 的恢复策略 容器监控检查及恢复机制 在 k8s 中,可以为 Pod 里的容器定义一个健康检查"探针"(Probe ...
- K8s Liveness/Readiness/Startup 探针机制
官方参考文档 目录 前言 一.默认健康检测 1.1 restartPolicy 1.2 测试案例 二.Liveness 三.Readiness 四.Startup 前言 玩过 Docker Swarm ...
- 从零开始入门 K8s | 理解容器运行时接口 CRI
作者 | 知谨 阿里云工程师 本文整理自<CNCF x Alibaba 云原生技术公开课>第 28 讲,点击直达课程页面. 关注"阿里巴巴云原生"公众号,回复关键词** ...
最新文章
- linux 内核 时间片,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...
- 高速跟踪--High-Speed Tracking-by-Detection Without Using Image Information
- 简单介绍Linux下安装Tomcat的步骤
- boost::allocator_value_type的实例
- Hadoop2.4.1入门实例:MaxTemperature
- react复制内容到剪贴板
- c++ helloworld_《Linux设备驱动程序》(二)——Hello World
- 装建津说计算机丢失,宽带连接上网时老是连接不上说缺少netcfg.hlp文件怎么办...
- android 电池(三):android电池系统
- 关于c# 静态构造函数的说明
- linux 按序号创建文件夹,在Linux终端中创建M3U播放列表的方法
- 凸优化第六章逼近与拟合 作业题
- Java探索之旅(18)——多线程(2)
- selenium之 富文本框和editor编辑器的处理
- HTML5 颜色及透明度
- js实现每次调用一个函数自动加1
- 涉密计算机外送维修,涉密计算机及涉密介质维修
- matplotlib——画布分辨率和尺寸
- Windows 10的TPM模块到底是不是美国全球监控体系的奠基石?
- rv1109/rv1126 编译并部署QT项目(详解)
热门文章
- win7计算机窗口像xp,在Win7系统中登录界面变成Xp样式的方法
- aspx如何获取aspx.cs中定义的变量、方法;
- BZOJ2876: [Noi2012]骑行川藏
- Vue Uncaught SyntaxError: Unexpected token ‘<‘ 路由问题
- 计算机专业毕业设计答辩ppt案例,计算机专业 毕业设计答辩PPT.ppt
- K_A11_008 基于STM32等单片机驱动SHT30和SHT31 串口与OLED0.96双显示
- 传奇私服中检查人物穿戴指定装备的两种方法
- 什么是虚拟机管理程序hypervisor,什么是hypervisor type 1, hypervisor type 2
- ping android模拟器,Android模拟器之间的网络通信及Ping主机
- 怎么挑选一部适合自己的全景相机?