Kubernetes 1.20.5实验记录–Pod健康检查
1.1 默认健康检查
1、创建Pod:
文件healthcheck-default.yaml
apiVersion: v1
kind: Pod
metadata:
name: healthcheck-default
spec:
restartPolicy: OnFailure
containers:
- name: healthcheck-default
image: busybox
args:
- /bin/sh
- c
- sleep 10; exit 1
kubectl apply -f healthcheck-default.yaml
2、查看Pod状态:
kubectl get pod -o wide
Kubernetes会根据restartPolicy: OnFailure重启Pod
3、删除Pod:
kubectl delete -f healthcheck-default.yaml
1.2 Liveness健康检查
1、创建Pod:
文件healthcheck-liveness.yaml
apiVersion: v1
kind: Pod
metadata:
name: healthcheck-liveness
spec:
restartPolicy: OnFailure
containers:
- name: healthcheck-liveness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 3000
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
kubectl apply -f healthcheck-liveness.yaml
2、查看Pod状态:
kubectl get pod -o wide
Kubernetes会根据restartPolicy: OnFailure重启Pod
3、删除Pod:
kubectl delete -f healthcheck-liveness.yaml
1.3 Readiness健康检查
1、创建Pod:
文件healthcheck-readiness.yaml
apiVersion: v1
kind: Pod
metadata:
name: healthcheck-readiness
spec:
restartPolicy: OnFailure
containers:
- name: healthcheck-readiness
image: busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 3000
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
kubectl apply -f healthcheck-readiness.yaml
2、查看Pod状态:
kubectl get pod -o wide
Kubernetes会根据restartPolicy: OnFailure,将Pod置于not ready状态
3、删除Pod:
kubectl delete -f healthcheck-readiness.yaml
1.4 Scale Up中使用健康检查
创建Service:
文件healthcheck.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: healthcheck
spec:
replicas: 6
selector:
matchLabels:
run: healthcheck
template:
metadata:
labels:
run: healthcheck
spec:
containers:
- name: healthcheck
image: nginx
kubectl apply -f healthcheck.yaml
查看Pod状态:
kubectl get pod -o wide
对Deployment进行Scale Up:
文件healthcheck-scaleup.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: healthcheck
spec:
replicas: 10
selector:
matchLabels:
run: healthcheck
template:
metadata:
labels:
run: healthcheck
spec:
containers:
- name: healthcheck
image: nginx
readinessProbe:
httpGet:
scheme: HTTP
path: /healthy
port: 8080
initialDelaySeconds: 10
periodSeconds: 5
kubectl apply -f healthcheck-scaleup.yaml
查看Pod状态:
kubectl get pod -o wide
副本数由6扩展至10,但未通过Readiness探测,属于not ready状态
查看Deployment详细信息:
kubectl describe deploy healthcheck
删除Deployment:
kubectl delete -f healthcheck.yaml
1.5 Rolling Update中使用健康检查
1、创建Deployment:
文件healthcheck.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: healthcheck
spec:
replicas: 6
selector:
matchLabels:
run: healthcheck
template:
metadata:
labels:
run: healthcheck
spec:
containers:
- name: healthcheck
image: busybox
args:
- /bin/sh
- -c
- sleep 10; touch /tmp/healthy; sleep 3000
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
kubectl apply -f healthcheck.yaml
2、查看Pod状态:
kubectl get pod -o wide
3、对Deployment进行Rolling Update:
文件healthcheck-rollingupdate.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: healthcheck
spec:
replicas: 6
selector:
matchLabels:
run: healthcheck
template:
metadata:
labels:
run: healthcheck
spec:
containers:
- name: healthcheck
image: busybox
args:
- /bin/sh
- -c
- sleep 3000
readinessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 10
periodSeconds: 5
kubectl apply -f healthcheck-rollingupdate.yaml
4、查看Pod状态:
kubectl get pod -o wide
Rolling Update时,新增副本未通过Readiness探测,属于not ready状态
5、查看Deployment详细信息:
kubectl describe deploy healthcheck
6、删除Deployment:
kubectl delete -f healthcheck.yaml