kubectl получить стручки показывает CrashLoopBackoff - PullRequest
1 голос
/ 28 марта 2019

Я пытаюсь создать модуль, используя мой локальный образ докера следующим образом.

1.Первый запуск этой команды в терминале

eval $(minikube docker-env)

2.Я создал образ докера следующим образом

sudo docker image build -t my-first-image:3.0.0 .

3.Я создал pod.yml, как показано ниже, и запускаю эту команду

kubectl -f create pod.yml.

4. Затем я попытался запустить эту команду

kubectl get pods

но показывает следующую ошибку


NAME                                  READY   STATUS             RESTARTS   AGE
multiplication-6b6d99554-d62kk        0/1     CrashLoopBackOff   9          22m
multiplication2019-5b4555bcf4-nsgkm   0/1     CrashLoopBackOff   8          17m
my-first-pod                          0/1     CrashLoopBackOff   4          2m51

5.i получить журналы стручков

kubectl describe pod my-first-pod 

Events:
  Type     Reason     Age                    From               Message
  ----     ------     ----                   ----               -------
  Normal   Scheduled  6m22s                  default-scheduler  Successfully assigned default/my-first-pod to minikube
  Normal   Pulled     5m20s (x4 over 6m17s)  kubelet, minikube  Successfully pulled image "docker77nira/myfirstimage:latest"
  Normal   Created    5m20s (x4 over 6m17s)  kubelet, minikube  Created container
  Normal   Started    5m20s (x4 over 6m17s)  kubelet, minikube  Started container
  Normal   Pulling    4m39s (x5 over 6m21s)  kubelet, minikube  pulling image "docker77nira/myfirstimage:latest"
  Warning  BackOff    71s (x26 over 6m12s)   kubelet, minikube  Back-off restarting failed container


Dockerfile

    FROM node:carbon
    WORKDIR /app
    COPY . .
    CMD [ "node", "index.js" ]

pods.yml

    kind: Pod
    apiVersion: v1
    metadata:
     name: my-first-pod
    spec:
     containers:
     - name: my-first-container
       image: my-first-image:3.0.0

index.js

    var http = require('http');
    var server = http.createServer(function(request, response) {
     response.statusCode = 200;
     response.setHeader('Content-Type', 'text/plain');
     response.end('Welcome to the Golden Guide to Kubernetes
    Application Development!');
    });
    server.listen(3000, function() {
     console.log('Server running on port 3000');
    });

Ответы [ 3 ]

2 голосов
/ 28 марта 2019

Попробуйте проверить логи с помощью команды kubectl logs -f my-first-pod

1 голос
/ 28 марта 2019

Мне удалось запустить ваш образ, выполнив следующие действия:

docker build -t foo .

, затем проверьте, работает ли контейнер docker run -it foo

/app/index.js:5
response.end('Welcome to the Golden Guide to Kubernetes
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

SyntaxError: Invalid or unexpected token
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:617:28)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Function.Module.runMain (module.js:694:10)
    at startup (bootstrap_node.js:204:16)
    at bootstrap_node.js:625:3

Не уверен, что именно этого результата вы хотели видеть, сам контейнер запускается. Но в Кубернетес он попадает в ErrImagePull

Затем, после редактирования вашего Pod.yaml, вдохновленного @Harsh Manvar, он прекрасно работает с этим. Таким образом, проблема с выходом после выполненной команды была только частью проблемы.

apiVersion: v1
kind: Pod
metadata:
  name: hello-pod
spec:
  restartPolicy: Never
  containers:
  - name: hello
    image: "foo"
    imagePullPolicy: Never
    command: [ "sleep" ]
    args: [ "infinity" ]

Это Minikube, поэтому вы можете повторно использовать изображения, но если у вас будет больше узлов, это может вообще не работать. Вы можете найти хорошее объяснение использования локальных образов докера с Kubernetes здесь .

1 голос
/ 28 марта 2019
kind: Pod
    apiVersion: v1
    metadata:
     name: my-first-pod
    spec:
     containers:
     - name: my-first-container
       image: my-first-image:3.0.0
       command: [ "sleep" ]
       args: [ "infinity" ]

Я думаю, что ваш модуль завершается после выполнения скрипта внутри index.js

...