系列目录html
kubernetes提供了livenessProbe(可用性探针)
和readinessProbe(就绪性探针)
对容器的健康性进行检测,固然这仅仅简单的关于可用性方面的探测,实际上咱们不单单要对容器进行健康检测,还要对容器内布置的应用进行健康性检测,这不在本篇讨论之列,后面会有专门篇幅来讨论结合APM工具,grafana和prometheus的应用检测预警机制.nginx
对于liveness probes
的结果也有几个固定的可选项值:web
Success:表示经过检测apache
Failure:表示没有经过检测api
Unknown:表示检测没有正常进行网络
Liveness Probe的种类:app
ExecAction:在container中执行指定的命令。当其执行成功时,将其退出码设置为0;
TCPSocketAction:执行一个TCP检查使用container的IP地址和指定的端口做为socket。若是端口处于打开状态视为成功;socket
HTTPGetAcction:执行一个HTTP默认请求使用container的IP地址和指定的端口以及请求的路径做为url,用户能够经过host参数设置请求的地址,经过scheme参数设置协议类型(HTTP、HTTPS)若是其响应代码在200~400之间,设为成功。tcp
当前kubelet拥有两个检测器,他们分别对应不通的触发器(根据触发器的结构执行进一步的动做):工具
Liveness Probe:表示container是否处于live状态。若是 LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉 container,并根据RestarPolicy进行进一步的操做。默认状况下LivenessProbe在第一次检测以前初始化值为 Success,若是container没有提供LivenessProbe,则也认为是Success;
ReadinessProbe:表示container是否以及处于可接受service请求的状态了。若是ReadinessProbe失败,endpoints controller将会从service所匹配到的endpoint列表中移除关于这个container的IP地址。所以对于Service匹配到的 endpoint的维护其核心是ReadinessProbe。默认Readiness的初始值是Failure,若是一个container没有提供 Readiness则被认为是Success。
对于LivenessProbe和ReadinessProbe用法都同样,拥有相同的参数和相同的监测方式。
initialDelaySeconds:用来表示初始化延迟的时间,也就是告诉监测从多久以后开始运行,单位是秒
periodSeconds:检测的间隔时间,kubernetes每隔一段时间会检测一次,默认为10秒,最小为1秒
timeoutSeconds: 用来表示监测的超时时间,若是超过这个时长后,则认为监测失败
当前对每个Container均可以设置不一样的restartpolicy,有三种值能够设置:
Always: 只要container退出就从新启动
OnFailure: 当container非正常退出后从新启动
Never: 从不进行从新启动
若是restartpolicy没有设置,那么默认值是Always。若是container须要重启,仅仅是经过kubelet在当前节点进行container级别的重启。
最后针对LivenessProbe如何使用,请看下面的几种方式,若是要使用ReadinessProbe只须要将livenessProbe修改成readinessProbe便可:
apiVersion: v1 kind: Pod metadata: name: probe-exec namespace: coocla spec: containers: - name: nginx image: nginx livenessProbe: exec: command: - cat - /tmp/health initialDelaySeconds: 5 timeoutSeconds: 1 --- apiVersion: v1 kind: Pod metadata: name: probe-http namespace: coocla spec: containers: - name: nginx image: nginx livenessProbe: httpGet: path: / port: 80 host: www.baidu.com scheme: HTTPS initialDelaySeconds: 5 timeoutSeconds: 1 --- apiVersion: v1 kind: Pod metadata: name: probe-tcp namespace: coocla spec: containers: - name: nginx image: nginx livenessProbe: initialDelaySeconds: 5 timeoutSeconds: 1 tcpSocket: port: 80
在用户容器内执行一次命令,若是命令执行的退出码为0,则认为应用程序正常运行,其余任务应用程序运行不正常。
…… livenessProbe: exec: command: - cat - /home/laizy/test/hostpath/healthy ……
TCPSocket
将会尝试打开一个用户容器的Socket链接(就是IP地址:端口)。若是可以创建这条链接,则认为应用程序正常运行,不然认为应用程序运行不正常。
HTTPGet
调用容器内Web应用的web hook,若是返回的HTTP状态码在200和399之间,则认为应用程序正常运行,不然认为应用程序运行不正常。每进行一次HTTP健康检查都会访问一次指定的URL。
…… httpGet: #经过httpget检查健康,返回200-399之间,则认为容器正常 path: / #URI地址 port: 80 #端口号 #host: 127.0.0.1 #主机地址 scheme: HTTP #支持的协议,http或者https httpHeaders:’’ #自定义请求的header ……
cat << EOF > inessprobe.yaml apiVersion: v1 kind: ReplicationController metadata: name: inessprobe labels: project: lykops app: inessprobe version: v1 spec: replicas: 6 selector: project: lykops app: inessprobe version: v1 name: inessprobe template: metadata: labels: project: lykops app: inessprobe version: v1 name: inessprobe spec: restartPolicy: Always containers: - name: inessprobe image: web:apache imagePullPolicy: Never command: ['sh',"/etc/run.sh" ] ports: - containerPort: 80 name: httpd protocol: TCP readinessProbe: httpGet: path: / port: 80 scheme: HTTP initialDelaySeconds: 120 periodSeconds: 15 timeoutSeconds: 5 livenessProbe: httpGet: path: / port: 80 scheme: HTTP initialDelaySeconds: 180 timeoutSeconds: 5 periodSeconds: 15 EOF cat << EOF > inessprobe-svc.yaml apiVersion: v1 kind: Service metadata: name: inessprobe labels: project: lykops app: inessprobe version: v1 spec: selector: project: lykops app: inessprobe version: v1 ports: - name: http port: 80 protocol: TCP EOF kubectl create -f inessprobe-svc.yaml kubectl create -f inessprobe.yaml
initialDelaySeconds:容器启动后第一次执行探测是须要等待多少秒。
periodSeconds:执行探测的频率。默认是10秒,最小1秒。
timeoutSeconds:探测超时时间。默认1秒,最小1秒。
successThreshold:探测失败后,最少连续探测成功多少次才被认定为成功。默认是1。对于liveness必须是1。最小值是1。
failureThreshold:探测成功后,最少连续探测失败多少次才被认定为失败。默认是3。最小值是1。