簡體   English   中英

Kubernetes pod 無法啟動並獲得 CrashLoopBackOff

[英]Kubernetes pod wont start and get CrashLoopBackOff

當我嘗試運行kubectl apply -f frontend.yaml時,我從kubectl get podskubectl describe pods得到以下響應

// frontend.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: malvacom-frontend
  labels:
    app: malvacom-frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: malvacom-frontend
  template:
    metadata:
      labels:
        app: malvacom-frontend
    spec:
      containers:
        - name: malvacom-frontend
          image: docker.io/forsrobin/malvacom_frontend
          imagePullPolicy: IfNotPresent

          ports:
            - containerPort: 80
          resources:
            limits:
              memory: "128Mi"
              cpu: "200m"
          livenessProbe:
            httpGet:
              path: /index.html
              port: 80
            initialDelaySeconds: 15
            timeoutSeconds: 2
            periodSeconds: 5
            failureThreshold: 1
          readinessProbe:
            httpGet:
              path: /index.html
              port: 80
            initialDelaySeconds: 15
            periodSeconds: 5
            failureThreshold: 1
          command: [ "sleep" ]
          args: [ "infinity" ]

然后響應是

kubectl get pods
malvacom-frontend-8575c8548b-n959r   0/1     CrashLoopBackOff   5 (95s ago)   4m38s
kubectl describe pods
QoS Class:                   Guaranteed
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  17s                default-scheduler  Successfully assigned default/malvacom-frontend-8575c8548b-n959r to shoot--p1622--malvacom-web-xdmoi2-z1-54776-bpjpw
  Normal   Pulled     15s (x2 over 16s)  kubelet            Container image "docker.io/forsrobin/malvacom_frontend" already present on machine
  Normal   Created    15s (x2 over 16s)  kubelet            Created container malvacom-frontend
  Normal   Started    15s (x2 over 16s)  kubelet            Started container malvacom-frontend
  Warning  BackOff    11s (x4 over 14s)  kubelet            Back-off restarting failed container

正如我所理解的,pod 開始了,但是因為它沒有繼續執行 kubernetes 的任務,所以刪除/停止了 pod。 我可以毫無問題地在本地運行圖像,例如,如果我使用另一個圖像thenetworkchuck/nccoffee:pourover它可以正常工作。 這是我的 Dockerfile

FROM node:alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY ./package.json /app/
RUN yarn --silent
COPY . /app
RUN yarn build
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx/nginx.conf /etc/nginx/conf.d
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

你明確告訴 Kubernetes 不要運行它的普通服務器

command: [ "sleep" ]
args: [ "infinity" ]

但它應該通過 HTTP 健康檢查

livenessProbe:
  httpGet:
    path: /index.html
    port: 80

由於sleep infinity不運行 HTTP 服務器,因此此探測將永遠不會通過,這會導致您的容器被殺死並重新啟動。

你不應該做人為的事情來“讓容器保持活力”; 刪除command:args:覆蓋。 (Dockerfile CMD是正確的,但是您從基本nginx映像中獲得了相同的CMD ,您不需要重復它。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM