Redmine i Kubernetes - Del 1: Forberedelse af miljøet

6/22/2020
6 minutes
Lukáš Beňa

I denne to-delte serie vil vi implementere Redmine i Kubernetes. Vi vil bruge anbefalede værktøjer og metoder med det formål at implementere en robust instans af Redmine over HTTPS.

Vi har opdelt denne vejledning i to dele for at fokusere først på installation af værktøjer og komponenter, som Redmine-implementeringen vil bruge. Men bekymre dig ikke om kompleksiteten. Selvom du er ny til Kubernetes, vil det være en forståelig forklaring.

Denne vejledning blev skrevet for at være cloud-agnostisk, så vi undlod bevidst alle omtaler af den sky, vi brugte. Efterlad en kommentar, hvis du kan gætte, hvilken sky vi brugte, og fortæl os, hvilken detalje der afslørede det. Vi anbefaler dig at bruge Kubernetes-tjenesten, som din sky tilbyder, da den er godt integreret med andre tjenester, som din sky også tilbyder.

Miljøer som microk8s eller minikube er ikke taget i betragtning her, da de kræver lidt mere konfiguration, som er uden for denne vejlednings omfang. Især kræver vores HTTPS-konfiguration, at vores klynge har en offentlig IP-adresse.


Lad os bruge Helm

Kubernetes er et komplekst værktøj til container-orchestration. Der er mange begreber, vi skal lære for at komme i gang. Heldigvis er der et projekt kaldet Helm, som giver det abstraktionsniveau, vi har brug for. I deres egne ord "Hvis vi gjorde tingene rigtigt, kunne brugere installere Helm og inden for få minutter installere komponenter af produktionskvalitet ud af hylden"

Uden at gå ind i årsagerne til deres navne (det hele fortæller historien om en metafor, Helm, Kubernetes og Containere) gør helm virkelig installationen enklere, samtidig med at der er plads til at tilpasse komponenten til vores behov. Vi vil bruge Helm 3, deres nyeste og endnu enklere version.

Hvis du bruger skyens shell fra din skyudbyder, er der stor sandsynlighed for, at Helm 3 allerede er tilgængelig, men hvis ikke kan du installere det ved at følge vejledningen, som Helm-dokumentationen giver, helm.sh/docs/intro/install/. Du skal allerede have adgang til din klynge fra den kommandolinje, du bruger. Din skyudbyder har også en vejledning om, hvordan du gør det.


Installer Ingress Controller

Dette er den første komponent, vi vil installere i vores klynge, og det er også det første Kubernetes-koncept, vi vil se. En Ingress-controller sidder ved indgangsdøren til din klynge, modtager alle webanmodninger og omdirigerer dem til den interne komponent, der er ansvarlig for at besvare anmodningen. I starten vil der ikke være nogen klar til at besvare, men når vi installerer Redmine, vil det blive tilføjet som en destination for anmodningerne.

Kubernetes leverer NGINX Ingress Controller, som vi vil bruge. Deres dokumentation forklarer, hvordan man installerer det ved hjælp af Helm:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx && helm repo update

helm install ingress-controller ingress-nginx/ingress-nginx

Den første kommando tilføjer applikationsrepositoryen, hvor ingress-controlleren er, mens den anden installerer den i din klynge. Når installationen er færdig, udskriver kommandoen nogle oplysninger for at komme i gang, herunder hvordan man får den offentlige IP, der er tildelt controlleren:

kubectl get services --watch

Resultatet vil være noget lignende dette:

NAVN                   TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)          ALDER

nginx-controller       LoadBalancer   10.0.115.117   89.68.23.33   80/TCP,443/TCP   5m22s

controller-admission   ClusterIP      10.0.135.226   <none>           443/TCP          5m22s

kubernetes             ClusterIP      10.0.0.1       <none>           443/TCP          44h

Bemærk EXTERNAL-IP, da vi vil have brug for det i næste trin. Det kan ske, at værdien, du får der, i stedet for en IP er <pending>. Det tager lidt tid for skyen at få en offentlig IP og tildele den til din klynge. Vent bare et par sekunder mere, og IP'en burde være tilgængelig.


Opret en DNS A-post

Nu hvor du har IP'en, kan du bare gå til en browser og se, hvordan dit cluster svarer dig. Selvfølgelig, da der endnu ikke er installeret nogen applikation, vil dit cluster svare med en "404 Not Found" fejl. Vi vil oprette et DNS-domæne, som vi kan associere med den IP, forhåbentlig nemmere at huske end en liste af tal og prikker.

Måden at oprette et internetdomæne for din Redmine afhænger i høj grad af din domæneudbyder, men i alle tilfælde ender du med at oprette en DNS A-post, der forbinder et domænenavn med din IP. Se følgende skærmbillede fra DNS-udbyderen no-ip.com som reference.

Oprettelse af vores DNS A-post

De data, der skal udfyldes, som du nok forventer, er DNS-navnet og IP'en. No-IP er lige det, vi har brug for at illustrere oprettelsen af et domæne, men du vil sandsynligvis vælge en anden DNS-udbyder. Processen er ret ens i dem alle.

Det tager lidt tid for den nye post at sprede sig, så du kan bruge ping til at kontrollere, hvornår IP'en er korrekt opløst:

ping redminek8s.ddns.net


Næste trin

Nu hvor vi har en ingress-controller og et DNS-domæne, er det eneste, der mangler, at konfigurere HTTPS for vores websted og installere Redmine. Vi vil bruge PostgreSQL som vores database, men du vil se, hvor nemt det er at konfigurere alt ved hjælp af Helm.

Hold dig opdateret på Redmine in Kubernetes Part 2: Installing Redmine.

Den ultimative Redmine-opgradering? Nemt.

Få alle kraftfulde værktøjer til perfekt projektplanlægning, -styring og -kontrol i en enkelt software.

Prøv Easy Redmine i en 30 dages gratis prøveperiode

Fuld funktionalitet, SSL-beskyttet, daglige backups, i din geolocation