Кубернетес - Дженкинс рабов не в сети - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь запустить Дженкинса с Кубернетесом.Я могу установить успешное соединение с kubernetes, используя плагин jenkins kubernetes.Сейчас я запускаю пример конвейера, но во время работы я всегда получаю сообщение об ошибке:

Still waiting to schedule task
‘default-amd64-cm2rx’ is offline

И оно там висит.Если я проверяю модули с помощью kubectl get pods, я вижу, что модуль default-amd64-cm2rx работал, затем состояние изменялось на завершенное, а затем исчезало.Затем запускается и заканчивается другой модуль с похожим названием, и цикл продолжается.Последнее состояние этих модулей выглядит так:

Normal  Created    10s   kubelet, xx.xx.xx.xx  Created container
Normal  Started    10s   kubelet, xx.xx.xx.xx  Started container

Если я проверяю логи jenkins, я получаю сообщение об ошибке:

Mar 09, 2019 8:47:42 AM org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher launch
WARNING: Error in provisioning; agent=KubernetesSlave name: default-amd64-g5bgh, template=PodTemplate{inheritFrom='', name='default-amd64', namespace='', label='jenkins-latest-jenkins-slave-amd64', nodeSelector='beta.kubernetes.io/arch=amd64', nodeUsageMode=NORMAL, workspaceVolume=EmptyDirWorkspaceVolume [memory=false], volumes=[HostPathVolume [mountPath=/var/run/docker.sock, hostPath=/var/run/docker.sock]], containers=[ContainerTemplate{name='jnlp', image='myregistry;8500/jenkins-slave:latest', workingDir='/home/jenkins', command='/bin/sh -c', args='cat', resourceRequestCpu='200m', resourceRequestMemory='256Mi', resourceLimitCpu='200m', resourceLimitMemory='256Mi', livenessProbe=org.csanchez.jenkins.plugins.kubernetes.ContainerLivenessProbe@1e7ac0a6}], yaml=}
java.lang.IllegalStateException: Pod has terminated containers: default/default-amd64-g5bgh (jnlp)
    at org.csanchez.jenkins.plugins.kubernetes.AllContainersRunningPodWatcher.periodicAwait(AllContainersRunningPodWatcher.java:149)
    at org.csanchez.jenkins.plugins.kubernetes.AllContainersRunningPodWatcher.periodicAwait(AllContainersRunningPodWatcher.java:170)
    at org.csanchez.jenkins.plugins.kubernetes.AllContainersRunningPodWatcher.await(AllContainersRunningPodWatcher.java:122)
    at org.csanchez.jenkins.plugins.kubernetes.KubernetesLauncher.launch(KubernetesLauncher.java:121)
    at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:293)
    at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
    at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

Вот моя конфигурация плагина kuebrnetes:

enter image description here

Как видно, соединение установлено успешно, и модуль запускается.

Есть идеи, почему он остается в автономном режиме?ТИА.

1 Ответ

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

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

В Дженкинсе он находится в разделе Настройка безопасности.

Из документации Дженкинса: https://jenkins.io/doc/book/managing/security/

TCP-порт JNLP

Jenkins использует порт TCP для связи с агентами, запущенными по протоколу JNLP, такими как агенты на базе Windows. Начиная с версии Jenkins 2.0 этот порт по умолчанию отключен.

Для администраторов, желающих использовать агенты на основе JNLP, доступны два параметра порта:

Случайно: порт JNLP выбирается случайным образом, чтобы избежать коллизий на мастере Jenkins. Недостатком рандомизированных портов JNLP является то, что они выбираются при загрузке мастера Jenkins, что затрудняет управление правилами брандмауэра, разрешающими трафик JNLP.

Исправлено: порт JNLP выбирается администратором Jenkins и является согласованным при перезагрузках мастера Jenkins. Это упрощает управление правилами брандмауэра, позволяя агентам на основе JNLP подключаться к мастеру.

...