我正在托管一个Angular网站,该网站连接到Kubernetes集群中的C#后端。当我在网站上使用无法详细描述的某个功能时,窗格显示状态为“已完成”,然后进入“ CrashLoopBackOff”,然后重新启动。问题是,没有为该Pod设置任何作业(实际上,直到一个小时前,我什至不知道Jobs是一件事情)。所以我的主要问题是: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
答案 0 :(得分:0)
Completed
状态指示由cmd
或ENTRYPOINT
调用的应用程序以非错误(即0
)状态代码退出。这个Completed
-> CrashLoopBackoff
-> Running
周期通常指示在容器开始时调用的进程不会守护自己并退出,Kubernetes将该进程视为“完成”,因此状态。
检查Dockerfile中的ENTRYPOINT
或pod模板中的cmd
是否正在为要守护的进程调用正确的进程(带有适当的标志)。您还可以查看前一个pod的日志(即使用kubectl logs --previous
),以查看应用程序提供了什么输出