这里记录下一次k8s里解决CrashLoopBackOff的思路和过程。
我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。
问题现象
在一次测试ConfigMap的过程中,我想起一个单容器的pod,简单的打印出容器内所有的环境变量,以验证ConfigMap的传递。结果pod起来以后一直出现CrashLoopBackOff的状态。
这里为了抽离出问题的本质,去掉干扰项,将pod的生成yaml文件简化如下
apiVersion: v1
kind: Pod
metadata:
name: configmap-pod-1
spec:
containers:
- name: cm-container-1
image: alpine
imagePullPolicy: IfNotPresent
command: [ "/bin/sh", "-c", "env" ]
创建pod
[root@k8s-master ~]# kubectl apply -f test.yaml
pod/configmap-pod-1 created
但是pod却一直是如下状态
[root@k8s-master ~]# kubectl get pod configmap-pod-1 -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
configmap-pod-1 0/1 CrashLoopBackOff 3 68s 10.244.1.90 k8s-node1 <none> <none>
不仅显示CrashLoopBackOff
状态,还一直重启
问题分析
通常pod出现这种出错并不停重启的现象,归纳起来有以下几种可能:
- 容器内应用一直在崩溃
- yaml文件中对pod的一些字段配置有误
- k8s集群的部署有问题
但是我这里一条都不满足。这个集群一直运行着很多应用都平安无事,说明集群本身没事。这个容器的镜像只是官方的alpine,除了额外运行了一条she