Kubernetes

AnsibleForms und seine MySQL-Datenbank mit dem Helm-Chart installieren

  1. Voraussetzungen
  2. 1. Die Chart-Values holen
  3. 2. Den Speicher konfigurieren
  4. 3. Die Anmeldedaten setzen
  5. 4. Das RTE-Image wählen
  6. 5. Das Chart installieren
  7. 6. Die Installation prüfen
  8. 7. AnsibleForms öffnen
  9. 8. Anmelden
  10. Ein Runner auf Kubernetes
  11. Nächste Schritte

Das Helm-Chart deployt AnsibleForms mit MySQL und der RTE, die die Playbooks ausführt (siehe die Values-Referenz). Der Installer installiert das Chart ebenfalls, anhand weniger Fragen, und aktualisiert auch ein Release, das er nicht installiert hat. Dasselbe Chart installiert auch einen einzelnen Runner, für ein AnsibleForms, das anderswo läuft (siehe Ein Runner auf Kubernetes).


Voraussetzungen

Bevor Sie beginnen, benötigen Sie:

  • Kubernetes-Cluster : mit einem kubectl, das so konfiguriert ist, dass es ihn erreicht
  • Helm 3 : um das Chart zu installieren und zu aktualisieren
  • Speicher : eine StorageClass für dynamische Bereitstellung oder vorab angelegte PersistentVolumes
  • Ingress-Controller : nur, wenn Sie AnsibleForms über einen Ingress veröffentlichen wollen

1. Die Chart-Values holen

Holen Sie die Standard-Values des Charts in eine eigene Datei, aus dem Chart-Repository oder aus der OCI-Registry:

helm repo add ansibleforms https://ansibleforms.com/helm-charts/
helm repo update
helm show values ansibleforms/ansibleforms > my_values.yaml

2. Den Speicher konfigurieren

Sowohl AnsibleForms als auch MySQL speichern ihre Daten auf einem persistenten Volume. Setzen Sie für jedes die StorageClass und die Größe:

storages:
  server:
    className: longhorn
    size: 5Gi
    accessMode: ReadWriteOnce
  mysql:
    className: longhorn
    size: 5Gi
    accessMode: ReadWriteOnce

Ein leerer className verwendet die Standard-StorageClass des Clusters. Der Zugriffsmodus ist standardmäßig ReadWriteMany, den viele Storage-Klassen nicht anbieten; ReadWriteOnce reicht bei einer einzelnen Replika. Für vorab angelegte PersistentVolumes siehe das README des Charts.


3. Die Anmeldedaten setzen

AnsibleForms braucht ein Admin-Konto, ein Datenbankpasswort und ein ENCRYPTION_SECRET, den Schlüssel, der die in AnsibleForms gespeicherten Anmeldedaten verschlüsselt. Um diesen Schlüssel später zu ändern, setzen Sie ENCRYPTION_SECRET_PREVIOUS für einen Start auf den alten: jedes gespeicherte Secret wird dann mit dem neuen Schlüssel neu verschlüsselt. Sie können sie auf eine von drei Arten angeben:

Setzen Sie sie in my_values.yaml. Das Chart speichert sie in einem Secret namens <release>-secrets:

applications:
  server:
    env:
      ADMIN_USERNAME: admin
      ADMIN_PASSWORD: a-strong-password
      ENCRYPTION_SECRET: a-random-string-of-32-characters
  mysql:
    password: a-strong-database-password

4. Das RTE-Image wählen

AnsibleForms 7 führt selbst kein Playbook aus: das tut die RTE (Laufzeitumgebung). Das Chart betreibt sie als zweiten Container im Server-Pod, auf demselben Volume, und registriert sie als Standard-Runner rte, sodass Playbook-Formulare ohne jede Einrichtung funktionieren. Seit 7.3.0 verbindet sich die App mit ihr auf 127.0.0.1 und hält einen WebSocket offen (RTE_MODE=inbound, siehe Modi): die RTE bekommt keine Datenbankeinstellungen und keinen Verschlüsselungsschlüssel. Der Konfigurations-Seed des Charts deklariert RTE-Anmeldedaten mit dem Token und dieser Adresse sowie den Runner, Modus inbound, der sich damit anmeldet.

Das Standard-Image, ghcr.io/ansibleforms/ansibleforms-rte-full, enthält ansible mit seinen Collections und die Python-Bibliotheken, die das 6.5-Image hatte. Für mehr oder weniger bauen Sie ein eigenes auf einer der drei RTE-Schichten (ansibleforms-rte-base, -rte-core oder -rte-full, siehe Die RTE-Images) und lassen das Chart darauf zeigen:

containers:
  rte:
    image: registry.example.com/my-rte:7.0.0
applications:
  rte:
    env:
      ANSIBLE_PATH: /app/dist/persistent/playbooks

