Redmine in Kubernetes - Deel 1: Voorbereiden van de omgeving

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

In deze tweedelige serie zullen we Redmine implementeren in Kubernetes. We zullen aanbevolen tools en werkwijzen gebruiken met als doel het implementeren van een veerkrachtige instantie van Redmine via HTTPS.

We hebben deze how-to in twee delen verdeeld om ons eerst te richten op het installeren van de tools en componenten die de Redmine-implementatie zal gebruiken. Maar maak je geen zorgen over complexiteit. Zelfs als je nieuw bent in Kubernetes, zal het een begrijpelijke uitleg zijn.

Deze handleiding is geschreven om cloud-agnostisch te zijn, dus we hebben opzettelijk alle vermeldingen van de cloud die we hebben gebruikt weggelaten. Laat een reactie achter als je kunt raden welke cloud we hebben gebruikt en vertel ons welk detail het verklapte. We raden je aan om de Kubernetes-service te gebruiken die je cloud biedt, omdat deze goed geïntegreerd is met andere services die je cloud ook biedt.

Omgevingen zoals microk8s of minikube worden hier niet beschouwd omdat ze wat meer configuratie vereisen die buiten de scope van deze handleiding valt. In het bijzonder vereist onze HTTPS-configuratie dat ons cluster een openbaar IP-adres heeft.


Laten we Helm gebruiken

Kubernetes is een complexe tool voor container-orchestratie. Er zijn veel concepten die we moeten leren om aan de slag te gaan. Gelukkig is er een project genaamd Helm dat het abstractieniveau biedt dat we nodig hebben. In hun eigen woorden "Als we de dingen goed deden, konden gebruikers Helm installeren en binnen enkele minuten productieklare off-the-shelf-componenten installeren."

Los van de redenen voor hun namen (het vertelt allemaal het verhaal van een metafoor, Helm, Kubernetes en Containers) vereenvoudigt helm de installatie echt terwijl het ruimte biedt om het component aan onze behoeften aan te passen. We zullen Helm 3 gebruiken, hun nieuwste en nog eenvoudigere versie.

Als je de cloud shell van je cloudprovider gebruikt, is de kans groot dat Helm 3 al beschikbaar is, maar zo niet, dan kun je het installeren volgens de handleiding die de Helm-documentatie biedt, helm.sh/docs/intro/install/. Je moet al toegang hebben tot je cluster vanaf de opdrachtregel die je gebruikt. Je cloudprovider heeft ook een handleiding over hoe je dat moet doen.


Installeer de Ingress Controller

Dit is het eerste component dat we in onze cluster zullen installeren en ook het eerste Kubernetes-concept dat we zullen zien. Een Ingress-controller bevindt zich bij de ingang van uw cluster, ontvangt alle webverzoeken en stuurt ze door naar het interne component dat verantwoordelijk is voor het beantwoorden van het verzoek. In eerste instantie zal er niemand klaar zijn om te antwoorden, maar wanneer we Redmine installeren, wordt het toegevoegd als een bestemming voor de verzoeken.

Kubernetes biedt de NGINX Ingress Controller die we zullen gebruiken. Hun documentatie legt uit hoe u het kunt installeren met behulp van Helm:

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

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

De eerste opdracht voegt het repository van applicaties toe waar de Ingress-controller zich bevindt, terwijl de tweede deze installeert in uw cluster. Wanneer het klaar is, zal de opdracht enkele informatie afdrukken om te beginnen, inclusief hoe u het openbare IP-adres dat aan de controller is toegewezen kunt verkrijgen:

kubectl get services --watch

Het resultaat zal iets vergelijkbaars zijn:

NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)          AGE

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

Let op het EXTERNAL-IP, want we hebben het nodig in de volgende stap. Het kan gebeuren dat in plaats van een IP de waarde die u daar krijgt <pending> is. Het duurt even voordat de cloud een openbaar IP verkrijgt en toewijst aan uw cluster. Wacht gewoon nog een paar seconden en het IP zou beschikbaar moeten zijn.


Maak een DNS A-record aan

Nu je het IP hebt, kun je gewoon naar een browser gaan en zien hoe je cluster op je reageert. Natuurlijk zal je cluster, omdat er nog geen applicatie is geïnstalleerd, antwoorden met een "404 Not Found" foutmelding. We zullen een DNS-domein maken dat we aan dat IP kunnen koppelen, hopelijk gemakkelijker te onthouden dan een lijst met cijfers en punten.

Hoe je een internetdomein voor je Redmine kunt maken, hangt sterk af van je domeinprovider, maar in alle gevallen maak je uiteindelijk een DNS A-record aan dat een domeinnaam koppelt aan je IP. Zie de volgende schermafbeelding van de DNS-provider no-ip.com als referentie.

Ons DNS A-record aanmaken

De gegevens die je moet invullen, zijn zoals je zou verwachten, de DNS-naam en het IP. No-IP is precies wat we nodig hebben om de creatie van een domein te illustreren, maar je hebt waarschijnlijk een andere DNS-provider gekozen of zult dat doen. Het proces is vrijwel hetzelfde bij allemaal.

Het duurt even voordat het nieuwe record is verspreid, dus je kunt ping gebruiken om te controleren wanneer het IP correct wordt opgelost:

ping redminek8s.ddns.net


Volgende stappen

Nu we een ingress-controller en een DNS-domein hebben, is het enige wat nog rest, HTTPS configureren voor onze site en Redmine installeren. We zullen PostgreSQL als onze database gebruiken, maar je zult zien hoe gemakkelijk het is om alles te configureren met behulp van Helm.

Blijf op de hoogte voor Redmine in Kubernetes Part 2: Installing Redmine.

De ultieme Redmine-upgrade? Makkelijk.

Krijg alle krachtige tools voor perfect projectplanning, -beheer en -controle in één software.

Probeer Easy Redmine 30 dagen gratis uit

Volledige functies, SSL-beveiligd, dagelijkse back-ups, in uw geografische locatie