博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二进制安装kubernetes1.14.1-pod配置清单之健康检测06
阅读量:6214 次
发布时间:2019-06-21

本文共 4388 字,大约阅读时间需要 14 分钟。

健康状态检测

[root@k8s-master01 ~]# kubectl  explain pods.spec.containers.lifecycle.postStart.tcpSocket   #健康主机的端口sock

二进制安装kubernetes1.14.1-pod配置清单之健康检测06

livenessProbe 检测容器健康状态 一旦发生异常会重启容器
许多应用程序经过长时间运行,最终过渡到无法运行的状态,除了重启,无法恢复。通常情况下,K8S会发现应用程序已经终止,然后重启应用程序/pod。 有时应用程序可能因为某些原因(后端服务故障等)导致暂时无法对外提供服务,但应用软件没有终止,导致K8S无法隔离有故障的pod,调用者可能会访问到有故障的pod,导致业务不稳定。K8S提供livenessProbe来检测应用程序是否正常运行,并且对相应状况进行相应的补救措施。[root@k8s-master01 ~]# kubectl  explain pods.spec.containers.livenessProbe

二进制安装kubernetes1.14.1-pod配置清单之健康检测06

.
exec 在用户容器内执行一次命令,如果命令执行的退出码为0,则认为应用程序正常运行,其他任务应用程序运行不正常。  httpGet   调用容器内Web应用的web hook,如果返回的HTTP状态码在200和399之间,则认为应用程序正常运行,否则认为应用程序运行不正常。每进行一次HTTP健康检查都会访问一次指定的URL。  initialDelaySeconds:容器启动后第一次执行探测是需要等待多少秒。  periodSeconds: 执行探测的频率。默认是10秒,最小1秒。  timeoutSeconds:探测超时时间。默认1秒,最小1秒。  successThreshold:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1。对于liveness必须是1。最小值是1。  failureThreshold:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3。最小值是1。  TCPSocket: 将会尝试打开一个用户容器的Socket连接(就是IP地址:端口)。如果能够建立这条连接,则认为应用程序正常运行,否则认为应用程序运行不正常。

exec语法

[root@k8s-master01 ~]# cat busybox_LivenesProbe.yaml   apiVersion: v1   kind: Pod   metadata:     labels:       test: liveness-exec     name: liveness-exec   spec:     containers:     - name: liveness-demo       image: busybox       args:       - /bin/sh       - -c       - touch /tmp/healthy; sleep 30;rm -fr /tmp/healthy;sleep 600       livenessProbe:        exec:          command:         - test         - -e         - /tmp/healthy    [root@k8s-master01 ~]# kubectl  describe  pods/liveness-exec

二进制安装kubernetes1.14.1-pod配置清单之健康检测06

.
等待一段时间 发现重启了一次 状态发生过更改

二进制安装kubernetes1.14.1-pod配置清单之健康检测06

随着时间更改 会重启多次
二进制安装kubernetes1.14.1-pod配置清单之健康检测06

httpGet方式
[root@k8s-master01 ~]# cat  http_get_nginx.yaml       apiVersion: v1      kind: Pod      metadata:        labels:           test: liveness        name: liveness-httpget        namespace: prod      spec:        containers:        - name: liveness-nginx          image: nginx          ports:           - name: http            containerPort: 80          lifecycle:            postStart:              exec:                command:                - /bin/sh                - -c                - 'echo Healty > /usr/share/nginx/html/healthz'          livenessProbe:            httpGet:             path: /healthz             port: http             scheme: HTTP            periodSeconds: 2       #每隔2秒检测一次            failureThreshold: 2    #失败2次 证明此节点是失败了            timeoutSeconds: 2      #超时时间2秒 代表失败             initialDelaySeconds: 3 #容器启动开始延迟3秒开始检测[root@k8s-master01 ~]# kubectl  apply -f http_get_nginx.yaml[root@k8s-master01 ~]# kubectl  get pods -n prod[root@k8s-master01 ~]# kubectl  get pods -n prod -w     -w 等同于shell的 watch    打印详细信息    [root@k8s-master01 ~]# kubectl  describe pods -n prod

