今天继续给大家介绍Linux运维相关知识,本文主要内容是Pod存活性探针应用实战。
在上文Kubernetes详解(十六)——Pod容器探测中,我们讲解了Pod容器的探针。今天,我们就来进行以下Pod容器的探针实战。
首先,我们进行EXEC的探针实战,创建liveness-probe.yaml的资源配置清单,并写入如下内容:
apiVersion: v1
kind: Pod
metadata:
name: liveness-probe
namespace: default
labels:
probe: liveness
spec:
containers:
- name: liveness-probe-container
image: busybox
imagePullPolicy: IfNotPresent
command: ["/bin/sh","-c","touch /tmp/healthy;sleep 30;rm -rf /tmp/healthy","sleep 600"]
livenessProbe:
exec:
command: ["test","-e","/tmp/healthy"]
initialDelaySeconds: 2
periodSeconds: 5
完成后的资源配置清单文件如下所示:
在上述配置中,我们使用了命令的存活性探针,该探针会不断探测/tmp/healthy文件的存在性,如果该文件不存在,探针就会探测处异常。根据我们镜像的command的配置,容器在启动后,运行30秒就会删除该文件,因此该Pod的运行必然会引发探针异常。我们只需要观察探针异常后是否有Pod容器的重启,就可以判定探针是否工作正常。
然后,我们运行该资源清单配置文件,创建Pod容器,执行命令:
kubectl create -f liveness-probe.yaml
Pod容器运行后如下所示:
从上图中可以看出,我们的Pod容器运行成功。接下来,我们等待一段时间,来测试一下探针的作用。
等待一段时间后,Pod容器结果如下:
在上图中可以看出,在pod容器的运行中,随着command命令的作用,探针探测到容器异常,因此Kubernetes会杀死容器并重启。我们的命令探针配置成功!
接下来,我们进行HTTP的探针实战,创建http-probe.yaml的资源配置清单,并写入如下内容:
apiVersion: v1
kind: Pod
metadata:
name: http-probe
namespace: default
labels:
probe: http
spec:
containers:
- name: http-probe
image: nginx:1.12
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
lifecycle:
postStart:
exec:
command: ["/bin/bash","-c","echo Http-Probe > /usr/share/nginx/html/ishealth.html"]
livenessProbe:
httpGet:
path: /ishealth.html
port: http
scheme: HTTP
完成后的资源配置清单文件如下所示:
在上述配置中,我们定义了一个HTTP的探针,该探针会不断探测网站根目录下/ishealth.html文件(该文件由容器中的command命令创建)的存在性,如果该文件不存在,探针就会探测到异常。
我们运行该资源清单配置文件,创建Pod容器,执行命令:
kubectl create -f http-probe.yaml
该容器运行后,我们进入该容器,删除ishealth.html的文件,观察容器状态,结果如下所示:
可以看出,当我们删除容器后,由于探针探测到异常,引发容器的重启。我们的HTTP探针成功!
最后,我们进行TCP的探针实战,创建tcp-probe.yaml的资源配置清单,并写入如下内容:
apiVersion: v1
kind: Pod
metadata:
name: tcp-probe
namespace: default
labels:
probe: tcp
spec:
containers:
- name: tcp-rpobe
image: nginx:1.12
ports:
- name: http
containerPort: 80
livenessProbe:
tcpSocket:
port: http
完成后的资源配置清单文件如下所示:
在上述配置中,我们的探针会不断探测容器的80端口,如果80端口不通,则探针会探测到异常。
我们运行该资源清单配置文件,创建Pod容器,执行命令:
kubectl create -f tcp-probe.yaml
启动容器。
容器启动后,我们可以执行命令:
kubectl describe pods/tcp-probe
来查看该Pod的TCP探针设置,结果如下所示:
从上图中,也可以看出我们配置的TCP探针的内容。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200