Получение CrashLoopBackOff как статуса развернутого модуля

Как отладить, почему это статус CrashLoopBackOff?

Я не использую minikube, работаю на экземпляре Aws Kubernetes.

Я следил за этим руководством. https://github.com/mkjelland/spring-boot-postgres-on-k8s-sample

Когда я делаю

  kubectl create -f specs/spring-boot-app.yml

и проверьте статус

  kubectl get pods 

это дает

     spring-boot-postgres-sample-67f9cbc8c-qnkzg   0/1     CrashLoopBackOff   14         50m

Ниже команды

 kubectl describe pods spring-boot-postgres-sample-67f9cbc8c-qnkzg

дает

Events:
  Type     Reason   Age                    From                      Message
  ----     ------   ----                   ----                      -------
  Warning  BackOff  3m18s (x350 over 78m)  kubelet, ip-172-31-11-87  Back-off restarting failed container

Команда kubectl get pods --all-namespaces дает

NAMESPACE     NAME                                           READY   STATUS             RESTARTS   AGE
default       constraintpod                                  1/1     Running            1          88d
default       postgres-78f78bfbfc-72bgf                      1/1     Running            0          109m
default       rcsise-krbxg                                   1/1     Running            1          87d
default       spring-boot-postgres-sample-667f87cf4c-858rx   0/1     CrashLoopBackOff   4          110s
default       twocontainers                                  2/2     Running            479        89d
kube-system   coredns-86c58d9df4-kr4zj                       1/1     Running            1          89d
kube-system   coredns-86c58d9df4-qqq2p                       1/1     Running            1          89d
kube-system   etcd-ip-172-31-6-149                           1/1     Running            8          89d
kube-system   kube-apiserver-ip-172-31-6-149                 1/1     Running            1          89d
kube-system   kube-controller-manager-ip-172-31-6-149        1/1     Running            1          89d
kube-system   kube-flannel-ds-amd64-4h4x7                    1/1     Running            1          89d
kube-system   kube-flannel-ds-amd64-fcvf2                    1/1     Running            1          89d
kube-system   kube-proxy-5sgjb                               1/1     Running            1          89d
kube-system   kube-proxy-hd7tr                               1/1     Running            1          89d
kube-system   kube-scheduler-ip-172-31-6-149                 1/1     Running            1          89d

Команда kubectl logs spring-boot-postgres-sample-667f87cf4c-858rx ничего не выводит.


person Dhanraj    schedule 23.05.2019    source источник
comment
вы можете проверить пакеты с помощью kubectl describe pods spring-boot-postgres-sample-67f9cbc8c-qnkzg   -  person Thanh Nguyen Van    schedule 23.05.2019
comment
@ThanhNguyenVan Отредактировано .. я добавил События:., Что-нибудь еще, что вы хотите, чтобы я добавил?   -  person Dhanraj    schedule 23.05.2019
comment
docker logs container_id для отображения журналов контейнера, принадлежащего этим модулям   -  person Thanh Nguyen Van    schedule 23.05.2019
comment
Извините, я не знаю, как получить container_id ... Я пробовал журналы kubectl ‹dockerhubaccount_username› / jarName, но такого контейнера не было   -  person Dhanraj    schedule 23.05.2019
comment
Запустите kubectl describe pods spring-boot-postgres-sample-67f9cbc8c-qnkzg, чтобы показать, что контейнер принадлежит.   -  person Thanh Nguyen Van    schedule 23.05.2019
comment
В разделе контейнера отображается: - ID контейнера: docker: // c9704202d90fbfa87274d59dd571d2084de2b969db2be20aaffe5f0801b5f52d   -  person Dhanraj    schedule 23.05.2019
comment
Я сделал журналы докеров sudo c9704202d90fbfa87274d59dd571d2084de2b969db2be20aaffe5f0801b5f52d, но он не дает такого container_id   -  person Dhanraj    schedule 23.05.2019
comment
снова запустить kubectl describe pods. получить новый container_id, затем показать его журналы   -  person Thanh Nguyen Van    schedule 23.05.2019
comment
Опять та же ошибка   -  person Dhanraj    schedule 23.05.2019
comment
Пожалуйста, запустите тот же образ докеры с помощью docker ex. Докер запустить и посмотреть   -  person Yash Jagdale    schedule 23.05.2019
comment
Извините, я не понял ... вы можете дать мне точную команду?   -  person Dhanraj    schedule 23.05.2019
comment
вы можете запустить образ докера на своем локальном компьютере? может вы забыли изменить имя изображения в yml файле?   -  person Amityo    schedule 23.05.2019
comment
можете ли вы запустить эту команду и показать результат: kubectl get pods --all-namespaces и kubectl logs spring-boot-postgres-sample-67f9cbc8c-qnkzg, чтобы получить журналы pod   -  person Anshul Jindal    schedule 23.05.2019
comment
@AnshulJindal добавил в вопрос   -  person Dhanraj    schedule 23.05.2019
comment
Вы пробовали запустить это приложение локально без Kubernetes?   -  person Anshul Jindal    schedule 23.05.2019
comment
Я создаю его на своей оконной машине, затем помещаю эту банку в экземпляр kubernetes .. и оттуда создаю образ в докере   -  person Dhanraj    schedule 23.05.2019
comment
@ThanhNguyenVan, мне нужны твои мысли по поводу моего ответа   -  person Dhanraj    schedule 23.05.2019


