k8s学习笔记(一) 存活探针与就绪探针的行为解析
前言Pod是kubernetes中应用程序执行的基本单元,它是kubernetes对象模型中创建或部署的最小和最简单的单元。一个Pod可以包括一个或多个容器,当一个Pod包含多个容器时,这些容器总是运行于同一个工作节点上,一个Pod绝不会跨越多个工作节点。存活探针与就绪探针是检测应用是否存活及是否做好流量准备的重要手段。https://kubernetes.io/zh/docs/tasks/con
前言
Pod是kubernetes中应用程序执行的基本单元,它是kubernetes对象模型中创建或部署的最小和最简单的单元。一个Pod可以包括一个或多个容器,当一个Pod包含多个容器时,这些容器总是运行于同一个工作节点上,一个Pod绝不会跨越多个工作节点。
存活探针与就绪探针是检测应用是否存活及是否做好流量准备的重要手段。
https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
存活探针 livenessProbe
存活探针检测应用是否存活。当存活探针检测到容器非存活状态时,会重启容器。
探针主要分为三种,exec,httpGet,tcpSocket。
exec
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
httpGet
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: Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3
tcpSocket
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
就绪探针检测应用是否就绪,即是否有能力开始接受请求流量。当就绪探针检测到容器非就绪状态时,会将容器标记为非ready状态,并从service的负载均衡器中移除。
混合使用
存活探针和就绪探针可以混合使用。
使用以下yaml代码定义liveness-readiness-pod-test。
apiVersion: v1
kind: Pod
metadata:
name: liveness-readiness-pod-test
namespace: default
spec:
containers:
- name: liveness-readiness-container
image: nginx:1.16.1
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
livenessProbe:
httpGet:
port: http
path: /index.html
initialDelaySeconds: 1
periodSeconds: 3
timeoutSeconds: 10
readinessProbe:
httpGet:
port: http
path: /index1.html
initialDelaySeconds: 1
timeoutSeconds: 10
存活探针检测默认的index.html,就绪探针检测待添加的index1.html。启动yaml文件后,由于index1.html文件不存在,就绪探针不通过。
运行以下命令
kubectl exec liveness-readiness-pod-test -it -- /bin/bash
echo "123" >> /usr/share/nginx/html/index1.html
就绪探针通过,程序进入ready状态。
运行以下命令
kubectl exec liveness-readiness-pod-test -it -- /bin/bash
rm /usr/share/nginx/html/index.html
等待几秒后,状态变为not ready
这是因为存活探针检测index.html是否存在,失败后会重启应用,导致就绪探针需要的index1.html文件被重置,无法进入ready状态。
以上状态的变化涵盖了探针在容器生命周期中的主要用途。
更多推荐
所有评论(0)