极客联盟网站建设公司怎么样,网站推广团队,厦门网上房地产官网查询,网站美工外包公司deployment只保证pod的状态为running。如果pod状态是running#xff0c;但是里面丢失了文件#xff0c;导致用户不能访问数据#xff0c;则deployment是不管用的#xff0c;此时就需要probe来检测pod是否正常工作。 probe是定义在容器里的#xff0c;可以理解为容器里加的…deployment只保证pod的状态为running。如果pod状态是running但是里面丢失了文件导致用户不能访问数据则deployment是不管用的此时就需要probe来检测pod是否正常工作。 probe是定义在容器里的可以理解为容器里加的一个装置来探测容器是不是正常工作分为liveness probe和readiness probe。
liveness probe
liveness探测到某个pod运行有问题的话就会通过重启pod来解决问题重启即为把旧的pod删除然后创建出来一个新的同名的pod。
command探测方式
该方式就是在容器内部执行一条命令如果这个命令的返回值为0即命令正确执行了则认为容器是正常的如果返回值非0则认为容器出现了问题然后通过重启来解决问题。
创建liveness1.yaml文件并修改修改后内容如下
apiVersion: v1
kind: Pod
metadata:labels:run: liveness1name: liveness1
spec:terminationGracePeriodSeconds: 5containers:- image: busyboximagePullPolicy: IfNotPresentname: liveness1args:- /bin/sh- -c- touch /tmp/healthy;sleep 20;rm -rf /tmp/healthy;sleep 1000livenessProbe:exec:command:- cat- /tmp/healthyinitialDelaySeconds: 5periodSeconds: 5successThreshold: 1failureThreshold: 3timeoutSeconds: 10pod启动后会创建/tmp/healthy20秒后删除它然后等待1000秒之后终止。 定义了livenessProbe探测/tmp/healthy是否存在。如果该文件不存在命令执行失败返回值为零则认为容器出问题了。 参数 initialDelaySecondspod启动多少秒内不探测 periodSeconds探测间隔时间 successThreshold探测失败后最少连续探测多少次才被认定成功 failureThreshold探测失败后连续探测次数。 设置了terminationGracePeriodSeconds为5秒默认30秒删除等待时间太长不利于观察。 创建pod并查看pod的运行情况
kubectl apply -f liveness1.yaml
kubectl get pod
kubectl exec liveness1 -- ls /tmp/pod创建后可以看到文件夹20s后看不到文件夹探测三次后pod在40s后自动重启以此类推。
httpGet探测方式
该方式指的是HTTP协议的数据包能否通过指定端口访问到指定文件如果能访问到则认为容器是正常的如果访问不到则认为pod是不正常的。
创建liveness2.yaml文件内容如下
apiVersion: v1
kind: Pod
metadata:labels:run: liveness2name: liveness2
spec:terminationGracePeriodSeconds: 5containers:- image: nginximagePullPolicy: IfNotPresentname: liveness2livenessProbe:successThreshold: 1failureThreshold: 3initialDelaySeconds: 5periodSeconds: 5httpGet:path: /index.htmlport: 80scheme: HTTP创建pod并查看状态
kubectl apply -f liveness2.yaml
kubectl get pod
kubectl exec liveness2 -- ls /usr/share/nginx/html
# 删除文件进行测试
kubectl exec liveness2 -- rm /usr/share/nginx/html/index.html
kubectl get pod
kubectl exec liveness2 -- ls /usr/share/nginx/html删除文件后探测不到文件pod重启重启后该文件存在。
tcpSocket探测方式
创建liveness3.yaml文件内容如下
apiVersion: v1
kind: Pod
metadata:labels:run: liveness3name: liveness3
spec:terminationGracePeriodSeconds: 5containers:- image: nginximagePullPolicy: IfNotPresentname: liveness3livenessProbe:successThreshold: 1failureThreshold: 3initialDelaySeconds: 5periodSeconds: 5tcpSocket:port: 808创建pod并查看状态
kubectl apply -f liveness3.yaml
kubectl get podnginx默认使用的80端口而我们探测是808探测失败后连续探测3次失败(15S)后重新启动pod5s删除时间20秒后重启。
readiness probe
readiness探测和liveness探测类似只是处理方式不一样。readiness探测到pod有问题之后并不会重启只是service接收到请求后不再转发到此pod。
创建三个具有相同标签runapp的pod
apiVersion: v1
kind: Pod
metadata:labels:run: appname: pod1
spec:containers:- name: c1image: nginximagePullPolicy: IfNotPresentlifecycle:postStart:exec:command: [/bin/bash,-c,touch /tmp/healthy]readinessProbe:exec:command:- cat- /tmp/healthy创建pod
kubectl apply -f readiness1.yaml
sed s/pod1/pod2/ readiness1.yaml | kubectl apply -f -
sed s/pod1/pod3/ readiness1.yaml | kubectl apply -f -
kubectl get pod --show-labels修改每个pod默认页面
kubectl exec -ti pod1 -- bash
echo 111 /usr/share/nginx/html/index.html
kubectl exec -ti pod2 -- bash
echo 222 /usr/share/nginx/html/index.html
kubectl exec -ti pod3 -- bash
echo 333 /usr/share/nginx/html/index.html创建一个服务并查看服务过去IP
kubectl expose --namereadiness0 pod pod1 --port80
kubectl get service访问服务由于三个pod标签相同请求被负载均衡到三个pod。
curl 10.245.249.86删除readiness3的测试文件探测失败后pod3状态不再为ready
kubectl exec -it pod3 -- rm /tmp/healthy
kubectl exec -it pod3 -- ls /tmp
kubectl get pod
# 再次访问服务已不再把请求转发给pod3了
curl 10.245.249.86pod3状态是不健康的