kubernetes之健康状态检测

摘要:
busybox deploymentnamespace:app:businybox:sleep3600“]livenessProbe:exec:nginxdeployment namespace:selector:nginxplicas:metadata:app:path:path:name:nginx deploymentsnamespace:

1.说明
容器探针: kubelet 对容器执行的定期诊断
探针执行方式:

LivenessProbe:  判断容器是否存活 running状态, 如果不健康kubelet就会杀掉pod,根据重启策略RestartPolicy进行相应的处理
ReadinessProbe: 判断容器是否处于可用Ready状态, 达到ready状态表示pod可以接受请求,  如果不健康, 从service的后端endpoint列表中把pod隔离出去

诊断的三种方式:

ExecAction:在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。
TCPSocketAction:对指定端口上的容器的 IP 地址进行 TCP 检查。如果端口打开,则诊断被认为是成功的。
HTTPGetAction:对指定的端口和路径上的容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码大于等于200 且小于 400,则诊断被认为是成功的。

为什么会存在两种探针, 两种探测探测失败的方式不同, 一个是重启容器 一个是不提供服务


2.定义exec执行命令的liveness和readiness探针

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox-deployment
  namespace: default 
  labels:
    app: busybox
spec:
  selector:
    matchLabels:
      app: busybox
  replicas: 1
  template:
    metadata:
      labels:
        app: busybox

    spec:
      containers:
      - name: busybox
        image: busybox:1.28.4
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        args: ["/bin/sh","-c","touch /tmp/healthy;sleep 30; rm -f /tmp/healthy; sleep 3600"]
        livenessProbe:
          exec:
            command: ["cat","/tmp/healthy"]
          initialDelaySeconds: 5
          periodSeconds: 5
        readinessProbe:
          exec:
            command: ["cat","/tmp/healthy"]
          initialDelaySeconds: 5
          periodSeconds: 5

说明: periodSeconds 规定kubelet要每隔5秒执行一次liveness probe。 initialDelaySeconds 告诉kubelet在第一次执行probe之前要的等待5秒钟。
探针检测命令是在容器中执行 cat /tmp/healthy 命令。如果命令执行成功,将返回0,kubelet就会认为该容器是活着的并且很健康。如果返回非0值,kubelet就会杀掉这个容器并重启它。
容器启动时,执行该命令:/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
在容器生命的最初30秒内有一个 /tmp/healthy 文件,在这30秒内 cat /tmp/healthy命令会返回一个成功的返回码。30秒后, cat /tmp/healthy 将返回失败的返回码。

3.定义HTTP liveness和readiness探针

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default 
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx

    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        livenessProbe:
          httpGet:
            path: /index.html
            port: 80
            httpHeaders:
            - name: X-Custom-Header
              value: hello
          initialDelaySeconds: 5
          periodSeconds: 3
        readinessProbe:
          httpGet:
            path: /index.html
            port: 80
            httpHeaders:
            - name: X-Custom-Header
              value: hello
          initialDelaySeconds: 5
          periodSeconds: 3        

4.定义TCP liveness和readiness探针

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default 
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx

    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        livenessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 3
        readinessProbe:
          tcpSocket:
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 3

5.Probe详细配置:

initialDelaySeconds:容器启动后第一次执行探测是需要等待多少秒。
periodSeconds:执行探测的频率。默认是10秒,最小1秒。
timeoutSeconds:探测超时时间。默认1秒,最小1秒。
successThreshold:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1。对于liveness必须是1。最小值是1。
failureThreshold:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3。最小值是1。
HTTP probe 中可以给 httpGet设置其他配置项:

6.httpget其它配置项

host:连接的主机名,默认连接到pod的IP。你可能想在http header中设置"Host"而不是使用IP。
scheme:连接使用的schema,默认HTTP。
path: 访问的HTTP server的path。
httpHeaders:自定义请求的header。HTTP运行重复的header。
port:访问的容器的端口名字或者端口号。端口号必须介于1和65535之间。

免责声明:文章转载自《kubernetes之健康状态检测》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python中的快速排序MySQL 主从复制:基于二进制文件复制配置详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Docker容器日志查看与清理(亲测有效)

 https://blog.csdn.net/yjk13703623757/article/details/80283729 1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。  2. 解决方法 2.1 找出Docker容器日志 在...

12.django缓存+图片验证码

1. django缓存设置 django的六种缓存:https://www.cnblogs.com/xiaonq/p/7978402.html#i6 1.1 Django缓存作用 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显 缓存将一个某个views的返回值保存至内存或者memcache中,5分钟...

Delphi 2009 泛型容器单元(Generics.Collections)[2]: TQueue<T>

TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出.TQueue 主要有三个方法、一个属性:Enqueue(入列)、Dequeue(出列)、Peek(查看下一个要出列的元素);Count(元素总数). -----------------------------------------------------...

Harbor redis容器启动失败

  由于异常断电,倒是harbor部分容器消亡了,因此根据harbor.yaml配置文件查看数据命令并进行必要的备份,然后通过./install.sh 重新将容器创建,之后发现有redis容器启动状态一直为“restarting状态”,查看日志 有如下报错 reids 报错 redis-server Short read or OOM loading D...

ParseCrontab类,解析时间规则

<?php /** * Created by PhpStorm. * User: ClownFish 187231450@qq.com * Date: 14-12-27 * Time: 上午11:59 */ class ParseCrontab { static public $error; /** * 解析...

转载:docker容器与虚拟机的区别

  各种虚拟机技术开启了云计算时代;而Docker,作为下一代虚拟化技术,正在改变我们开发、测试、部署应用的方式。那虚拟机与Docker究竟有何不同呢? 首先,大家需要明确一点,Docker容器不是虚拟机! 第一次接触Docker的时候,我把它比做一种轻量级的虚拟机。这样做无可厚非,因为Docker最初的成功秘诀,正是它比虚拟机更节省内存,启动更快。Doc...