Docker Kubernetes 健康检查

  • 官方文档:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/

提供Probe探测机制,有以下两种类型:

  • livenessProbe:如果检查失败,将杀死容器,然后根据Pod的重启策略来决定是否重启(根据Pod的restartPolicy来操作)。
  • readinessProbe:如果检查失败,Kubernetes会把Pod从服务代理的分发后端剔除。

Probe支持以下三种检查方法:

  • httpGet
  • 发送HTTP请求,返回200-400范围状态码为成功。
  • exec
  • 执行Shell命令返回状态码是0为成功。
  • tcpSocket
  • 发起TCP Socket建立成功。判断端口有没有打开

环境:

  • 系统:Centos 7.4 x64
  • Docker版本:18.09.0
  • Kubernetes版本:v1.8
  • 管理节点:192.168.1.79
  • 工作节点:192.168.1.78
  • 工作节点:192.168.1.77

案例一

1、管理节点:创建yaml文件

vim check.yaml

apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.10
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /index.html
port: 80
# api版本
apiVersion: v1
# 指定创建资源对象
kind: Pod
# 源数据、可以写name,命名空间,对象标签
metadata:
# 服务名称
name: nginx-pod
# 标签
labels:
# 标签名
app: nginx
# 容器资源信息
spec:
# 容器管理
containers:
# 容器名称
- name: nginx
# 容器镜像
image: nginx:1.10
# 端口管理
ports:
# 指定暴露端口
- containerPort: 80
# 健康检查模式(httpGet、exec、tcpSocket)
livenessProbe:
# 选择健康检查类型
httpGet:
# 选择检查文件
path: /index.html
# 选择检查暴露端口
port: 80

文件注释

2、管理节点:创建Pod

kubectl create -f check.yaml
命令:kubectl describe pods nginx-pod

# 探测端口为80,探测文件名index.html,timeout超市时间为一秒,period每10秒探测一次
Liveness: http-get http://:80/index.html delay=0s timeout=1s period=10s #success=1 #failure=3

查看健康检查pod状态

案例二

语法格式

# 语法格式
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: k8s.gcr.io/busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
# 在容器启动五秒之后开始执行健康检查
initialDelaySeconds: 5
# 每隔多长时间执行一次
periodSeconds: 5

1、通过官方实例测试健康检查

apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5

vim pod4.yaml

2、执行

kubectl create -f pod4.yaml

3、查看测试

kubectl get pods

经过一段时间检查重启

4、查看事件

kubectl describe pod liveness-exec

....
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 5m8s default-scheduler Successfully assigned default/liveness-exec to 192.168.1.110
Normal Pulled 2m35s (x3 over 5m7s) kubelet, 192.168.1.110 Successfully pulled image "busybox"
Normal Created 2m35s (x3 over 5m6s) kubelet, 192.168.1.110 Created container
Normal Started 2m34s (x3 over 5m6s) kubelet, 192.168.1.110 Started container
Warning Unhealthy 112s (x9 over 4m32s) kubelet, 192.168.1.110 Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory
Normal Pulling 81s (x4 over 5m7s) kubelet, 192.168.1.110 pulling image "busybox"
Normal Killing 6s (x4 over 3m51s) kubelet, 192.168.1.110 Killing container with id docker://liveness:Container failed liveness probe.. Container will be killed and recreated.

