Úvod
Jenkins je nepřetržitá integrace nástroj, který automatizuje velkou část procesu vývoje softwaru. Několik vývojových týmů pracujících na více projektech v komplexním prostředí mikroslužeb může zatěžovat omezené zdroje. Jenkins vám pomůže dodat bezchybný konečný produkt podle plánu.
Cluster Kubernetes přidává do Jenkins novou vrstvu automatizace. Kubernetes zajišťuje, že zdroje jsou využívány efektivně a že vaše servery a základní infrastruktura nejsou přetížené.
Tento kurz vám ukáže, jak nainstalovat Jenkins na cluster Kubernetes.
Předpoklady
- Přístup k příkazovému řádku/terminálu
- Cluster Kubernetes
- Plně nakonfigurovaný nástroj příkazového řádku kubectl na vašem místním počítači
Instalace Jenkinse na Kubernetes Cluster
Schopnost Kubernetes zorganizovat nasazení kontejnerů zajišťuje, že Jenkins má vždy k dispozici správné množství zdrojů. Níže uvedený příklad ukazuje, jak použít sadu souborů YAML k instalaci Jenkins na cluster Kubernetes . Soubory YAML lze snadno sledovat, upravovat a lze je neomezeně opakovaně používat.
Vytvořte jmenný prostor pro nasazení Jenkins
Odlišný jmenný prostor poskytuje další vrstvu izolace a větší kontrolu nad prostředím nepřetržité integrace. Vytvořte jmenný prostor pro nasazení Jenkins zadáním následujícího příkazu do terminálu:
kubectl create namespace jenkins
Název jmenného prostoru by měl být štítek kompatibilní s DNS. Tento příklad používá název jenkins .
Pomocí následujícího příkazu vypíšete existující jmenné prostory:
kubectl get namespaces
Výstup potvrzuje, že jenkins jmenný prostor byl úspěšně vytvořen.
Vytvořte si servisní účet
Účty služeb poskytují identity, které se používají k řízení procesů pod. Pomocí textového editoru vytvořte soubor YAML, do kterého budete ukládat prohlášení o servisním účtu:
nano sa-jenkins.yaml
Soubor definuje roli clusteru s oprávněními správce. Vytvoří také nový účet služby s názvem admin
a spojí jej s dříve definovanou rolí clusteru.
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: admin
rules:
- apiGroups: [""]
resources: ["*"]
verbs: ["*"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin
namespace: jenkins
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: admin
subjects:
- kind: ServiceAccount
name: admin
namespace: jenkins
Uložte soubor a ukončete. Použijte konfiguraci pomocí kubectl apply
.
kubectl apply -f sa-jenkins.yaml
Vytvoření Jenkinsova trvalého svazku a trvalého svazku
Úlohou trvalého svazku je ukládat základní data Jenkins a uchovávat je po dobu životnosti modulu. Vytvořte soubor YAML, který bude definovat součásti nasazení související s úložištěm:
nano volume-jenkins.yaml
V první části soubor deklaruje local-storage
skladovací třída. Druhá část definuje jenkins-pv
trvalý svazek, zatímco třetí vytváří nárok na trvalý svazek jenkins-pvc
který bude vázán na jenkins-pv
hlasitost.
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: jenkins-pv
labels:
type: local
spec:
storageClassName: local-storage
claimRef:
name: jenkins-pvc
namespace: jenkins
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
local:
path: /mnt
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- minikube
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jenkins-pvc
namespace: jenkins
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
Uložte soubor a ukončete. Dále použijte soubor.
kubectl apply -f volume-jenkins.yaml
Vytvoření a použití souboru Jenkins Deployment File
Vytvořte soubor YAML pro uložení informací o nasazení Jenkins.
nano deploy-jenkins.yaml
Soubor nasazení v tomto příkladu využívá jenkins/jenkins:lts Docker image a vytvoří 1 repliku který bude vystaven na portu 8080 .
apiVersion: apps/v1
kind: Deployment
metadata:
name: jenkins
namespace: jenkins
spec:
replicas: 1
selector:
matchLabels:
app: jenkins-server
template:
metadata:
labels:
app: jenkins-server
spec:
securityContext:
fsGroup: 1000
runAsUser: 1000
serviceAccountName: admin
containers:
- name: jenkins
image: jenkins/jenkins:lts
resources:
limits:
memory: "2Gi"
cpu: "1000m"
requests:
memory: "500Mi"
cpu: "500m"
ports:
- name: httpport
containerPort: 8080
- name: jnlpport
containerPort: 50000
livenessProbe:
httpGet:
path: "/login"
port: 8080
initialDelaySeconds: 90
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 5
readinessProbe:
httpGet:
path: "/login"
port: 8080
initialDelaySeconds: 60
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
volumeMounts:
- name: jenkins-data
mountPath: /var/jenkins_home
volumes:
- name: jenkins-data
persistentVolumeClaim:
claimName: jenkins-pvc
volumeMounts
sekce souboru připojí trvalý svazek vytvořený v předchozím kroku. livenessProbe
a readinessProbe
sekce deklarují sondy, které restartují neúspěšné moduly a detekují, kdy jsou moduly připraveny.
Ukončete soubor a uložte změny. Použijte nově vytvořený soubor k nasazení Jenkins:
kubectl apply -f deploy-jenkins.yaml
Vytvoření a použití souboru Jenkins Service
Služba Kubernetes je abstrakce, která Jenkinse vystavuje širší síti. Umožňuje nám udržovat trvalé připojení k modulu bez ohledu na změny, ke kterým v clusteru dochází.
Vytvořte soubor YAML, ve kterém definujete službu:
nano service-jenkins.yaml
Přidejte následující obsah:
apiVersion: v1
kind: Service
metadata:
name: jenkins-svc
namespace: jenkins
annotations:
prometheus.io/scrape: 'true'
prometheus.io/path: /
prometheus.io/port: '8080'
spec:
selector:
app: jenkins-server
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 44000
Uložte soubor a ukončete. Nyní vytvořte službu zadáním:
kubectl apply -f jenkins-service.yaml
Nyní máte přístup k ovládacímu panelu Jenkins.
Přístup k Jenkins Dashboard
Než přistoupíte ke spuštění Jenkins, zkontrolujte, zda všechny komponenty, které jste nasadili, fungují podle očekávání. Použijte kubectl get all
a zadejte správný jmenný prostor:
kubect get all -n jenkins
Příklad ukazuje správně fungující nasazení:
- Pod je označen jako
READY
aRunning
. - Adresa IP clusteru a porty služby byly úspěšně přiděleny.
- Nasazení je označeno jako
READY
aAVAILABLE
. - Bylo dosaženo požadovaného počtu replik (1).
Přejděte do prohlížeče a přistupte k uzlu pomocí jeho IP adresy a portu, který jste definovali v souboru služby. Pokud neznáte IP adresu svého uzlu, najděte ji ve výstupu následujícího příkazu:
kubectl get nodes -o yaml
IP adresa uzlu se nachází ve status
část výstupu.
S využitím informací z příkladu je adresa Jenkinsova řídicího panelu:
http://192.168.49.2:44000
Chcete-li získat přístup k Jenkins, musíte nejprve zadat své přihlašovací údaje. Výchozí uživatelské jméno pro nové instalace je admin .
Chcete-li získat heslo:
1. Najděte název modulu ve výstupu kubectl get all
příkaz výše.
2. Jakmile najdete název podu, použijte jej pro přístup k protokolům podu.
kubectl logs jenkins-56c9d59dc-pv8kc --namespace jenkins
3. Najděte heslo na konci protokolu ve formátu dlouhého alfanumerického řetězce.
Úspěšně jste nainstalovali Jenkins do svého clusteru Kubernetes a můžete jej použít k vytvoření nových a efektivních vývojových kanálů.