【问题标题】:How do I keep a Kubernetes pod running with no http endpoint? (prevent back-off)如何在没有 http 端点的情况下保持 Kubernetes pod 运行? (防止后退)
【发布时间】:2021-12-31 00:11:17
【问题描述】:

我有一个用例(至少目前是这样),我需要一个 k8s pod 在没有 HTTP 或 TCP 端点的情况下保持正常运行。我尝试了以下部署...

apiVersion: apps/v1
kind: Deployment
metadata: 
  name: node-deployment
  labels:
    app: node-app
spec: 
  selector: 
    matchLabels:
      app: node-app
  template:
    metadata:
      labels:
        app: node-app
    spec:
      containers:
      - name: node-server
        image: node:17-alpine
        exec:
            command: ["node","-v"]
        livenessProbe:
          exec:
            command: ["node","-v"]
          initialDelaySeconds: 5
          periodSeconds: 5  
        readinessProbe:
          exec:
            command: ["node","-v"]
          initialDelaySeconds: 5
          periodSeconds: 5  

但过了一会儿,它会停止 pod 并出现以下错误...

Warning BackOff 5s (x10 over 73s) kubelet, minikube Back-off 重启失败的容器

Pod 状态显示...

node-deployment-58445f5649-z6lkz 0/1 CrashLoopBackOff 5(103s 前)4m47s

我知道它正在运行,因为我在 kubectl logs <node-name> 中看到了版本。如何让图像保持没有长时间运行的进程?这甚至可能吗?

【问题讨论】:

    标签: node.js kubernetes


    【解决方案1】:

    容器的进程简单地退出了,如果你在终端中运行node -v,也会发生同样的情况。

    不确定您提供的用例是否是您的真实用例(我看不出有任何理由将节点版本作为应用程序),所以..

    如果你真的想拥有版本,你可以将命令更改为

    ["watch","-n1","node","-v"]
    

    所以它会每秒打印一次节点版本

    【讨论】:

    • 是查看没有进程在运行和关闭容器还是更复杂?
    • watch是一个没有错误就不会退出的进程
    • here 是一个很好的描述
    • 一个容器只运行一个进程,如果该进程退出,容器也结束。一个 Kubernetes Pod 通常只包含一个容器;因此,如果进程退出,Pod 将停止,默认情况下它们将重新启动。但在基本情况下,它并不比“容器中的单个进程停止”更复杂。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 2018-02-16
    • 2019-12-19
    • 2015-05-08
    相关资源
    最近更新 更多