【问题标题】:Kubenetes Pod showing status "Completed" without any jobsKubernetes Pod 显示状态“已完成”,没有任何作业
【发布时间】:2019-10-28 22:50:12
【问题描述】:

我正在托管一个 Angular 网站,该网站连接到 Kubernetes 集群内的 C# 后端。当我在网站上使用某个我无法详细描述的功能时,Pod 显示状态“Completed”,然后进入“CrashLoopBackOff”,然后重新启动。问题是,没有为这个 Pod 设置作业(事实上,直到一个小时前我才知道作业是一个东西)。所以我的主要问题是:Pod 如何在不运行任何作业的情况下进入“已完成”状态?

我的 .yaml 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-demo
  namespace: my-namespace
  labels:
    app: my-demo
spec:
  replicas: 1
  template:
    metadata:
      name: my-demo-pod
      labels:
        app: my-demo
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": windows
      containers:
      - name: my-demo-container
        image: myregistry.azurecr.io/my.demo:latest
        imagePullPolicy: Always
        resources:
          limits:
            cpu: 1
            memory: 800M
          requests:
            cpu: .1
            memory: 300M
        ports:
          - containerPort: 80
      imagePullSecrets:
      - name: my-registry-secret
  selector:
    matchLabels:
      app: my-demo
---
apiVersion: v1
kind: Service
metadata:
  name: my-demo-service
  namespace: my-namespace
spec:
  ports:
  - protocol: TCP
    port: 80
    name: my-demo-port
  selector:
    app: my-demo

【问题讨论】:

  • 你使用什么样的容器来服务 Angular 站点?您可以分享 Dockerfile 或容器本身的更多详细信息吗?
  • @wolmi 在 Dockerfile 中我只是将一堆构建工件复制在一起,但我可以分享我的 .yaml
  • 你能发布kubectl describe pod <pod_name>的输出吗?

标签: kubernetes


【解决方案1】:

Completed 状态表示由cmdENTRYPOINT 调用的应用程序以非错误(即0)状态码退出。这个Completed->CrashLoopBackoff->Running 循环通常表明容器启动时调用的进程不会自行守护并退出,Kubernetes 将其视为进程“完成”,因此是状态。

检查 Dockerfile 中的 ENTRYPOINT 或 pod 模板中的 cmd 是否正在调用正确的进程(带有适当的标志)以使进程被守护。您还可以检查前一个 pod 的日志(即使用 kubectl logs --previous)以查看应用程序给出的输出

【讨论】:

  • 我会接受这个答案,因为它基本上描述了根本原因。实际发生的是,应用程序抛出了一个异常,由于某种原因返回了一个退出代码 0。因此容器上的“已完成”状态令人困惑。
猜你喜欢
  • 2019-08-06
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-25
相关资源
最近更新 更多