【Kubernetes 006】容器生命周期之探针Probe

上一节的例子中,我们用Init容器去检测service是否能被成功解析,这似乎不是一个好主意。因为Init容器能成功检测并不代表后面的业务容器也能,所以最好的情况就是有专门的模块不停去检测,这个模块就是我们这一节要学习到的探针。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

探针

探针(Probe)是由kubelet对容器进行的定期诊断。注意,探针的目标是容器而不是pod

探针可以执行如下三种操作:

  • ExecAction
    在容器内执行指定命令,如果命令退出时返回码为0,则认为成功

  • TCPSocketAction
    对指定容器的IP+端口进行TCP检测,类似于telnet操作,如果端口为开,则认为成功

  • HTTPGetAction
    对指定的容器IP地址进行GET请求,如果HTTP响应码大于等于200且小于400,则认为成功

每次探测都会返回如下三种结果之一:

  • 容器通过探测
  • 容器未通过探测
  • 未知,即探测本身失败

然后根据探测方式又可以分为如下两类

  • readinessProbe

就绪探针,指示容器是否准备好服务请求。如果失败,该pod将会从所有匹配的service中被移除。如果容器不提供就绪探针,则默认为Success。对应容器的ready状态

  • livenessProbe

存活探针,指示容器是否正在运行。如果失败,则kubelet会杀死容器,并根据restartPolicy决定是否重启容器。如果容器不提供存活探针,则默认为Succes。对应pod的running状态以及restart次数

探针实例操作

下面分别针对两种探针做一下实例操作

下面所有操作的源码都被托管在github:
https://github.com/Victor2Code/centos-k8s-init/tree/master/test%20yaml/Pod%20Lifecycle%20-%20Probe

readinessProbe操作

通过yaml文件test-readiness-httpget.yaml来创建一个带就绪探针的pod

apiVersion: v1
kind: Pod
metadata:
  name: test-readiness-httpget
  namespace: default
  labels:
    app: myapp
    version: v1
spec:
  containers:
    - name: mynginx
      image: nginx
      imagePullPolicy: IfNotPresent
      readinessProbe:
        httpGet:
          port: 80
          path: /fake_index.html
        initialDelaySeconds: 1
        periodSeconds: 3

可以看到主容器使用nginx镜像,如果访问pod_ip:80/fake_index.html的返回码不在200到400之间则认为容器还没有就绪

创建容器,查看状态

[root@k8s-master k8s-test]# kubectl apply -f test-readiness-httpget.yaml
pod/test-readiness-httpget created
[root@k8s-master k8s-test]# kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE    IP            NODE        NOMINATED NODE   READINESS GATES
curl-6bf6db5c4f-kljp4    1/1     Running   1          2d2h 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值