Das Token zwischen App und RTE und der Schlüssel, der die Sitzungen signiert, werden bei der ersten Installation im Secret <release>-keys erzeugt und bei jeder Aktualisierung beibehalten. Mit einem eigenen Konfigurations-Seed fügen Sie diese Anmeldedaten und diesen Runner dort hinzu: die Hinweise, die Helm nach der Installation ausgibt, zeigen wie (siehe das README des Charts).


5. Das Chart installieren

Installieren Sie das Chart mit Ihren Values in einen eigenen Namespace:

helm upgrade --install ansibleforms ansibleforms/ansibleforms \
  --namespace ansibleforms --create-namespace \
  --values my_values.yaml

Mit der OCI-Registry verwenden Sie oci://ghcr.io/ansibleforms/charts/ansibleforms als Chart. In allem, was unbeaufsichtigt läuft, fixieren Sie die Chart-Version mit --version, damit nie von selbst ein neues Release installiert wird.


6. Die Installation prüfen

Das Chart enthält einen Test, der sowohl den Webserver als auch die Datenbankverbindung prüft:

helm test ansibleforms --namespace ansibleforms --logs

Der Test endet mit OK, wenn AnsibleForms antwortet und seine Datenbank Verbindungen annimmt.


7. AnsibleForms öffnen

Wie Sie AnsibleForms erreichen, hängt davon ab, wie der Server veröffentlicht ist:

Mit dem Standarddienst ClusterIP und ohne Ingress ist nichts außerhalb des Clusters erreichbar. Leiten Sie einen lokalen Port weiter, um einen Blick darauf zu werfen:

kubectl -n ansibleforms port-forward svc/ansibleforms-server 8080:80

Öffnen Sie dann http://127.0.0.1:8080/.


8. Anmelden

Melden Sie sich als Admin-Benutzer an, standardmäßig admin. So lesen Sie das Passwort aus dem Secret:

kubectl -n ansibleforms get secret ansibleforms-secrets \
  -o jsonpath='{.data.ADMIN_PASSWORD}' | base64 -d

Mit secrets.existingSecret lesen Sie es stattdessen aus Ihrem eigenen Secret.


Ein Runner auf Kubernetes

Mit runner.enabled installiert das Chart nur eine RTE: einen Runner für ein AnsibleForms, das anderswo installiert ist, in einem anderen Namespace, einem anderen Cluster oder auf einer VM. Er verbindet sich mit der App und hält einen WebSocket offen (RTE_MODE=outbound, siehe Modi), daher braucht er keine Datenbank, keinen Verschlüsselungsschlüssel und keinen eingehenden Port. Er rendert keine App, kein MySQL, keinen Service und keinen Ingress:

helm install runner1 ansibleforms/ansibleforms \
  --namespace runners --create-namespace \
  --set runner.enabled=true \
  --set runner.appUrl=https://forms.example.com \
  --set runner.name=zone-a \
  --set runner.joinToken=afj_...
Value Was er bewirkt
runner.enabled Installiert nur den Runner: keine App, kein MySQL, kein Service, kein Ingress
runner.appUrl Die Adresse der App, wie man sie öffnet, gegebenenfalls mit ihrer BASE_URL. Pflichtangabe
runner.name Der Runner-Name, unter dem er beitritt (RTE_NAME). Leer: der Name des Release
runner.joinToken Ein in der App erstelltes Beitritts-Token, das beim ersten Start gelesen wird, um den Runner sofort freizugeben
runner.appTlsVerify false akzeptiert das selbstsignierte Zertifikat der App (APP_TLS_VERIFY=0), nur innerhalb eines vertrauenswürdigen Netzwerks

Ohne Beitritts-Token bittet der Runner um Beitritt und wartet, bis ein Admin ihn unter Verbindungen > Runner freigibt. Nach der Freigabe meldet er sich mit seinem eigenen RTE_TOKEN an, das im Secret <release>-keys aufbewahrt wird: behalten Sie dieses Secret zusammen mit dem Release. Der Installer installiert diesen Runner-Modus ebenfalls, wenn Sie die Rolle Runner und Kubernetes wählen.


Nächste Schritte

Das README des Charts behandelt den Rest der Konfiguration:

  • Ihre eigene Datenbank : setzen Sie mysql.enabled: false und lassen Sie AnsibleForms auf einen bestehenden MySQL-Server zeigen
  • Formulare aus ConfigMaps : config.yaml und die Formulardateien über ConfigMaps bereitstellen
  • HTTPS hinter einem Ingress, Ressourcen, Node-Platzierung und private Registries
  • Die RTE : ihr Token, ein eigenes RTE-Image oder gar keine RTE

Um auf ein neueres Release zu wechseln, siehe Aktualisieren auf Kubernetes.