Программа завершается чисто, но kubernetes находится в CrashLoopBackOff - PullRequest
0 голосов
/ 28 февраля 2020

Я создал Go клиент, который подключается к серверу, rp c exchange, log and exit. Развертывание в kubernetes, я ожидал, что это будет двигаться от "Running -> Completed -> Running" l oop, аналогично тому, как dnsutils развертывается с командой "sleep 3600" для запуска в течение часа и выход.

Я уменьшил это до самой маленькой go программы, чтобы убедиться, что никакая сложность не мешает, и это:

k8s-tester ➜ cat client.go
package main   
func main() {
    return
}

Когда я это все же вижу, я действительно вижу это * С 1049 * по «Running -> Completed -> CrashLoopBackOff -> Running» состояния.

Q: Почему kubernetes видит, что эта программа потерпела крах, когда она, при запуске из оболочки, показывает состояние выхода 0 (EXIT_SUCCESS)?

  k8s-tester ➜ kubectl create deployment --image kvaradha/client test-client
  deployment.apps/test-client created
  k8s-tester ➜ kubectl get pods -w -o wide
  NAME                                  READY   STATUS      RESTARTS   AGE   IP           NODE             NOMINATED NODE   READINESS GATES
  hello-world-server-85486b969b-x744z   1/1     Running     0          10h   10.1.0.159   docker-desktop              
  linux-544887f4fb-gksd8                1/1     Running     12         14h   10.1.0.156   docker-desktop              
  postgres-57944b47cb-2cqtk             1/1     Running     0          13d   10.1.0.136   docker-desktop              
  test-client-74cddbb988-rxx8f          0/1     Completed   1          4s    10.1.0.169   docker-desktop              
  test-client-74cddbb988-rxx8f          0/1     CrashLoopBackOff   1          5s    10.1.0.169   docker-desktop              
  test-client-74cddbb988-rxx8f          0/1     Completed          2          21s   10.1.0.169   docker-desktop              
  test-client-74cddbb988-rxx8f          0/1     CrashLoopBackOff   2          33s   10.1.0.169   docker-desktop              
  test-client-74cddbb988-rxx8f          0/1     Completed          3          50s   10.1.0.169   docker-desktop              
  test-client-74cddbb988-rxx8f          0/1     CrashLoopBackOff   3          62s   10.1.0.169   docker-desktop              </p>
</blockquote>

<p>More details:</p>

<p>Simple Dockerfile that I used:</p>

<pre><code>FROM scratch
MAINTAINER "kannan@ieee.org"
ARG  ARCH
COPY client /client
ENTRYPOINT [ "/client" ]
</code>

Сборка и развертывание как:

CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o client .
docker build -t kvaradha/client .
kubectl create deployment --image kvaradha/client test-client

Вывод docker, предложенный @sfrehse:

k8s-tester ➜ docker run --rm kvaradha/client 2020/02/28 21:33:17 hostname: 127.0.0.1:65432 name: H809430 k8s-tester ➜ echo $? 0

@ CurtisMatton: описание модуля дает мне:

Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m2s default-scheduler Successfully assigned default/test-client-74cddbb988-jmxmd to docker-desktop Warning Failed 110s kubelet, docker-desktop Failed to pull image "kvaradha/client": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: TLS handshake timeout Warning Failed 110s kubelet, docker-desktop Error: ErrImagePull Normal BackOff 109s kubelet, docker-desktop Back-off pulling image "kvaradha/client" Warning Failed 109s kubelet, docker-desktop Error: ImagePullBackOff Normal Pulling 55s (x4 over 2m1s) kubelet, docker-desktop Pulling image "kvaradha/client" Normal Created 54s (x3 over 2m) kubelet, docker-desktop Created container client Normal Pulled 54s (x3 over 2m) kubelet, docker-desktop Successfully pulled image "kvaradha/client" Normal Started 53s (x3 over 2m) kubelet, docker-desktop Started container client Warning BackOff 9s (x7 over 96s) kubelet, docker-desktop Back-off restarting failed container

Встроенный контейнер с " ОТ golang ", тот же конечный результат:

test-client-bd4c475d4-cmnd6 1/1 Running 2 30s test-client-bd4c475d4-cmnd6 0/1 Completed 2 31s hello-world-client-77775898c-564lt 0/1 Completed 325 27h test-client-bd4c475d4-cmnd6 0/1 CrashLoopBackOff 2 44s hello-world-client-77775898c-564lt 0/1 CrashLoopBackOff 325 27h

1 Ответ

2 голосов
/ 29 февраля 2020

Это предполагаемое и ожидаемое поведение. Основная задача Kubernetes - обеспечить постоянную работу определенного приложения. Если приложение выходит (независимо от кода выхода), Kubernetes (точнее, демон kubelet) предположит, что приложение аварийно завершилось, и запустит его снова. Следовательно, ожидается, что ваше приложение будет длительным процессом (т. Е. Сервером).

Если ваше приложение предназначено для запуска только один раз, а затем завершается корректно, задание Kubernetes будет быть более подходящим вместо развертывания. Таким образом, модуль будет работать без ошибок CrashLoopBackOff.

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