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. 【HTML5】video 标签禁用自带的下载按钮

    h5自带的 video标签 ,会有个下载按钮,有时候想避免,就可以利用样式的方法 <style type="text/css"> video::-internal-me ...

  2. 19款Windows实用软件推荐,满满的干货,总有一款是你必备的

    https://post.smzdm.com/p/745799/ 追加修改(2018-08-20 12:28:23):一些追加内容: 很多人都在吐槽为什么推荐Clover,这里我说明一下,就我了解到的 ...

  3. php操作redis案例

    <?php     //实例化     $redis = new Redis();     //连接服务器     //默认端口是6379,可不写     $redis->connect( ...

  4. 升级 phpstud y中的 mysql 版本

    1.找到你 phpstudy 安装目录,找到 MySQL 文件夹 (我自己的实际目录  D:\pc\phpstudy\MySQL),关掉退出 phpstudy服务,删除 MySQL 文件夹里的文件,如 ...

  5. laravel 5.4 导出excel表格

    1.在laravel根目录下面找到一个composer.json文件 打开并在require下面加上一句话,如图所示: 注:以后这个excel的版本号可能还会修改 2.执行 composer inst ...

  6. Linux手动添加swap分区

    转自:https://blog.csdn.net/whatday/article/details/51024571 为什么需要swap 根据Redhat公司的建议,Linux系统swap分区最适合的大 ...

  7. 剑指offer——python【第34题】第一个只出现一次的字符

    题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写) 思路 遍历字符串,找到那个第 ...

  8. Windows下64位Apache+PHP+MySQL配置

    软件下载 目前,Apache和PHP均未出现官方的64位版本. Apache 64位: http://files.cnblogs.com/liangjie/httpd-2.2.19-win64.rar ...

  9. 日期控件——my97

    一.官网 http://www.my97.net/index.asp 下载: //下文已更新与bootstrap样式的结合 二.demo演示 实际使用时请注意文件引入的实际位置: [补充] 数据库字段 ...

  10. Spring Boot 配置_yaml语法介绍 day02

    一.Spring Boot 的全局配置文件(application.properties.application.yml) 1.这两种配置文件是SpringBoot 支持的对默认配置修改的格式.命名和 ...