Ответы (3)


Почему бы тебе ...

  1. запустить фиктивный контейнер (запустить бесконечную команду сна)

  2. kubectl exec -it bash

  3. Запустите программу напрямую и посмотрите журналы напрямую.

Это более простая форма отладки на K8s.

person DUDANF    schedule 23.05.2019
comment
У меня есть Spring boot jar, что вы имеете в виду, говоря, что запускаете программу напрямую ... и как посмотреть их логи? - person Dhanraj; 23.05.2019
comment
Разве это не показывает результат? bash kubectl logs <container-name> - person DUDANF; 24.05.2019

Прежде всего, я исправил с помощью развертывания postgres, была некоторая ошибка «pod имеет несвязанный PersistentVolumeClaims», поэтому я исправил эту ошибку в этом сообщении pod имеет несвязанные PersistentVolumeClaims

Итак, теперь мое развертывание postgres запущено.

журналы kubectl spring-boot-postgres-sample-67f9cbc8c-qnkzg ничего не печатает, это означает, что в файле конфигурации что-то не так. kubectl describe pod spring-boot-postgres-sample-67f9cbc8c-qnkzg, в котором указано, что контейнер завершен, а причина завершена, я исправил это, запустив бесконечное время контейнера, добавив

   # Just sleep forever
command: [ "sleep" ]
args: [ "infinity" ]

Итак, теперь мое развертывание выполняется. Но теперь я выставил свой сервис на

kubectl expose deployment spring-boot-postgres-sample --type=LoadBalancer --port=8080

но не могу получить External-Ip, поэтому я сделал

kubectl patch svc <svc-name> -n <namespace> -p '{"spec": {"type": "LoadBalancer", "externalIPs":["172.31.71.218"]}}'

Поэтому я получаю свой внешний IP как «172.31.71.218».

Но теперь проблема в том, что curl http://172.31.71.218:8080/ получает тайм-аут

Что-то я сделал не так?

Вот мой deployment.yml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: spring-boot-postgres-sample
  namespace: default
spec:
  replicas: 1
  template:
    metadata:
      name: spring-boot-postgres-sample
      labels:
        app: spring-boot-postgres-sample
    spec:
      containers:
      - name: spring-boot-postgres-sample
        command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]
        env:
          - name: POSTGRES_USER
            valueFrom:
              configMapKeyRef:
                name: postgres-config
                key: postgres_user
          - name: POSTGRES_PASSWORD
            valueFrom:
              configMapKeyRef:
                name: postgres-config
                key: postgres_password
          - name: POSTGRES_HOST
            valueFrom:
              configMapKeyRef:
                name: hostname-config
                key: postgres_host
        image: <mydockerHUbaccount>/spring-boot-postgres-on-k8s:v1

Вот мой postgres.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: postgres-config
  namespace: default
data:
  postgres_user: postgresuser
  postgres_password: password
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres
spec:
  template:
    metadata:
      labels:
        app: postgres
    spec:
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: postgres-pv-claim
      containers:
        - image: postgres
          name: postgres
          env:
            - name: POSTGRES_USER
              valueFrom:
                configMapKeyRef:
                  name: postgres-config
                  key: postgres_user
            - name: POSTGRES_PASSWORD
              valueFrom:
                configMapKeyRef:
                  name: postgres-config
                  key: postgres_password
            - name: PGDATA
              value: /var/lib/postgresql/data/pgdata
          ports:
            - containerPort: 5432
              name: postgres
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
spec:
  type: ClusterIP
  ports:
    - port: 5432
  selector:
    app: postgres

Вот как я получил карту конфигурации хоста

kubectl create configmap hostname-config --from-literal=postgres_host=$(kubectl get svc postgres -o jsonpath="{.spec.clusterIP}")
person Dhanraj    schedule 23.05.2019
comment
Не могу получить журналы .. Значит ли это, что моя конфигурация по-прежнему неверна? Не могли бы вы проверить мое развертывание. Yaml .. @ThanhNguyenVan - person Dhanraj; 24.05.2019
comment
вы создали postgres и configmap? - person Thanh Nguyen Van; 24.05.2019
comment
Да . Я сделал ... Я также добавил свои postgres.config и host-config - person Dhanraj; 24.05.2019
comment
Статус обеих служб запущен - person Dhanraj; 24.05.2019

Мне удалось воспроизвести сценарий. Кажется, есть проблема с подключением между приложением и Postgres DB. Итак, приложение не запустилось. Пожалуйста, найдите журналы ниже, это может вам помочь.

$ kubectl get po
NAME                                           READY     STATUS             RESTARTS   AGE
spring-boot-postgres-sample-5d7c85d98b-qwvjr   0/1       CrashLoopBackOff   19         1h


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

2019-05-23 10:53:01.889 ERROR 1 --- [           main] o.a.tomcat.jdbc.pool.ConnectionPool      : Unable to create initial connections of pool.

org.postgresql.util.PSQLException: Connection to :5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:262) ~[postgresql-9.4.1212.jre7.jar!/:9.4.1212.jre7]
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:51) ~[postgresql-9.4.1212.jre7.jar!/:9.4.1212.jre7]
person hariK    schedule 23.05.2019
comment
Почему в моем случае что-то не печатается? - person Dhanraj; 23.05.2019