Docker Kubernetes 健康检查的更多相关文章

  1. Kubernetes 健康检查的两种机制:Liveness 探测和 Readiness 探测

    Kubernetes 健康检查的两种机制:Liveness 探测和 Readiness 探测,并实践了健康检查在 Scale Up 和 Rolling Update 场景中的应用.kubelet使用启 ...

  2. kubernetes健康检查

    有时候容器在running的状态,但是里面的服务挂了,这个就难办了,所以k8s提供了一种检查服务是否健康的方法 Liveness Probe的种类: ● ExecAction:在container中执 ...

  3. docker HealthCheck健康检查

    需求 最近遇到的问题:线上跑的一个 Node 镜像是在运行的,状态为 up ,但是访问报 502 ,重启镜像无效,重新拉了个镜像运行才恢复正常.于是想研究下如何从应用层面去检查容器的状态 为什么 do ...

  4. docker 构建带健康检查的redis镜像

    =============================================== 2018/11/5_第1次修改                       ccb_warlock == ...

  5. Java应用在docker环境配置容器健康检查

    在<极速体验docker容器健康>一文已体验了docker容器健康检查功能,今天就来给java应用的容器加入健康检查,使应用的状态随时都可以被监控和查看. 实战环境信息 操作系统:macO ...

  6. Kubernetes应用健康检查

    目录贴:Kubernetes学习系列 在实际生产环境中,想要使得开发的应用程序完全没有bug,在任何时候都运行正常,几乎 是不可能的任务.因此,我们需要一套管理系统,来对用户的应用程序执行周期性的健康 ...

  7. Kubernetes中Pod的健康检查

    本文介绍 Pod 中容器健康检查相关的内容.配置方法以及实验测试,实验环境为 Kubernetes 1.11,搭建方法参考kubeadm安装kubernetes V1.11.1 集群 0. 什么是 C ...

  8. Kubernetes Pod 健康检查

    参考文档: https://jimmysong.io/kubernetes-handbook/guide/configure-liveness-readiness-probes.html 一.Pod的 ...

  9. Kubernetes 健康状态检查(九)

    强大的自愈能力是 Kubernetes 这类容器编排引擎的一个重要特性.自愈的默认实现方式是自动重启发生故障的容器.除此之外,用户还可以利用 Liveness 和 Readiness 探测机制设置更精 ...

随机推荐

  1. 字符串匹配的 Boyer-Moore 算法

    上一篇文章,我介绍了 字符串匹配的KMP算法 但是,它并不是效率最高的算法,实际采用并不多.各种文本编辑器的” 查找” 功能(Ctrl+F),大多采用 Boyer-Moore 算法. 下面,我根据 M ...

  2. C#队列Queue实现一个简单的电商网站秒杀程序

    电商的秒杀和抢购,对程序员来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要. 我们 ...

  3. HTML5 移动端的上下左右滑动问题

    在移动端页面上,如果要实现[顶部轮播,手指触摸左右滑动]我的方案是,通过监听滑动,阻止默认事件来完成 div.addEventListener('touchmove',function(event){ ...

  4. Java课程寒假之开发记账本软件(网页版)之一

    一.制定网页版记账本的基础功能 首先是下载了几个记账本APP,大致地看了一下记账本的功能:添加记录(支出,收入,自定义模板),查询流水(分类查询),账户. 二.开始做出框架 鉴于记账本有上面的功能,所 ...

  5. 【C++语法基础】实验1

    实验内容: 题目:输入 1~7 的整数,如果输入的是 1~5,则输出“workday. Let’s work hard”:如果输入的是 6~7,则输出“weekend. Let’s have a re ...

  6. jquery的设计亮点

    jquery的亮点我目前学习到一下几点: 1.封装库利用window的挂载实现闭包. 库一定要封装来防止变量污染全局,方式要么对象,要么立即执行函数.jquery用了立即执行函数.因为立即执行函数里的 ...

  7. 怎么访问不在网站目录下文件(iis虚拟目录设置)

    很多时候,上传的文件多了,架设服务器当初设定的主目录所在盘空间往往就不够了,怎么办?这就需要设置虚拟目录.虚拟目录就是将其他目录以映射的方式虚拟到该FTP服务器的主目录下,这样,一个FTP服务器的主目 ...

  8. 利用python+selenium在pycharm下进行页面登陆的半自动测试

    很久没有写了,现在正式入职,准备好好干,加油! 我的第一个较正式的测试代码: from selenium import webdriverimport unittestimport sysimport ...

  9. Android无法删除项目+导入项目报错

    Android无法删除项目+导入项目报错 Android无法删除项目:关闭eclipse或关闭电脑,然后重启,继续删除就可以了 导入项目报错:右键–>配置–>中就可以看到了,更改一下就可以 ...

  10. POJ 3078 - Shuffle'm Up - [模拟题]

    题目链接:http://poj.org/problem?id=3087 Description A common pastime for poker players at a poker table ...