删除|23 个必知必会的 Kubernetes 高频面试题( 二 )


2) ReadinessProbe探针
同样是可以根据用户自定义规则来判断pod是否健康 , 如果探测失败 , 控制器会将此pod从对应service的endpoint列表中移除 , 从此不再将任何请求调度到此Pod上 , 直到下次探测成功 。
3) startupProbe探针
启动检查机制 , 应用一些启动缓慢的业务 , 避免业务长时间启动而被上面两类探针kill掉 , 这个问题也可以换另一种方式解决 , 就是定义上面两类探针机制时 , 初始化时间定义的长一些即可 。
每种探测方法能支持以下几个相同的检查参数 , 用于设置控制检查时间:

  • initialDelaySeconds:初始第一次探测间隔 , 用于应用启动的时间 , 防止应用还没启动而健康检查失败
  • periodSeconds:检查间隔 , 多久执行probe检查 , 默认为10s;
  • timeoutSeconds:检查超时时长 , 探测应用timeout后为失败;
  • successThreshold:成功探测阈值 , 表示探测多少次为健康正常 , 默认探测1次 。
上面两种探针都支持以下三种探测方法:
1)Exec: 通过执行命令的方式来检查服务是否正常 , 比如使用cat命令查看pod中的某个重要配置文件是否存在 , 若存在 , 则表示pod健康 。 反之异常 。
Exec探测方式的yaml文件语法如下:
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:         #选择livenessProbe的探测机制
      exec:                      #执行以下命令
        command:  
        - cat  
        - /tmp/healthy  
      initialDelaySeconds: 5          #在容器运行五秒后开始探测
      periodSeconds: 5               #每次探测的时间间隔为5秒

在上面的配置文件中 , 探测机制为在容器运行5秒后 , 每隔五秒探测一次 , 如果cat命令返回的值为“0” , 则表示健康 , 如果为非0 , 则表示异常 。
2)Httpget: 通过发送http/htps请求检查服务是否正常 , 返回的状态码为200-399则表示容器健康(注http get类似于命令curl -I) 。
Httpget探测方式的yaml文件语法如下:
spec:  
  containers:  
  - name: liveness  
    image: k8s.gcr.io/liveness  
    livenessProbe:              #采用livenessProbe机制探测
      httpGet:                  #采用httpget的方式
    scheme:HTTP         #指定协议 , 也支持https
        path: /healthz          #检测是否可以访问到网页根目录下的healthz网页文件