zoukankan      html  css  js  c++  java
  • kubernetes之健康状态检测

    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之间。
    

    参考文档:https://www.jianshu.com/p/1919f8e2f12d

  • 相关阅读:
    理解jquery的$.extend()、$.fn和$.fn.extend()
    Angularjs,WebAPI 搭建一个简易权限管理系统
    ASP.NET MVC Boilerplate简介
    写jQuery插件
    给Asp.Net MVC及WebApi添加路由优先级
    Oracle数据库之开发PL/SQL子程序和包
    Git 1.9.5.msysgit.1
    快速解读GC日志(转)
    Git & Github 一页简明笔记(转)main
    用python3.x与mysql数据库构建简单的爬虫系统(转)
  • 原文地址:https://www.cnblogs.com/lovelinux199075/p/11284295.html
Copyright © 2011-2022 走看看