Kubernetes 生命周期之三大探测

Kubernetes 生命周期之三大探测

探测的意义

在 Kubernetes 中 Pod 是最小的计算单元,而一个 Pod 又由多个容器组成,相当于每个容器就是 Pod 的一个进程。容器在运行期间,可能因为某些意外情况致崩溃重启。为了监测容器运行的状态,Kubernetes 提供了三大探测机制StartupProbeReadinessProbeLivenessProbe。这三大探测机制可以是容器安全的启动和退出,并平滑的加入网络给应用侧提供服务。

探测的状态

状态描述
Success容器通过探测
Failure容器不通过探测
Unknown探测失败(没有任何行为被反馈,kubelet 将进一步检查,这个一般是系统级别的错误)

探测的机制

机制描述
exec在容器中执行指定指令。如果状态码返回 0,则代表检查成功。
grpc使用 gRPC 机制进行探测,如果响应状态为 SERVING ,则代表成功。
httpGethttp get 请求探测,返回代码大于等于200,小于400,代表探测成功。
tcpSocket探测 Pod 指定端口是否打开,如果能够连接,则代表成功,即使它立刻被服务端断开。

Startup 探测

Startup是用来探测容器中的进程是否已经启动。如果提供了启动探测(startup probe),则其它两种探测将延后,直到它成功启动才可以开启下两种探测。如果启动探测失败,kubelet 将杀死容器,容器根据其重启策略进行重启。如果容器没有提供启动探测,则默认状态为成功Success。下面使用exec探测80端口是否启动,我延时10s 启动,会发现 Pod 在这期间虽然处于 Running 状态,但容器依旧显示没有准备好的状态,但 80 端口可以通过 IP 访问。

apiVersion: v1
kind: Pod
metadata:
  name: pod-probe
  namespace: default
  labels:
    app: probe
spec:
  containers:
    - name: startup-probe
      image: k8s-test:v1.0
      imagePullPolicy: IfNotPresent
      startupProbe:
        exec:
          command:
          - "/bin/sh"
          - "-c"
          - "curl http://localhost:80"
        initialDelaySeconds: 10 # 容器启动后 10s 开始探测
        periodSeconds: 20       # 执行探测的时间间隔为 20s
        timeoutSeconds: 10      # 探针执行检测请求后,等待响应的超时时间为 10s
        successThreshold: 1     # 成功 1 次算成功
        failureThreshold: 3     # 失败 3 次算失败
root@k8s-master1:~# kubectl get pods -owide
NAME        READY   STATUS    RESTARTS   AGE   IP               NODE          NOMINATED NODE   READINESS GATES
pod-probe   0/1     Running   0          5s   10.244.194.113   k8s-worker1   <none>           <none>
root@k8s-master1:~# curl 10.244.194.113
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Nginx Test</title>
</head>
<body>
Hello World
</body>
</html>

Readiness 探测

Readiness探测用于检测容器中的进程是否可以接受请求,当探测成功后才将 Pod 对外提供网络访问,并将容器标记为就绪状态。可以加到 Pod 前端 Service,如果探测失败,则将容器标记为未就绪状态,会把 Pod 从前端 Service 中移除。

apiVersion: v1
kind: Pod
metadata:
  name: pod-probe
  namespace: default
  labels:
    app: probe
spec:
  containers:
    - name: readiness-probe
      image: k8s-test:v1.0
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
      readinessProbe:
        httpGet:
          port: 80
        initialDelaySeconds: 30

Liveness 探测

Liveness 探测上述四种检测机制检测 Pod 中的容器是否正常运行。如果检测失败,则终止容器,并根据 Pod 中设置的重启策略来判断 Pod 是否需要进行重启操作。

apiVersion: v1
kind: Pod
metadata:
  name: pod-probe
  namespace: default
  labels:
    app: probe
spec:
  containers:
    - name: liveness-probe
      image: k8s-test:v1.0
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
      livenessProbe:
        tcpSocket:
          port: 80
        periodSeconds: 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值