K8S - 探针 - readinessProbe

readinessProbe: 指示容器是否准备好服务请求。如果就绪探针失败,端点控制器将从Pod匹配的所有Service的端点中删除该pod的IP地址。初始延迟之前的就绪状态默认为Failure。如果容器不提供就绪探针,则默认状态为Success。

实验
检测nginx容器的/usr/share/nginx/html/kone.html是否存在

[root@k8s-master01 k8s-test]# cat readiness.yaml
apiVersion: v1
kind: Pod
metadata:
  name: readiness-httpget-pod
  namespace: default
spec:
  containers: 
  - name: readiness-httpget-container
    image: kone.com/library/nginx
    imagePullPolicy: IfNotPresent
    readinessProbe:
      httpGet:
        port: 80
        path: /kone.html
      initialDelaySeconds: 1
      periodSeconds: 3

1. 当前/usr/share/nginx/html/kone.html在容器中不存在
创建容器kubectl create -f readiness.yaml
2. 查看容器状态


[root@k8s-master01 k8s-test]# kubectl get pod -owide
NAME                               READY   STATUS    RESTARTS   AGE   IP            NODE         NOMINATED NODE   READINESS GATES
readiness-httpget-pod              0/1     Running   0          35s   10.244.2.12   k8s-node01   <none>           <none>

看到readiness-httpget-pod的READY状态为0/1,此时容器虽然在running,但实际为未就绪状态
3. kubectl describe pod readiness-httpget-pod查看容器
查看最后的event信息Readiness probe failed: HTTP probe failed with statuscode: 404

Events:
  Type     Reason     Age                    From                 Message
  ----     ------     ----                   ----                 -------
  Normal   Scheduled  2m55s                  default-scheduler    Successfully assigned default/readiness-httpget-pod to k8s-node01
  Normal   Pulled     2m54s                  kubelet, k8s-node01  Container image "kone.com/library/nginx" already present on machine
  Normal   Created    2m54s                  kubelet, k8s-node01  Created container readiness-httpget-container
  Normal   Started    2m54s                  kubelet, k8s-node01  Started container readiness-httpget-container
  Warning  Unhealthy  110s (x22 over 2m53s)  kubelet, k8s-node01  Readiness probe failed: HTTP probe failed with statuscode: 404

4. 在容器中新建/usr/share/nginx/html/kone.html
执行命令进入容器:kubectl exec -it readiness-httpget-pod -- /bin/sh,创建kone.html,然后退出容器

[root@k8s-master01 k8s-test]# kubectl exec -it readiness-httpget-pod -- /bin/sh
# cd /usr/share/nginx/html
# ls
50x.html  index.html
# echo 'kone readinessProbe test' > kone.html
# cat kone.html
kone readinessProbe test
# exit
[root@k8s-master01 k8s-test]# 

5. 查看容器状态为ready

[root@k8s-master01 k8s-test]# kubectl get pods
NAME                               READY   STATUS    RESTARTS   AGE
readiness-httpget-pod              1/1     Running   0          14m
k8s存活探针和就绪探针是用来检测容器的状态和可用性的。存活探针(Liveliness Probe)用于判断容器是否处于正在运行状态,如果容器出现故障或死锁,k8s会自动将其下线并重新启动。而就绪探针Readiness Probe)用于判断服务是否已经准备好接收流量,如果服务还未完全启动或出现异常情况,k8s会将其从服务的负载均衡器中移除,不再接受或响应任何请求。 存活探针可以通过执行容器内部的shell命令、检查容器的TCP连接或发送HTTP请求来进行健康检查,如果探测失败,k8s会将故障的容器kill掉,并根据设置的重启策略进行重启。而就绪探针则通过HTTP请求来检查服务是否准备就绪,如果就绪探测失败,k8s会将服务从负载均衡器中移除,直到服务完全就绪后再将其添加回负载均衡器。 在使用存活探针和就绪探针时,建议将检查服务的时间短于检查容器的时间,以实现先下线再重启的策略。这样,在故障发生后,服务会先被下线,如果一段时间后服务无法自动恢复,k8s会根据重启策略进行重启。通过使用这两种探针,可以确保服务的可用性和自动恢复能力。 总结来说,存活探针用于判断容器是否处于运行状态,并在容器故障时重新启动,而就绪探针用于判断服务是否已经准备好接收流量,并将未就绪的服务下线,直到服务完全就绪后再上线。这两种探针是确保k8s中应用的稳定性和可用性的重要工具。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [k8s的就绪探针和存活探针](https://blog.csdn.net/qingqingxiangyang/article/details/118026170)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值