健康检查(Probe)
Probe有以下两种类型:
livenessProbe
如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
readinessProbe
如果检查失败,Kubernetes会把Pod从service endpoints中剔除。
Probe支持以下三种检查方法:
httpGet
发送HTTP请求,返回200-400范围状态码为成功。
exec
执行Shell命令返回状态码是0为成功。
tcpSocket
发起TCP Socket建立成功。
参考:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
exec 形式 健康检测:
举例:
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 10; rm -rf /tmp/healthy; sleep 30
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
#表示在容器启动5秒后启动检测,单位s
initialDelaySeconds: 5
#周期,每隔多久执行一次,单位s
periodSeconds: 5
根据yaml文件创建后隔30s后可以观察,看看restart次数会不会增加:
kubectl get pod
liveness-exec 1/1 Running 2 92s
根据httoget(curl)请求检测
样例:
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- name: liveness
image: k8s.gcr.io/liveness
args:
- /server
livenessProbe:
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: X-Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3
根据yaml文件创建后:
如果 容器ip:8080/healthz ,curl不通的话将会杀掉容器
根据socket检测(端口监听):
举例:
apiVersion: v1
kind: Pod
metadata:
name: goproxy
labels:
app: goproxy
spec:
containers:
- name: goproxy
image: k8s.gcr.io/goproxy:0.1
ports:
- containerPort: 8080
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
根据yaml文件创建后:
如果 容器端口808探测不通的话将会杀掉容器