首页 > 其他分享 >k8s进阶4-应用无损发布之健康检查

k8s进阶4-应用无损发布之健康检查

时间:2023-06-24 19:32:12浏览次数:40  
标签:容器 进阶 阈值 busybox 探针 5s 探测 健康检查 k8s

一、配置探针

kubernetes 提供了三种探针(支持exec、tcp和http方式)来探测容器的状态:

LivenessProbe: 容器存活性检查,用于判断容器是否健康,告诉 kubelet 一个容器什么时候处于不健康的状态。如果 LivenessProbe 探针探测到容器不健康,则 kubelet 将删除该容器,并根据容器的重启策略做相应的处理。如果一个容器不包含 LivenessProbe 探针,那么 kubelet 认为该容器的 LivenessProbe 探针返回的值永远是 Success;

ReadinessProbe: 容器就绪性检查,用于判断容器是否启动完成且准备接收请求。如果ReadinessProbe探针探测到失败,Endpoint Controller 将从 Service 的 Endpoint 中删除包含该容器所在 Pod 的 IP 地址的Endpoint条目。如果容器不提供就绪态探针,则默认状态为 Success。

startupProbe:

容器启动检查,探测容器中的应用是否已经启动。如果提供了启动探针,则所有其他探针都会被禁用,直到此探针成功为止。如果启动探测失败,kubelet 将杀死容器,而容器按照重启策略进行重启。 如果容器没有提供启动探测,则默认状态为 Success。

探针的配置非常灵活,用户可以指定探针的探测频率、探测成功阈值、探测失败阈值等。各参数的含义和配置方法可参考文档 Configure Liveness and Readiness Probes

1.1、exec命令型:

livenessProbe:
  exec:
    command:
      - curl
      - 127.0.0.1:8000
  initialDelaySeconds: 5  #第一次探测时等待5s
  periodSeconds: 5  #每5s执行一次
  failureThreshold: 2 #失败的阈值
  successThreshold: 1  #成功一次表示正常
  timeoutSeconds: 5 #  执行检查指令的超时时间
readinessProbe:
  exec:             #退出0 表示成功
    command:
      - curl
      - 127.0.0.1:8000  
  initialDelaySeconds: 5  #第一次探测时等待5s
  periodSeconds: 5  #每5s执行一次
  failureThreshold: 2 #失败的阈值
  successThreshold: 1  #成功的阈值
  timeoutSeconds: 3 #单次执行超时的时间

1.2、http型

livenessProbe:
  httpGet:
    path: /
    port: 8000
    scheme: HTTP    # 返回200表示正常
  initialDelaySeconds: 5  #第一次探测时等待5s
  periodSeconds: 5  #每5s执行一次
  failureThreshold: 2 #失败的阈值
  successThreshold: 1  #成功的阈值
  timeoutSeconds: 3 #单次执行超时的时间 
readinessProbe:
  httpGet:
    path: /
    port: 8000
    scheme: HTTP
  initialDelaySeconds: 5  #第一次探测时等待5s
  periodSeconds: 5  #每5s执行一次
  failureThreshold: 2 #失败的阈值
  successThreshold: 1  #成功的阈值
  timeoutSeconds: 3 #单次执行超时的时间

1.3、tcp型

livenessProbe:
  tcpSocket:
    port: 8000
  initialDelaySeconds: 5  #第一次探测时等待5s
  periodSeconds: 5  #每5s执行一次
  failureThreshold: 2 #失败的阈值
  successThreshold: 1  #成功的阈值
  timeoutSeconds: 3 #单次执行超时的时间
readinessProbe:
  tcpSocket:
    port: 8000
  initialDelaySeconds: 5  #第一次探测时等待5s
  periodSeconds: 5  #每5s执行一次
  failureThreshold: 2 #失败的阈值
  successThreshold: 1  #成功的阈值
  timeoutSeconds: 3 #单次执行超时的时间

1.4、startup案例

livenessProbe:
  httpGet:
    path: /test
    prot: 80
  failureThreshold: 1
  initialDelay:10
  periodSeconds: 10

startupProbe:
  httpGet:
    path: /test
    prot: 80
  failureThreshold: 10
  initialDelay:10
  periodSeconds: 10

注意点:上面的配置是只有startupProbe探测成功后再交给livenessProbe。

我们startupProbe配置的是10*10s,也就是说只要应用在100s内启动都是OK的,而且应用挂掉了10s就会发现问题。

例子:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:       
      - name: web
        image: python
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8000  
        args:
        - "python"
        - "-m"
        - "http.server"
        livenessProbe:
          httpGet:
            path: /
            port: 8000
            scheme: HTTP
          initialDelaySeconds: 5  #第一次探测时等待5s
          periodSeconds: 5  #每5s执行一次
          failureThreshold: 2 #失败的阈值
          successThreshold: 1  #成功的阈值
          timeoutSeconds: 3 #单次执行超时的时间 
        readinessProbe:
          httpGet:
            path: /
            port: 8000
            scheme: HTTP
          initialDelaySeconds: 5  #第一次探测时等待5s
          periodSeconds: 5  #每5s执行一次
          failureThreshold: 2 #失败的阈值
          successThreshold: 1  #成功的阈值
          timeoutSeconds: 3 #单次执行超时的时间

