Redmine in Kubernetes - Deel 2: Redmine installeren in Kubernetes

6/30/2020
8 minutes
Lukáš Beňa.

Dit is het tweede deel van de serie over het implementeren van Redmine in Kubernetes. In dit artikel geven we instructies over hoe je een betrouwbare installatie van Redmine kunt implementeren.

Terugblik Deel 1

Op dit moment kijk je vast uit naar de installatie van Redmine op Kubernetes. Daarvoor ben je tenslotte hier, toch?

In Redmine in Kubernetes - Deel 1: Voorbereiden van de omgeving hebben we de Ingress Controller geïnstalleerd, een component om internetverzoeken binnen je cluster om te leiden, en hebben we een DNS-domein, redminek8s.ddns.net, aangemaakt. Nu hoeven we alleen nog HTTPS te configureren en dan zijn we klaar om Redmine te implementeren.


HTTPS met cert-manager

Hoewel we Redmine als HTTP kunnen houden, is HTTPS de standaard geworden voor websites. Zozeer zelfs dat de meeste browsers je waarschuwen voor een beveiligingsprobleem wanneer HTTPS niet wordt gebruikt door een website.

Het inschakelen van HTTPS is meestal geen eenvoudige taak, omdat je een certificaat moet kopen en het moet uploaden naar je site, het na een bepaalde tijd moet vernieuwen en het proces moet herhalen. Cert-manager automatiseert dit alles, inclusief de vernieuwing van certificaten, en verkrijgt zelfs gratis certificaten. Je kunt meer informatie vinden op hun site, maar ik zal je alles uitleggen wat je moet weten.


Installeer cert-manager

Voer de volgende stappen uit om cert-manager in je cluster te installeren:

helm repo add jetstack https://charts.jetstack.io && helm repo update

helm install cert-manager jetstack/cert-manager --set installCRDs=true

Eerst voeg je het repository toe waar cert-manager zich bevindt, en vervolgens installeer je de nieuwste versie.


Verbinden met de Certificate Authority

Nu moeten we cert-manager instrueren om verbinding te maken met de door ons gekozen Certificate provider. We zullen LetsEncrypt gebruiken, een gratis certificaatautoriteit. Maak eerst dit bestand aan (vergeet niet om <jouw-e-mailadres> te vervangen door een echt e-mailadres) en noem het cluster-issuer.yaml

apiVersion: cert-manager.io/v1alpha2

kind: ClusterIssuer

metadata:

  name: letsencrypt

spec:

  acme:

    server: https://acme-v02.api.letsencrypt.org/directory

    email: <jouw-e-mailadres>

    privateKeySecretRef:

      name: letsencrypt

    solvers:

    - http01:

        ingress:

          class: nginx

Voer het vervolgens uit op je cluster met

kubectl apply -f cluster-issuer.yaml

Gefeliciteerd! Het bovenstaande bestand is de eerste kubernetes-configuratie die we schrijven en toepassen op de cluster. Je hebt misschien opgemerkt dat het laat zien hoe je verbinding kunt maken met LetsEncrypt, maar het beschrijft ook de Ingress Controller die we hebben gemaakt in Deel 1 (De class: nginx aan het einde). Dit type configuratie heeft enkele regels met spaties om de afhankelijkheid van sommige eigenschappen op andere aan te geven. Houd die spaties zoals getoond om ervoor te zorgen dat het bestand correct wordt gelezen en toegepast.

Nu is je cluster HTTPS ingeschakeld. Telkens wanneer we een applicatie installeren, kunnen we deze instrueren om met HTTPS te werken en voilà! Het hele proces van het verkrijgen van het certificaat wordt automatisch achter de schermen uitgevoerd.


Redmine installeren

Dit is waar we allemaal op hebben gewacht. We kunnen Redmine op verschillende manieren installeren, maar veruit de meest handige manier is om Helm te gebruiken. Zoals we eerder al deden, voegen we eerst het repository toe waar Redmine zich bevindt.

helm repo add bitnami https://charts.bitnami.com/bitnami && helm repo update

Maar deze keer maken we in plaats van direct te installeren een configuratiebestand aan om aan te geven welk aangepast gedrag we willen dat Redmine vertoont.

We zullen alle configuraties in hun eigen sectie scheiden, maar ze allemaal in hetzelfde bestand plaatsen, één na de ander. Noem het bestand values.yaml.

