如何诊断k8s吊舱不断重启的原因?

pxq42qpu  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(2)|浏览(523)

我使用以下配置文件将elasticsearch部署到minikube:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: elasticsearch
spec:
  replicas: 1
  selector:
    matchLabels:
      name: elasticsearch
  template:
    metadata:
      labels:
        name: elasticsearch
    spec:
      containers:
        - name: elasticsearch
          image: elasticsearch:7.10.1
          ports:
            - containerPort: 9200
            - containerPort: 9300

我执行命令 kubectl apply -f es.yml 部署 elasticsearch 集群。

$ kubectl get pod
NAME                            READY   STATUS    RESTARTS   AGE
elasticsearch-fb9b44948-bchh2   1/1     Running   5          6m23s

ElasticSearchPod每隔几分钟就会重新启动一次。当我跑的时候 kubectl describe pod 命令,我可以看到这些事件:

Events:
  Type     Reason     Age                    From               Message
  ----     ------     ----                   ----               -------
  Normal   Scheduled  7m11s                  default-scheduler  Successfully assigned default/elasticsearch-fb9b44948-bchh2 to minikube
  Normal   Pulled     3m18s (x5 over 7m11s)  kubelet            Container image "elasticsearch:7.10.1" already present on machine
  Normal   Created    3m18s (x5 over 7m11s)  kubelet            Created container elasticsearch
  Normal   Started    3m18s (x5 over 7m10s)  kubelet            Started container elasticsearch
  Warning  BackOff    103s (x11 over 5m56s)  kubelet            Back-off restarting failed container

最后一个事件是 Back-off restarting failed 但我不知道为什么它会重启吊舱。有什么办法可以让我查一下它为什么一直重启吗?

vnzz0bqm

vnzz0bqm1#

使用检查吊舱日志 kubectl logs podname 提供可能出错的线索。

ERROR: [2] bootstrap checks failed
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[2]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
ERROR: Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/docker-cluster.log

查看此帖子以获取解决方案

9wbgstp7

9wbgstp72#

第一步( kubectl describe pod )你已经做了。下一步,我建议检查容器日志: kubectl logs <pod_name> . 在这种情况下,99%的原因来自日志(我打赌引导检查失败)。
当两者都没有的时候 describe pod 日志也没有关于错误的任何信息,我进入带有“exec”的容器: kubectl exec -it <pod_name> -c <container_name> sh . 有了它,您将在容器中得到一个shell(当然,如果容器中有shell二进制文件的话),这样您就可以使用它来手动调查问题。请注意,要使发生故障的容器保持活动状态,可能需要进行更改 command 以及 args 对这样的事情:

command:
  - /bin/sh
  - -c
args:
  - cat /dev/stdout

执行此操作时,请确保禁用探测器。如果liveness探测失败,容器可能会重新启动,您将在中看到这一点 kubectl describe pod 如果发生了。由于您的代码段没有指定任何探测,因此可以跳过此操作。

相关问题