二进制安装kubernetes1.14.1-pod配置清单之健康检测06

.
手动使其检测失败 [root@k8s-master01 ~]# kubectl  exec -it liveness-httpget -n prod  -- /bin/bash root@liveness-httpget:/# cd /usr/share/nginx/html/ root@liveness-httpget:/usr/share/nginx/html# mv healthz  healthz_back     再次查看详细信息[root@k8s-master01 ~]# kubectl  describe pods -n prod

二进制安装kubernetes1.14.1-pod配置清单之健康检测06

二进制安装kubernetes1.14.1-pod配置清单之健康检测06
会发现又重启了一次,在等登录查看 发现healthz 再次生成,并且值为:Healty

httpGet方式参数
[root@k8s-master01 ~]# kubectl  explain pods.spec.containers.livenessProbe.httpGet   host               #要连接的主机名,默认为pod IP,配合httpHeaders使用   httpHeaders   #要在请求中设置的自定义头。HTTP允许重复报头。 比如post 请求   path              #访问HTTP服务器的路径   port              #要在容器上访问的端口的名称或编号。数字必须在范围1到65535。名称必须是IANA_SVC_NAME   scheme  用于连接到主机的方案。默认为HTTP

容器就绪检测 readinessProbe

检测容器是否启动完毕  不具有重启容器的权限,如果容器启动完毕 但是容器内服务没有就绪,会删掉移除此容器  [root@k8s-master01 ~]# kubectl  explain pods.spec.containers.readinessProbe       语法使用方式参考:https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probeexec    failureThreshold    
httpGet
initialDelaySeconds
periodSeconds
successThreshold
探测失败后,最少连续探测成功多少次才被认定为成功。默认是1,最小值为1。tcpSocket
timeoutSeconds

例子

[root@k8s-master01 ~]# vim readinessProbe_nginx.yaml   apiVersion: v1   kind: Pod   metadata:     labels:       test: readinessProbe     name: readinessprobe-exec     namespace: prod   spec:     containers:     - name: readiness-probe-busybox       image: busybox       args: ["/bin/sh","-c","while true; do rm -f /tmp/ready; sleep 30; touch /tmp/ready;sleep 300; done"]       readinessProbe:         exec:           command: ["test","-e","/tmp/ready"]         initialDelaySeconds: 5         periodSeconds:

二进制安装kubernetes1.14.1-pod配置清单之健康检测06

.
上面的图可以看出 虽然容器已经启动了,但是容器里面的服务器还是没有启动状态, 每隔5秒检测一次 检测5次,当这个文件存在的时候 容器和服务启动完毕

二进制安装kubernetes1.14.1-pod配置清单之健康检测06

你可人为的连接容器 删除 /tmp/ready 此文件 会发现容器会处于 未就绪状态

二进制安装kubernetes1.14.1-pod配置清单之健康检测06

二进制安装kubernetes1.14.1-pod配置清单之健康检测06

手动创建此文件

二进制安装kubernetes1.14.1-pod配置清单之健康检测06

转载于:https://blog.51cto.com/9025736/2400591

你可能感兴趣的文章
产品质量检测系统uml建模心得
查看>>
二. 细说小程序登陆
查看>>
合并分支,从dev到master
查看>>
快速计算二点的距离
查看>>
计算圆的包含(两两圆不相交)
查看>>
GDSOI2015 task4 ACU
查看>>
LeetCode - Valid Parentheses
查看>>
Spring Scope
查看>>
Swift-structures 和 classes 初始化 - structure
查看>>
header 用法_转
查看>>
Android中Button四种点击事件实现方式
查看>>
memcached-1.4.20 主要启动流程笔记
查看>>
java代码--------实现位运算符不用乘除法啊
查看>>
java web 程序---登陆验证4个页面
查看>>
jquery val()用法详解
查看>>
闭包与迭代器
查看>>
Linux系统配置VSFTP软件详解
查看>>
处理jQuery append加入的元素 绑定事件无效的方法
查看>>
leetcode:Valid Palindrome
查看>>
jquery对JSON字符串的解析--eval函数
查看>>