Kubernetes中应用启动后又挂掉的解决思路

Kubernetes中应用启动后又挂掉的解决思路

之前有人问我为什么Kubernetes中的应用已启动就会挂掉,今天就来聊聊这件事。

其实,k8s 中应用启动后就挂掉是一个非常常见的现象。本文将通过案例模拟这种现象,以及提供一些解决思路和方法。

首先我们创建一个deployment ,其应用会很快挂掉:

当然先检查集群状态

在这里插入图片描述

集群没有问题,我们进行案例测试验证
在这里插入图片描述
创建容器中,一会儿后,会发现STATUS变为CrashLoopBackOff的错误,也就是说左边的容器一直没有变为READY。当然这排除了我们拼写错误的前提之下来进行的测试。

在这里插入图片描述

这个现象告诉我们Kubernetes正在尽力启动这个pod,但是一个或多个容器已经挂了,或者正在被删除。

解决的思路就是:先定位这个状态问题,然后使用describe去查看这个pod创建等更多的信息

这个比较长久不太方便截图,就直接看代码吧,截图解决看下面的截图。

[root@master01 ~]# kubectl describe pod crasher-95bc688d7-6p7cn
Name:               crasher-95bc688d7-6p7cn
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               192.168.0.130/192.168.0.130
Start Time:         Thu, 28 May 2020 11:34:50 +0800
Labels:             pod-template-hash=95bc688d7
                    run=crasher
Annotations:        <none>
Status:             Running
IP:                 172.17.70.4
Controlled By:      ReplicaSet/crasher-95bc688d7
Containers:
  crasher:
    Container ID:   docker://fffb471ab7d1e7c071d90b8a9558e330f5f075a34562b248a421d6fc572ab185
    Image:          rosskukulinski/crashing-app
    Image ID:       docker-pullable://rosskukulinski/crashing-app@sha256:5f7a1a3425f3e8eeaa5b0be0f3948ee6cf5380f75d95f0c96e549e91cf98db1d
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       CrashLoopBackOff
    Last State:     Terminated
      Reason:       Error
      Exit Code:    1
      Started:      Thu, 28 May 2020 11:39:41 +0800
      Finished:     Thu, 28 May 2020 11:39:42 +0800
    Ready:          False
    Restart Count:  5
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-sj4gb (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  default-token-sj4gb:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-sj4gb
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute for 300s
                 node.kubernetes.io/unreachable:NoExecute for 300s
Events:
  Type     Reason     Age                    From                    Message
  ----     ------     ----                   ----                    -------
  Normal   Scheduled  7m15s                  default-scheduler       Successfully assigned default/crasher-95bc688d7-6p7cn to 192.168.0.130
  Normal   Pulled     5m12s (x4 over 6m48s)  kubelet, 192.168.0.130  Successfully pulled image "rosskukulinski/crashing-app"
  Normal   Created    5m12s (x4 over 6m48s)  kubelet, 192.168.0.130  Created container
  Normal   Started    5m12s (x4 over 6m47s)  kubelet, 192.168.0.130  Started container
  Normal   Pulling    4m20s (x5 over 7m14s)  kubelet, 192.168.0.130  pulling image "rosskukulinski/crashing-app"
  Warning  BackOff    2m9s (x17 over 6m28s)  kubelet, 192.168.0.130  Back-off restarting failed container

请看下图红色方框信息

在这里插入图片描述

表示这个pod正在被terminated,这是因为容器中的应用挂了,而且我们发现其退出码为1。

为什么会挂掉呢?你去查看日志就会大吃一惊:没有日志!!!

[root@master01 ~]# kubectl logs crasher-95bc688d7-6p7cn
[root@master01 ~]# kubectl logs crasher-95bc688d7-6p7cn  --previous//查看前一个容器

这就很尴尬了,接下来的思路就是我们需要给应用加一些启动日志,来定位问题,也可以在本地运行这个容器,来确定是否确实环境变量或者是挂载卷的问题
以上就该问题的主要解决思路,希望大家采纳!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值