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的提示。

…未完待續

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