Azure部署微服务Pod遇CrashLoopBackOff问题求助
问题:Azure上部署微服务Pod处于CrashLoopBackOff状态
日志输出
执行kubectl logs --previous --tail 10 app-dev-559d688468-8lr6n得到以下错误:
/usr/local/bin/python: can't open file '/app/3/ON_ /Scripts/manage.py': [Errno 2] No such file or directory
Kubernetes资源配置
apiVersion: apps/v1 kind: Deployment metadata: name: app-dev namespace: dev spec: replicas: 1 selector: matchLabels: app: app template: metadata: labels: app: app spec: containers: - name: -app image: "${DOCKER_REGISTRY}/app:${IMAGE_TAG}" readinessProbe: failureThreshold: 6 httpGet: path: / port: 8000 initialDelaySeconds: 30 periodSeconds: 30 successThreshold: 1 timeoutSeconds: 1 imagePullPolicy: Always command: ["/bin/sh"] args: - -c - >- /bin/sed -i -e "s/# 'autodynatrace.wrappers.django'/'autodynatrace.wrappers.django'/" /app/T /ON_ 3/ON_ /settings.py && /usr/local/bin/python manage.py collectstatic --noinput && AUTOWRAPT_BOOTSTRAP=autodynatrace AUTODYNATRACE_FORKABLE=True /usr/local/bin/gunicorn --workers 8 --preload --timeout 120 --config gunicorn.conf.py --bind 0.0.0.0:8000 env: - name: AUTODYNATRACE_POD_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: AUTODYNATRACE_APPLICATION_ID value: Django ($(AUTODYNATRACE_POD_NAME):8000) ports: - containerPort: 8000 volumeMounts: - name: secrets readOnly: true mountPath: /root/FHIREngine/conf - name: secrets readOnly: true mountPath: /home/ view/FHIREngine/conf imagePullSecrets: - name: docker-registry-credentials volumes: - name: secrets secret: secretName: config defaultMode: 420 restartPolicy: Always --- apiVersion: v1 kind: Service metadata: name: app namespace: dev spec: type: NodePort ports: - name: app port: 8000 targetPort: 8000 selector: app: app --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app namespace: dev annotations: #external-dns.alpha.kubernetes.io/hostname: .io #external-dns.alpha.kubernetes.io/type: external kubernetes.io/ingress.class: nginx-internal spec: rules: - host: com http: paths: - path: / backend: service: name: app port: number: 8000 pathType: ImplementationSpecific
Pod事件信息
执行kubectl describe pod得到以下事件:
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning BackOff 13m (x681 over 157m) kubelet Back-off restarting failed container Normal Pulling 3m27s (x36 over 158m) kubelet Pulling image " applicationA:latest"
解决思路
1. 修复启动命令中的路径错误
从日志和配置能看到明显的路径异常:
- sed命令的目标路径
/app/T /ON_ 3/ON_ /settings.py包含多余空格,属于无效路径,需修正为容器内settings.py的真实路径(比如/app/ON_3/settings.py,具体根据镜像内结构调整) python manage.py未指定绝对路径,容器启动时的工作目录可能不是manage.py所在位置,需改为绝对路径,比如/usr/local/bin/python /app/Scripts/manage.py(需匹配镜像内实际路径)
2. 修正Volume挂载路径错误
Deployment中Volume挂载路径/home/ view/FHIREngine/conf包含空格,这是无效的Linux路径,会导致挂载失败,需改为/home/view/FHIREngine/conf(移除空格)
3. 验证容器内文件结构
临时修改Deployment的启动命令,让容器保持运行以便排查:
command: ["/bin/sh"] args: ["-c", "sleep 3600"]
应用修改后,执行kubectl exec -it <pod-name> -n dev -- /bin/sh进入容器,检查:
/app目录下的实际文件结构,确认settings.py和manage.py的真实位置- Volume挂载路径是否正常创建,secret内容是否正确挂载
4. 确认镜像一致性
检查GitHub Actions中${DOCKER_REGISTRY}和${IMAGE_TAG}变量是否正确注入,确保Azure环境拉取的镜像与AWS环境运行正常的镜像完全一致
5. 检查Secret配置
确认名为config的Secret是否在dev命名空间存在,且包含的内容符合应用需求,挂载路径不会覆盖应用的关键文件
内容的提问来源于stack exchange,提问作者green
相关产品推荐
相关产品推荐

