K8S的10个常见失败问题的原因

1. Wrong Container Image / Invalid Registry Permissions

当pod状态为ErrImagePullImagePullBackOff时,通常是由于以下3个原因(在排查网络故障的前提下):

  • 镜像tag写错
  • 镜像不存在,或拉取的镜像仓库地址写错
  • 没有拉取镜像的权限(漏配了imagePullSecrets

2. Application Crashing after Launch

当看到pod出现CrashLoopBackOff状态时,说明K8S试图启动这个pod,但是pod内有一个或多个的容器启动失败。可以通过过describe来查看pod的Event信息,通常从这些信息中可以找到ReasonExit Code等提示信息。

对于应用的失败,当然少不了查看应用日志。如果应用日志是输出到stdout的话(建议这样),就可以使用kubectl logs命令来查看日志。

小技巧:
对于pod被重启的情况,通常有用的日志信息在之前的容器,这时,可以加上--previous参数来查看容器前一个实例的日志

3. Missing ConfigMap or Secret

ConfigMap和Secret是在应用运行时将配置等信息注入最佳实践方式。但是,如果在应用启动前忘了创建ConfigMap或Secret,将会导致pod启动失败。

Missing ConfigMap

当pod要用到一个还没创建的ConfigMap时,状态会显示为RunContainerError。此时用kubectl describe可以查看事件信息,会有类似于:configmaps xxxxxxx not found的事件提示信息。

Missing Secret

假设pod将把名为myothersecret的Secret挂载作为数据卷,当myothersecret还并没有生成:

# missing-secret.yaml
apiVersion: v1
kind: Pod
metadata:
  name: secret-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox
      command: [ "/bin/sh", "-c", "env" ]
      volumeMounts:
        - mountPath: /etc/secret/
          name: myothersecret
  restartPolicy: Never
  volumes:
    - name: myothersecret
      secret:
        secretName: myothersecret

执行kubectl create -f missing-secret.yaml后,会发现pod状态一直为ContainerCreating。同样,通过kubectl describe查看事件信息,会有类似于:secrets "myothersecret" not found的提示。

…未完待续

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章