K8S学习记录 - 健康检查
进程健康检查
健康检查最简单的方式就是检查进程的状态。
Kubelet 不断的询问 Docker daemon 这个容器进程是否还在运行,如果没有,这个容器就会被重启。
目前在所有 Kubernetes 的案例中,这种健康检查是一直开启的。对与 Kubernetes 中所有运行的容器都是生效的。
然而,在很多场景中这个低级别的健康检查是没有作用的:比如进程也一直在运行,但是从应用的角度看,代码已经死锁,而且不会有正确的响应。
一、Readiness Probe
就绪检查:旨在让Kubernetes知道您的应用何时准备好其流量服务。
二、Liveness Probe
存活检查:
让Kubernetes知道你的应用程序是活着还是死了。
如果你的应用程序还活着,那么Kubernetes就不管它了。
如果你的应用程序已经死了,Kubernetes将删除Pod并启动一个新的替换它。
三、探针类型
HTTP
HTTP探针可能是最常见的自定义Liveness探针类型。 即使您的应用程序不是HTTP服务,您也可以在应用程序内创建轻量级HTTP服务以响应Liveness探针。
Kubernetes去ping一个路径,如果它得到的是200或300范围内的HTTP响应,它会将应用程序标记为健康。 否则它被标记为不健康。
Command
对于Command探针,Kubernetes则只是在容器内运行命令。 如果命令以退出代码0返回,则容器标记为健康。
否则,它被标记为不健康。 当您不能或不想运行HTTP服务时,此类型的探针则很有用,但是必须是运行可以检查您的应用程序是否健康的命令。
TCP
最后一种类型的探针是TCP探针,Kubernetes尝试在指定端口上建立TCP连接。 如果它可以建立连接,则容器被认为是健康的;否则被认为是不健康的。
如果您有HTTP探针或Command探针不能正常工作的情况,TCP探测器会派上用场。 例如,gRPC或FTP服务是此类探测的主要候选者。
四、示例
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: web
name: web
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
restartPolicy: Always
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: web
ports:
- containerPort: 80
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 5
periodSeconds: 5
readinessProbe:
httpGet:
path: /index.html
port: 80
initialDelaySeconds: 5
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
labels:
app: web
name: web
spec:
ports:
- port: 80
protocol: TCP
selector:
app: web
type: NodePort
参考资料