二、minReadySeconds

minReadySeconds参数用于控制pod在running状态后,到真正上线之间的观察时间。

默认情况下,一旦新创建的 pod 变成就绪状态 k8s 就会认为该 pod 是可用的,从而将老的 pod 删除掉。但有时问题可能会在新 pod 真正处理用户请求时才暴露,因此一个更稳健的做法是设置合理的minReadySeconds参数值,当某个新 pod 就绪后对其观察一段时间再删掉老的 pod。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox
spec:
  minReadySeconds: 10
  strategy:
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  selector:
    matchLabels:
      app: busybox
  replicas: 2
  template:
    metadata:
      labels:
        app: busybox
    spec:
      terminationGracePeriodSeconds: 60
      containers:
        - name: busybox
          image: busybox:1.31.0
          command: ["/bin/sh", "-c", "sleep 3600"]

三、terminationGracePeriodSeconds

定义优雅关闭的宽限期,即在收到停止请求后,有多少时间来进行资源释放或者做其它操作,如果到了最大时间还没有停止,会被强制结束。(默认 30 秒)

验证:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: busybox
spec:
  minReadySeconds: 10
  strategy:
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  selector:
    matchLabels:
      app: busybox
  replicas: 2
  template:
    metadata:
      labels:
        app: busybox
    spec:
      terminationGracePeriodSeconds: 60
      containers:
        - name: busybox
          image: busybox:1.31.0
          command: ["/bin/sh", "-c", "sleep 3600"]

标签:容器,进阶,阈值,busybox,探针,5s,探测,健康检查,k8s
From: https://blog.51cto.com/u_13622854/6541579

相关文章

  • k8s 深入篇———— k8s 的pod[五]
    前言简单整理一下pod的相关知识。正文为什么我们需要pod。前面我们知道了k8s一个最重要的作用是解决容器的编排功能,那么为什么有一个pod的东西。这就是实际中遇到的问题。那就是容器和容器之间,那就是如何表达容器和容器之间的关系。就是有些场景下,容器与容器之间是存在关系......
  • k8s驱逐篇(6)-kube-controller-manager驱逐-NodeLifecycleController源码分析
    概述k8sv1.16版本中NodeController已经分为了NodeIpamController与NodeLifecycleController,本文主要介绍NodeLifecycleController。NodeLifecycleController主要功能有:(1)定期检查node的心跳上报,某个node间隔一定时间都没有心跳上报时,更新node的readycondition值为false或unkno......
  • 03-指针进阶
    目录一.字符指针1.1使用方式一1.2使用方式二1.3面试考点二.数组指针2.1数组指针的表示形式2.2数组指针的使用2.3内容拓展三.函数指针3.1区分函数指针和指针函数3.2看两个有趣的代码3.2函数指针数组四.回调函数4.1什么是回调函数4.2应用案例,实现qsort可满足任意类......
  • K8S安装记录
    https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 在master和worker节点上安装containerd、kubelet、kubeadm、kubectllsmod|grepbr_n......
  • 机器学习从入门到进阶所需学习资料-包括书、视频、源码
    本文整理了一些入门到进阶机器学习所需要的一些免费的精品视频课程,一些优质的书籍和经典的代码实战项目。视频1.1吴恩达老师机器学习课程:•Coursera•网易云课堂•英文笔记•中文笔记、字幕1.2吴恩达深度学习课程•Coursera•网易云课堂•笔记1.3斯坦福CS231n:Co......
  • k8s部署nacos
    首先创建数据库nacos执行以下语句CREATETABLE`config_info`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'id',`data_id`varchar(255)NOTNULLCOMMENT'data_id',`group_id`varchar(255)DEFAULTNULL,`content`longtextNOTNULLCOMME......
  • 【九】解决粘包的进阶方法
    【九】解决粘包的进阶方法为字节流加上自定义固定长度报头,报头中包含字节流长度,然后一次send到对端,对端在接收时,先从缓存中取出定长的报头,然后再取真实数据struct模块该模块可以把一个类型,如数字,转成固定长度的bytesstruct.pack(‘i’,1111111111111)。。。。。。。。。......
  • Vue进阶(贰零零):window.onresize事件在vue项目中的应用
    属性window.onresize属性可以用来获取或设置当前窗口的resize事件的事件处理函数。在窗口大小改变之后,就会触发resize事件.//vue页面<template><divid='echart'>报表</div></template><script>exportdefault{data(){return{};......
  • 强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛
    强化学习从基础到进阶-常见问题和面试必知必答[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战1.核心词汇概率函数和奖励函数:概率函数定量地表达状态转移的概率,其可以表现环境的随机性。但是实际上,我们经常处于一个未知的环境中,即概率函数和奖励......
  • 强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差
    强化学习从基础到进阶-案例与实践[3]:表格型方法:Sarsa、Qlearning;蒙特卡洛策略、时序差分等以及Qlearning项目实战策略最简单的表示是查找表(look-uptable),即表格型策略(tabularpolicy)。使用查找表的强化学习方法称为表格型方法(tabularmethod),如蒙特卡洛、Q学习和Sarsa。本章通过最......