ElasticSearchkubernetes pod回退重启失败container的原因是什么?

yh2wf1be  于 2022-12-26  发布在  Kubernetes
关注(0)|答案(4)|浏览(223)

当我尝试通过kubernetes部署运行我的elasticsearch容器时,我的elasticsearch pod会在一段时间后失败,而当使用docker-compose或Dockerfile直接作为docker容器运行时,它运行得非常好。

NAME                  READY     STATUS    RESTARTS   AGE
es-764bd45bb6-w4ckn   0/1       Error     4          3m

下面是kubectl describe pod的结果

Name:           es-764bd45bb6-w4ckn
Namespace:      default
Node:           administrator-thinkpad-l480/<node_ip>
Start Time:     Thu, 30 Aug 2018 16:38:08 +0530
Labels:         io.kompose.service=es
            pod-template-hash=3206801662
Annotations:    <none> 
Status:         Running
IP:             10.32.0.8
Controlled By:  ReplicaSet/es-764bd45bb6
Containers:
es:
Container ID:   docker://9be2f7d6eb5d7793908852423716152b8cefa22ee2bb06fbbe69faee6f6aa3c3
Image:          docker.elastic.co/elasticsearch/elasticsearch:6.2.4
Image ID:       docker-pullable://docker.elastic.co/elasticsearch/elasticsearch@sha256:9ae20c753f18e27d1dd167b8675ba95de20b1f1ae5999aae5077fa2daf38919e
Port:           9200/TCP
State:          Waiting
  Reason:       CrashLoopBackOff
Last State:     Terminated
  Reason:       Error
  Exit Code:    78
  Started:      Thu, 30 Aug 2018 16:42:56 +0530
  Finished:     Thu, 30 Aug 2018 16:43:07 +0530
Ready:          False
Restart Count:  5
Environment:
  ELASTICSEARCH_ADVERTISED_HOST_NAME:  es
  ES_JAVA_OPTS:                        -Xms2g -Xmx2g
  ES_HEAP_SIZE:                        2GB
Mounts:
  /var/run/secrets/kubernetes.io/serviceaccount from default-token-nhb9z (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  default-token-nhb9z:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-nhb9z
    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  6m                default-scheduler                     Successfully assigned default/es-764bd45bb6-w4ckn to administrator-thinkpad-l480
 Normal   Pulled     3m (x5 over 6m)   kubelet, administrator-thinkpad-l480  Container image "docker.elastic.co/elasticsearch/elasticsearch:6.2.4" already present on machine
 Normal   Created    3m (x5 over 6m)   kubelet, administrator-thinkpad-l480  Created container
 Normal   Started    3m (x5 over 6m)   kubelet, administrator-thinkpad-l480  Started container
 Warning  BackOff    1m (x15 over 5m)  kubelet, administrator-thinkpad-l480  Back-off restarting failed container

下面是我的ElasticSearch部署.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.1.0 (36652f6)
  creationTimestamp: null
  labels:
    io.kompose.service: es
  name: es
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: es
    spec:
      containers:
      - env:
        - name: ELASTICSEARCH_ADVERTISED_HOST_NAME
          value: es
        - name: ES_JAVA_OPTS
          value: -Xms2g -Xmx2g
        - name: ES_HEAP_SIZE
          value: 2GB
        image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4
        name: es
        ports:
        - containerPort: 9200
        resources: {}
      restartPolicy: Always
 status: {}

当我尝试使用kubectl logs -f es-764bd45bb6-w4ckn获取日志时,我得到

Error from server: Get https://<slave node ip>:10250/containerLogs/default/es-764bd45bb6-w4ckn/es?previous=true: dial tcp <slave node ip>:10250: i/o timeout

此问题的原因和解决方案可能是什么?

svmlkihl

svmlkihl1#

我遇到了同样的问题,这个问题可能有几个原因。在我的情况下,jar文件丢失。@Lakshya已经回答了这个问题,我想添加您可以采取的步骤来解决它。
1.获取pod状态,命令-kubectl get pod
1.描述pod以便进一步查看-**kubectl describe pod“pod-name”**输出的最后几行提供事件以及部署失败的位置
1.获取日志以了解更多详细信息-kubectl记录“pod-name”
1.获取容器日志-kubectl logs“pod名称”-c“容器名称”从describe pod命令的输出中获取容器名称
如果容器已启动,则可以使用
kubectl exec -it
命令进一步分析容器
希望对社区成员在未来的问题上有所帮助。

bvk5enib

bvk5enib2#

我找到了使用docker logs作为es容器的日志,发现由于vm.max_map_count设置为非常低的值,es没有启动。我使用sysctl -w vm.max_map_count=262144vm.max_map_count更改为所需的值,之后pod启动。

wecizke3

wecizke33#

可能配置不正确,但有效,读取Pod日志并找到错误消息。修复配置并重新部署应用程序

bejyjqdl

bejyjqdl4#

在我的例子中,我只是运行kubectl run ubuntu --image=ubuntu得到类似的错误,kubectl logs是空的
我猜原因是ubuntu镜像没有命令会自动关机,所以解决办法是:
输出k8s Ubuntu配置文件yaml
在命令make container命令中使用dont container poweroff(例如,添加“sleep infinity”,以下是工作配置yaml

{
  "kind": "Pod",
  "apiVersion": "v1",
  "metadata": {
    "name": "ubuntu",
    "creationTimestamp": null,
    "labels": {
      "run": "ubuntu"
    }
  },
  "spec": {
    "containers": [
      {
        "name": "ubuntu",
        "image": "ubuntu:20.04",
        "command": [
          "sleep",
          "infinity"
        ],
        "resources": {},
        "imagePullPolicy": "IfNotPresent"
      }
    ],
    "restartPolicy": "Always"
  },
  "status": {}
}

相关问题