簡體   English   中英

Apache 服務器以 docker 運行,但 kube.netes pod 因 CrashLoopBackOff 而失敗

[英]Apache server runs with docker run but kubernetes pod fails with CrashLoopBackOff

我的應用程序使用 apache2 web 服務器。 由於 kube.netes 集群的限制,我在 pod 中沒有 root 權限。 因此,我將 apache2 的默認端口從 80 更改為 8080,以便能夠以非 root 用戶身份運行。

我的問題是,一旦我構建了 docker 圖像並在本地運行它,它就運行良好,但是當我在集群中使用 kube.netes 進行部署時,它一直失敗並顯示:

Action '-D FOREGROUND' failed.

導致 CrashLoopBackOff。

因此,基本上 apache2 服務器無法在非 root 用戶的 pod 中運行,但在 docker 運行時在本地運行良好。

任何幫助表示贊賞。

我附上我的部署和服務文件以供參考:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: &DeploymentName app
spec:
  replicas: 1
  selector:
    matchLabels: &appName
      app: *DeploymentName
  template:
    metadata:
      name: main
      labels:
        <<: *appName
    spec:
      securityContext:
        fsGroup: 2000
        runAsUser: 1000
        runAsGroup: 3000
      volumes:
        - name: var-lock
          emptyDir: {}
      containers:
        - name: *DeploymentName
          image: image:id
          ports:
            - containerPort: 8080
          volumeMounts:
            - mountPath: /etc/apache2/conf-available
              name: var-lock
            - mountPath: /var/lock/apache2
              name: var-lock
            - mountPath: /var/log/apache2
              name: var-lock
            - mountPath: /mnt/log/apache2
              name: var-lock
          readinessProbe:
              tcpSocket:
                port: 8080
              initialDelaySeconds: 180
              periodSeconds: 60
          livenessProbe:
              tcpSocket:
                port: 8080
              initialDelaySeconds: 300
              periodSeconds: 180
          imagePullPolicy: Always
          tty: true
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
          envFrom:
            - configMapRef:
                name: *DeploymentName
          resources:
            limits:
              cpu: 1
              memory: 2Gi
            requests:
              cpu: 1
              memory: 2Gi

---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: &hpaName app
spec:
  maxReplicas: 1
  minReplicas: 1
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: *hpaName
  targetCPUUtilizationPercentage: 60

---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: app
  name: app
spec:
  selector:
    app: app
  ports:
    - protocol: TCP
      name: http-web-port
      port: 80
      targetPort: 8080
    - protocol: TCP
      name: https-web-port
      port: 443
      targetPort: 443

CrashLoopBackOff是 Kube.netes 中的一個常見錯誤,表示 pod 在死循環中不斷崩潰。

CrashLoopBackOff錯誤可能由多種問題引起,包括:

  1. Insufficient resources - 資源不足導致容器無法加載 Locked file——文件已被另一個容器鎖定

  2. Locked database - 數據庫正在被其他 pod 使用和鎖定 Failed reference - 對容器中不存在的腳本或二進制文件的引用

  3. 設置錯誤- Kube.netes 中的初始化容器設置問題 配置加載錯誤 - 服務器無法加載配置文件。

  4. 錯誤配置——常見的文件系統錯誤配置連接問題——DNS 或kube -DNS 無法連接到第三方服務

  5. 部署失敗的服務——嘗試部署已經失敗的服務/應用程序(例如,由於無法訪問其他服務)

要修復 kube.netes CrashLoopbackoff 錯誤,請參閱此鏈接並查看stackpost以獲取更多信息。

暫無
暫無

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

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