Плагин Jenkins kubernetes не работает

Я пытаюсь настроить создание Jenkins Dynamic slave с помощью плагина jenkins-kubernetes.

Мой jenkins работает за пределами кластера K8s.

Ссылка: https://github.com/jenkinsci/kubernetes-plugin

Моя версия jenkins - 2.60.2, а версия плагина Kubernetes - 1.1.2.

Я выполнил шаги, упомянутые в файле readme, и успешно настроил соединение.

Моя настройка выглядит так:  введите описание изображения здесь

И соединение успешно.

Затем я создал задание с шаблоном модуля:  введите описание изображения здесь

Здесь начинается проблема: 1. Когда я запускаю это задание изначально, оно запускается, и подчиненный контейнер jenkins внутри моего модуля не может подключиться и выдает:

введите описание изображения здесь

Я включил порт JNLP (50000), не уверен, что это правильный порт, даже если он протестирован со случайной опцией в Jenkins, ничего не сработало.

2. Теперь я отказался от этой работы Дженкинса и снова запустил ее, в ней говорится:

 Started by user Vaibhav Jain
[Pipeline] podTemplate
[Pipeline] {
[Pipeline] node
Still waiting to schedule task
Jenkins doesn’t have label defaultlabel

и в кубернетах не запускается ни один под. Это странно.

Я не уверен, что делаю не так. Нужна помощь!


person Vaibhav Jain    schedule 18.12.2017    source источник
comment
Несколько простых вопросов для понимания контекста: 1 - можете ли вы успешно подключиться к k8s на странице конфигурации Jenkins? 2 - включена ли у вас защита на основе прокси и / или матрицы?   -  person cpanato    schedule 18.12.2017
comment
1. Да, я могу подключиться, отображается сообщение об успешном подключении. 2. Нет, я не включил прокси-сервер или безопасность на основе матрицы. Я использую K8s 1.6   -  person Vaibhav Jain    schedule 19.12.2017
comment
Привет, у меня есть вопрос, я настраиваю дженкинсов и рабов в разные кластеры. Как вы сделали так, чтобы Дженкинс мог общаться с другим кластером ?? Спасибо!   -  person Alo    schedule 26.09.2018
comment
@Alo, вы можете использовать для этого файл kubeconfig (это может быть RBAC или ABAC)   -  person Vaibhav Jain    schedule 18.10.2018


Ответы (2)


Вместо использования сертификатов я предлагаю вам использовать учетные данные в кубернетах, создав serviceAccount:

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: jenkins
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
  resources: ["pods/exec"]
  verbs: ["create","delete","get","list","patch","update","watch"]
- apiGroups: [""]
  resources: ["pods/log"]
  verbs: ["get","list","watch"]
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  name: jenkins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: jenkins
subjects:
- kind: ServiceAccount
  name: jenkins

и развертывание jenkins с использованием этого serviceAccount:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: jenkins
  name: jenkins
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:           
      serviceAccountName: jenkins 
....

Я показываю вам свои скриншоты для плагина Kubernetes (обратите внимание на туннель Jenkins для порта JNLP, jenkins - это имя моей службы kubernetes):

введите описание изображения здесь

введите описание изображения здесь

Для учетных данных:

введите описание изображения здесь

Затем заполните поля (идентификатор будет автоматически сгенерирован, описание будет показано в списке учетных данных), но не забудьте создать serviceAccount в кубернетах, как я сказал ранее:

введите описание изображения здесь

Мои инструкции предназначены для мастера Дженкинса внутри кубернетов. Если вы хотите, чтобы он находился вне кластера (но рабы внутри), я думаю, вам нужно использовать простые учетные данные для входа / пароля.

Что касается вашей последней ошибки, похоже, это ошибка разрешения хоста: ведомое устройство не может разрешить ваш хост.

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

person Nicola Ben    schedule 18.12.2017
comment
Спасибо @Nicola за подробный ответ, но в этом случае мне нужно переместить мой Jenkins в K8s, который сам по себе имеет свои проблемы. Я планирую запустить Jenkins вне кластера K8s и использовать кластер K8s в качестве ведомых устройств. Есть какие-нибудь советы по этому поводу? Кроме того, если бы я переключился на ваш подход, каков был бы тип учетных данных при установке плагина K8s (рисунок, показанный выше учетных данных Kubernetes для Jenkins) и каковы были бы эти учетные данные? - person Vaibhav Jain; 19.12.2017
comment
Спасибо Николаю за ваше руководство, я переключился на мастера Jenkins внутри K8s и создал учетную запись службы после этого :::: github.com/jenkinsci/kubernetes-plugin/tree/master/src/main/ :::: Я развертываю Jenkins как набор с отслеживанием состояния вместо развертывания, но сталкиваюсь с проблемами в создании PV и заявлении на него, что приводит к сбою модуля с отслеживанием состояния. Любая идея ? не могли бы вы поделиться своим yaml-файлом развертывания Jenkins, чтобы я мог развернуть и использовать Jenkins. - person Vaibhav Jain; 19.12.2017

Ok! Я обнаружил проблему, я даю крышке контейнера значение 10 (в пространстве имен по умолчанию), что слишком мало для моего кластера. У меня есть кластер из 15 рабочих узлов, и когда мастер K8s пытается запустить модуль, он запускает сразу несколько модулей (хотя прекращает отдых после того, как один из них запланирован), что в конечном итоге превышает предел крышки контейнера (который был 10). Я изменил CAP на 100, и теперь все работает, как ожидалось.

Одна вещь, которую я заметил с плагинами K8s Jenkins, это не очищает сам контейнер ошибок, что увеличивает количество контейнеров и приводит к этой проблеме.

person Vaibhav Jain    schedule 23.12.2017
comment
он не очищает контейнеры с ошибками, чтобы избежать бесконечного создания контейнеров. Основные журналы Jenkins будут печатать предупреждения - person csanchez; 20.02.2018
comment
Мне потребовалось 2 дня, чтобы понять. Благодарю. Я думаю, что это должен быть принятый ответ, поскольку ваша проблема связана с запуском мастера jenkins вне кластера. - person Kanwar Saad; 25.05.2018