在kubernetes中有两种负责健康检查的Probe, 分别是Liveness probe 和Readiness Probe
我们最常见到的应该是Liveness probe
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec 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: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5 |
其中periodSeconds 是控制多久执行一次livenessProbe,这个例子中是说每隔5秒就要去执行一次检查
initialDelaySeconds是控制说刚启动Pod的时候你要等5秒,给Pod一点启动时间再去检查
如果我们的LivenessProbe检查通过,也就是 cat /tmp/healthy(在容器中)能够正常执行,那么Kubernetes就认为Pod是健康的,否则,就认为是不健康的,kubernetes会重启这个Pod,尝试修复问题
除了支持命令行外,livenessProbe还支持TCP和HTTP检查
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
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 |
readinessProbe
readinessProbe 和livenessProbe类似,都是做检查的
1 2 3 4 5 6 7 |
readinessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5 |
区别在于,readinessProbe 不会去重启Pod,它的主要目的是判断我们的Pod是否已经具备接受service分发的流量的资格了,如果readinessProbe检查失败,说明Pod还没准备好,kubernetes会把我们的Pod从service后端拿掉,这样的话流量就不会进入到我们这个没有ready的Pod中
Latest posts by Zhiming Zhang (see all)
- aws eks node 自动化扩展工具 Karpenter - 8月 10, 2022
- ReplicationController and ReplicaSet in Kubernetes - 12月 20, 2021
- public key fingerprint - 5月 27, 2021