Alle Helm-toepassingen hebben een values.yaml-bestand met alle mogelijke configuraties die aan de toepassing kunnen worden aangebracht. Wanneer we onze eigen values.yaml maken, definiëren we de wijzigingen die we willen. Elke waarde die we niet in ons bestand opnemen, blijft zoals het is in het standaardbestand.

Alle standaardwaarden zijn ook te vinden op de helm-toepassingspagina, https://hub.helm.sh/charts/bitnami/redmine. Ga gerust alle configuraties na.


Eerste beheerdersgebruiker

Redmine-gebruikersnaam: adminUser

Redmine-wachtwoord: <mijn-wachtwoord>

Deze stap is net zo noodzakelijk als gemakkelijk te begrijpen. Dit is onze eerste gebruiker op Redmine, degene die we zullen gebruiken om voor de eerste keer in te loggen.

Wanneer Redmine is geïnstalleerd, kunt u met deze gebruiker toegang krijgen tot de configuratie van uw gloednieuwe installatie.


PostgreSQL-database

Standaard vereist onze Helm-installatie dat er een mariadb-database wordt aangemaakt. We zullen in plaats daarvan onze installatie configureren om PostgreSQL te gebruiken. U moet ook ten minste een wachtwoord toevoegen om toegang te krijgen tot deze database, zoals u hieronder kunt zien.

databaseType: postgresql

mariadb:

  enabled: false

postgresql:

  enabled: true

  postgresqlDatabase: Redmine

  postgresqlUsername: Redmine

  postgresqlPassword: <een-veilig-wachtwoord>

We moeten expliciet aan onze installatie vertellen dat we niet willen dat MariaDB samen met de configuratie voor de PostgreSQL-database wordt geïnstalleerd.


DNS-naamconfiguratie

De onderstaande configuratie is de andere kant van de DNS-configuratie die we in deel 1 hebben gedaan. Zoals u kunt zien, schakelen we TLS in, het protocol achter HTTPS, en stellen we de hostnaam in die we hebben gebruikt bij het maken van onze DNS-record:

ingress:

  enabled: true

  certManager: true

  hostname: redminek8s.ddns.net

  tls: true

  annotations:

    kubernetes.io/ingress.class: nginx

    cert-manager.io/cluster-issuer: letsencrypt

Ook in de laatste twee regels koppelen we onze applicatie met de Ingress Controller en met de Cluster Issuer die we eerder hebben gemaakt.

Nu kunnen we Redmine implementeren met onze aangepaste configuratie:

helm install Redmine -f values.yaml bitnami/redmine

Die regel is vergelijkbaar met andere helm installatieregels die we eerder hebben gebruikt, maar deze keer leveren we een aangepaste values.yaml. Dit is de manier om elke Helm-applicatie aan te passen.

We hebben nog wat geduld nodig, omdat het maken van de applicatie enige tijd in beslag neemt. U kunt dit commando uitvoeren om de status van uw applicatiecontainers te controleren:

kubectl get pods --watch

Het commando geeft iets soortgelijks terug als dit:

NAME                      READY   STATUS    RESTARTS   AGE

. . .

redmine-999c68dd9-x7h2k    1/1     Running   0          6m40s

redmine-postgresql-0       1/1     Running   0          6m40s

U moet wachten tot de status voor beide containers Running is en allemaal klaar zijn met 1/1, wat in mijn geval ongeveer 6 minuten duurde.

Nu is alles klaar om de browser te openen en naar onze nieuwe implementatie te gaan:

Redmine is klaar


Afronding

Kubernetes is een complexe tool om applicaties te implementeren, maar we hebben door die complexiteit genavigeerd met behulp van Helm (geen woordspeling bedoeld) en een betrouwbare installatie van Redmine geïmplementeerd.

U kunt een samenvatting van deze handleiding vinden in de volgende git-repo: https://github.com/lcofre/redmine-on-k8s. Vergelijk gerust met uw bestanden als u vastloopt.

We hebben sommige concepten buiten de discussie gelaten omdat ze complex waren of de uitleg specifiek voor de cloud was. Hieronder vallen de Liveness en Readiness van uw applicatie, de configuratie van inkomende e-mails en het opschalen om meer belasting aan te kunnen. Laat ons hieronder weten waar u het meest in geïnteresseerd bent, zodat we het in een toekomstige handleiding kunnen bespreken.

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