web-dev-qa-db-de.com

Jenkins kubernetes Plugin funktioniert nicht

Ich versuche, die dynamische Erstellung von Jenkins-Slaves mit dem Plugin jenkins-kubernetes einzurichten.

Mein Jenkins läuft außerhalb von K8s Cluster.

Link: https://github.com/jenkinsci/kubernetes-plugin

Meine jenkins Version ist 2.60.2 und Kubernetes Plugin Version ist 1.1.2

Ich habe die in der Readme-Datei genannten Schritte befolgt und die Verbindung erfolgreich hergestellt.

Meine Einstellung sieht so aus:  enter image description here

Und die Verbindung ist erfolgreich.

Dann habe ich einen Job mit Pod-Vorlage erstellt:  enter image description here

Hier beginnt das Problem: 1. Wenn ich diesen Job zum ersten Mal ausführe, wird er ausgeführt und der Slave-Container in meinem Pod kann keine Verbindung herstellen und wirft:

 enter image description here

Ich habe den JNLP-Port (50000) aktiviert und bin mir nicht sicher, ob es der richtige Port ist, auch wenn mit zufälliger Option in Jenkins nichts funktioniert hat.

2. Jetzt habe ich diesen Jenkins-Job verworfen und erneut ausgeführt. Er lautet:

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

und in kubernetes fängt kein pod an. Das ist komisch .

Ich bin nicht sicher, was ich falsch mache. Brauche Hilfe!

5
Vaibhav Jain

Anstatt Zertifikate zu verwenden, empfehle ich Ihnen, Anmeldeinformationen in kubernetes zu verwenden, indem Sie ein serviceAccount erstellen:

---
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

und Bereitstellen von Jenkins mit diesem 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 
....

Ich zeige dir meine Screenshots für das Kubernetes-Plugin (beachte Jenkins-Tunnel für den JNLP-Port, 'jenkins' ist der Name meines Kubernetes-Dienstes):

 enter image description here

 enter image description here

Für Anmeldeinformationen:

 enter image description here

Füllen Sie dann die Dateien aus (die ID wird automatisch generiert, die Beschreibung wird in der Liste der Anmeldeinformationen angezeigt), aber stellen Sie sicher, dass Sie in kubernetes einen serviceAccount erstellt haben, wie ich bereits sagte:

 enter image description here

Meine Anweisungen richten sich an den Jenkins-Meister in Kubernetes. Wenn Sie es außerhalb des Clusters (aber Slaves innerhalb) möchten, denke ich, müssen Sie einfache Login/Passwort-Anmeldeinformationen verwenden.

In Bezug auf Ihren letzten Fehler scheint es sich um einen Host-Auflösungsfehler zu handeln: Der Slave kann Ihren Host nicht auflösen.

Ich hoffe es hilft dir.

8
Nicola Ben

OK! Ich finde das Problem, ich gebe Container-Cap als 10 (im Standard-Namespace), was für meinen Cluster zu niedrig ist. Ich habe 15 Worker Nodes-Cluster und wenn K8s Master versucht, einen Pod zu starten, startet er mehrere Pods gleichzeitig (obwohl die Pause endet, nachdem einer geplant wurde), was schließlich die Grenze für den Container-Cap überschreitet (was 10 war). Ich habe die GAP auf 100 geändert und jetzt funktionieren die Dinge wie erwartet.

Eine Sache, die mir bei K8s Jenkins-Plugins aufgefallen ist, ist, dass der Fehlercontainer selbst nicht gelöscht wird, was die Containeranzahl erhöht und zu diesem Problem führt.

1
Vaibhav Jain