web-dev-qa-db-fra.com

Quelle est la raison du redémarrage du conteneur qui a échoué pour le module elasticsearch kubernetes?

Lorsque j'essaie d'exécuter mon conteneur elasticsearch via des déploiements kubernetes, mon module elasticsearch échoue après un certain temps, alors qu'il fonctionne parfaitement bien lorsqu'il est directement exécuté en tant que conteneur docker à l'aide de docker-compose ou Dockerfile. Voici ce que j'obtiens à la suite de kubectl get pods

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

ci-dessous est le résultat de 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

Voici mon elasticsearc-deployment.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: {}

Lorsque j'essaie d'obtenir des journaux à l'aide de kubectl logs -f es-764bd45bb6-w4ckn, Je reçois

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 

Quelle pourrait être la raison et la solution de ce problème?

5
Lakshya Garg

J'ai trouvé les journaux à l'aide de docker logs pour le conteneur es et a constaté que es ne démarrait pas à cause du vm.max_map_count défini sur une valeur très faible. J'ai changé le vm.max_map_count à la valeur souhaitée à l'aide de sysctl -w vm.max_map_count=262144 et le pod a démarré par la suite.

0
Lakshya Garg

J'ai eu le même problème, il peut y avoir plusieurs raisons à ce problème. Dans mon cas, le fichier jar était manquant. @Lakshya a déjà répondu à ce problème, je voudrais ajouter les étapes que vous pouvez suivre pour le résoudre.

  1. Obtenez le statut du pod, Commande - kubectl get pods
  2. Décrire le pod pour un examen plus approfondi - kubectl décrit le pod "pod-name" Les dernières lignes de sortie vous indiquent les événements et les échecs de votre déploiement
  3. Obtenez les journaux pour plus de détails - kubectl logs "pod-name"
  4. Obtenir les journaux des conteneurs - kubectl logs "pod-name" -c "container-name" Récupérer le nom du conteneur à partir de la sortie de la description de la commande pod

Si votre conteneur est en place, vous pouvez utiliser la commande kubectl exec -it pour analyser davantage le conteneur

J'espère que cela aide les membres de la communauté dans les prochains numéros.

2
Pradeep