【问题标题】:Kubernetes , liveness probe is failing but pod in Running stateKubernetes,活性探测失败,但 pod 处于运行状态
【发布时间】:2019-01-09 03:00:55
【问题描述】:

我正在尝试使用 kubernetes 进行蓝绿色部署,我已经遵循它,https://www.ianlewis.org/en/bluegreen-deployments-kubernetes,没关系。 我添加了一个活性探针来执行健康检查,

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: flask-1.3
spec:
  replicas: 2
  template:
    metadata:
      labels:
        name: app
        version: "1.3"
    spec:
      containers: 
        - name: appflask
          image: 192.168.99.100:5000/fapp:1.2
          livenessProbe:
            httpGet:
             path: /index2
             port: 5000
            failureThreshold: 1
            periodSeconds: 1
            initialDelaySeconds: 1
          ports:
            - name: http
              containerPort: 5000

路径“index2”不存在,我想测试一个失败的部署。问题是当我执行时:

 kubectl get pods -o wide

其中一个 pod 处于“RUNNING”状态几秒钟

NAME                         READY   STATUS             RESTARTS   AGE     IP             NODE    NOMINATED NODE   READINESS GATES

flask-1.3-6c644b8648-878qz   0/1     CrashLoopBackOff   6          6m19s   10.244.1.250   node    <none>           <none>
flask-1.3-6c644b8648-t6qhv   0/1     CrashLoopBackOff   7          6m19s   10.244.2.230   nod2e   <none>           <none>

几秒钟后,当 live 总是失败时,一个 pod 正在运行:

NAME                         READY   STATUS             RESTARTS   AGE 

    IP             NODE    NOMINATED NODE   READINESS GATES

   flask-1.3-6c644b8648-878qz   1/1     Running            7          6m20s   10.244.1.250   node    <none>           <none>
    flask-1.3-6c644b8648-t6qhv   0/1     CrashLoopBackOff   7          6m20s   10.244.2.230   nod2e   <none>           <none>

在将它运行回 CrashLoopBackOff 后,问题是,如果 livenesprobe 总是失败,为什么它会持续运行几秒钟?

提前致谢

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    您应该查看Readiness probe,或同时查看两者。

    Readiness 和 liveness 探针可以并行用于同一个容器。使用两者可以确保流量不会到达尚未准备好的容器,并且容器在失败时会重新启动。

    Liveness probe 检查您的应用程序是否在您的已经运行的 pod 中处于健康状态。

    Readiness probe 实际上会检查您的 pod 是否准备好接收流量。因此,如果没有 /index2 端点,它将永远不会显示为 Running

    【讨论】:

      【解决方案2】:

      发生在你身上的是这样的:

      当您第一次启动 pod(或容器)时,它将启动并进入“运行”状态。现在,如果容器中没有任何进程在运行,或者如果有一个非连续进程(比如 sleep 100),当这个进程完成时,kubernetes 会认为这个 pod 已经完成。

      现在,由于您有一个部署,它将保持一定数量的副本运行,它会重新创建 pod。但是同样,没有进程在运行,所以再次进入完成状态。这是一个无限循环。

      如果您想保持 pod 正常运行,即使您没有运行内部进程,您也可以在 yaml 文件中传递参数 tty: true

      apiVersion: v1
      kind: Pod
      metadata:
        name: debian
        labels:
          app: debian
      spec:
        containers:
        - name: debian
          image: debian
          tty: true       # this line will keep the terminal open
      

      如果您在没有tty: true 的情况下运行上面的 pod,同样会发生这种情况。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 2021-09-15
        • 1970-01-01
        • 2018-02-28
        • 1970-01-01
        • 2018-12-07
        • 2020-04-12
        相关资源
        最近更新 更多