Я получаю ошибку обратной связи cra sh при создании модуля. но я не знал никакого решения - PullRequest
1 голос
/ 26 февраля 2020

Это то, что я продолжаю получать:

al8-1@al8-1:~/kuber_test/pod_nginx$ kubectl get pods
NAME         READY   STATUS             RESTARTS   AGE
nginx        1/1     Running            0          6d2h
pod-apigw2   0/1     CrashLoopBackOff   1          15s

Ниже выводится "kubectl description pods pod-apigw2"

Name:         pod-apigw2
Namespace:    default
Priority:     0
Node:         al8-2/192.168.15.59
Start Time:   Wed, 26 Feb 2020 16:33:30 +0900
Labels:       <none>
Annotations:  cni.projectcalico.org/podIP: 192.168.4.55/32
Status:       Running
IP:           192.168.4.55
IPs:
  IP:  192.168.4.55
Containers:
  apigw2:
    Container ID:   docker://f684ef44ae53fd3176ddd7c051c9670da65da4bec84a1402359561abc646d85d
    Image:          parkdongwoo/apigw_test:v1
    Image ID:       docker-pullable://parkdongwoo/apigw_test@sha256:a447f131f0c9e63bb02a74708f4cbc2f6dd4551b0ba8f737b09072a8cc74c759
Port:           8080/TCP
Host Port:      0/TCP
State:          Waiting
  Reason:       CrashLoopBackOff
Last State:     Terminated
  Reason:       Completed
  Exit Code:    0
  Started:      Wed, 26 Feb 2020 16:37:00 +0900
  Finished:     Wed, 26 Feb 2020 16:37:00 +0900
Ready:          False
Restart Count:  5
Environment:    <none>
Mounts:
  /var/run/secrets/kubernetes.io/serviceaccount from default-token-z72r6 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  default-token-z72r6:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-z72r6
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  <unknown>              default-scheduler  Successfully assigned default/pod-apigw2 to al8-2
  Normal   Pulled     4m26s (x4 over 5m23s)  kubelet, al8-2     Successfully pulled image "parkdongwoo/apigw_test:v1"
  Normal   Created    4m26s (x4 over 5m22s)  kubelet, al8-2     Created container apigw2
  Normal   Started    4m25s (x4 over 5m21s)  kubelet, al8-2     Started container apigw2
  Normal   Pulling    3m38s (x5 over 5m26s)  kubelet, al8-2     Pulling image "parkdongwoo/apigw_test:v1"
  Warning  BackOff    19s (x24 over 5m16s)   kubelet, al8-2     Back-off restarting failed container

Но когда я попытался посмотреть журнал, ничего не вышло

al8-1@al8-1:~/kuber_test/pod_nginx$ kubectl logs pod-apigw2
al8-1@al8-1:~/kuber_test/pod_nginx$ kubectl logs pod-apigw2 -p
al8-1@al8-1:~/kuber_test/pod_nginx$

Это мой файл yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-apigw2
spec:
  selector:
      app: apigw2
  containers:
      - name: apigw2
        image: parkdongwoo/apigw_test:v1
        imagePullPolicy: Always
        ports:
                - name: port-apigw2
                  containerPort: 8080

Если я запускаю образ docker с помощью команды "docker run", я смог запустить образ без каких-либо проблема, только через kubernetes я получил cra sh.

Может кто-нибудь помочь мне, как я могу отлаживать, не видя никакого журнала?

Ответы [ 3 ]

0 голосов
/ 26 февраля 2020

Проблема в том, что команда по умолчанию и аргументы, предоставленные образом контейнера в вашем модуле, завершены и завершаются с кодом 0. Затем kubernetes видит, что контейнер не запущен, поэтому он перезапускает его и заканчивает тем, что повторяет этот l oop, который представлен статусом pod: CrashLoopBackOff.

Это потому, что контейнеры Kubernetes обрабатываются немного иначе, чем в docker. Поэтому не все docker образы, которые правильно работают в docker, совместимы с kubernetes из get go.

Согласно документации kubernetes :

Определите команду и аргументы при создании Pod

При создании Pod вы можете определить команду и аргументы для контейнеров, которые запускаются в Pod. Чтобы определить команду, включите поле command в файл конфигурации. Чтобы определить аргументы для команды, включите поле args в файл конфигурации. Заданные вами команда и аргументы не могут быть изменены после создания Pod.

Заданные вами в файле конфигурации команда и аргументы переопределяют команду и аргументы по умолчанию, предоставляемые образом контейнера. Если вы задаете аргументы, но не определяете команду, команда по умолчанию используется с вашими новыми аргументами.

Так что для устранения этой проблемы вам нужно посмотреть на изображение docker. с помощью. Скорее всего, требуется небольшое изменение файла docker, чтобы по умолчанию процесс (команда) фактически являлся процессом сервера веб-приложений.

Надеюсь, это поможет.

0 голосов
/ 27 февраля 2020

Основной процесс использования docker изображения, который вы используете, только что закончил свою работу и закончил. Скорее всего, вам нужно найти скрипт, который используется в этом docker образе, чтобы запустить службу.

Затем в своем определении модуля вы можете вызвать эту команду через command и args. Смотрите этот пример .

0 голосов
/ 26 февраля 2020

Привет, пожалуйста, предоставьте вывод команды:

kubectl logs pod-apigw2 -c apigw2

Или, что еще лучше, установите stern, это программа просмотра журналов, и вы можете видеть журналы модулей и их контейнеров в реальном времени;). Просто скопируйте двоичный файл, измените привилегии, чтобы вы могли его запустить и запустить.

https://github.com/wercker/stern

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...