Installationsdetails

SUSE® Rancher Prime Continuous Delivery kann in zwei Modi installiert werden: Einzel-Cluster und Multi-Cluster.

  • Einzel-Cluster-Installation: Empfohlen für den Einstieg. In diesem Modus laufen sowohl der Fleet Manager als auch der Agent im selben Cluster.

  • Multi-Cluster-Installation: Wird verwendet, um mehrere Downstream-Cluster von einem zentralen Manager aus zu verwalten.

Statisch

Im Einzel-Cluster-Setup läuft im selben Cluster sowohl der Fleet Manager als auch der Fleet agent. Der Cluster verbindet sich direkt mit dem Git-Server, um Ressourcen lokal bereitzustellen. Dies ist ein einfaches, produktionsunterstütztes Setup, das ideal für Entwicklung, Tests und den Einsatz im kleinen Maßstab ist.

Voraussetzungen

Helm 3

Fleet wird als Helm-Chart verteilt. Helm 3 ist eine clientseitige Kommandozeilenschnittstelle ohne serverseitige Komponente. Um Helm 3 zu installieren, folgen Sie den offiziellen Anweisungen im Helm-Installationshandbuch.

Kubernetes

SUSE® Rancher Prime Continuous Delivery läuft als Controller in einem bestehenden Kubernetes-Cluster. Für ein Einzel-Cluster-Setup installieren Sie SUSE® Rancher Prime Continuous Delivery im selben Cluster, den Sie mit GitOps verwalten möchten. SUSE® Rancher Prime Continuous Delivery unterstützt jede von der Community unterstützte Kubernetes-Version, typischerweise {versions.next.kubernetes} oder neuer.

Standardinstallation

Installieren Sie die folgenden Helm-Charts, um SUSE® Rancher Prime Continuous Delivery einzurichten.

SUSE® Rancher Prime Continuous Delivery in Rancher
Rancher enthält separate Helm-Charts für SUSE® Rancher Prime Continuous Delivery und verwendet ein anderes Repository.

  1. Fügen Sie das Fleet Helm-Repository hinzu

    helm repo add fleet https://rancher.github.io/fleet-helm-charts/
  2. Installieren Sie die Fleet CustomResourceDefinitions

    helm -n cattle-fleet-system install --create-namespace --wait fleet-crd \
        fleet/fleet-crd
  3. Installieren Sie die Fleet Controller

helm -n cattle-fleet-system install --create-namespace --wait fleet \
    fleet/fleet

Überprüfen Sie die Installation

Führen Sie die folgenden Befehle aus, um zu überprüfen, ob die SUSE® Rancher Prime Continuous Delivery Controller-Pods ausgeführt werden:

kubectl -n cattle-fleet-system logs -l app=fleet-controller
kubectl -n cattle-fleet-system get pods -l app=fleet-controller

Beispielausgabe:

NAME                                READY   STATUS    RESTARTS   AGE
fleet-controller-64f49d756b-n57wq   1/1     Running   0          3m21s

Sie können jetzt Git-Repositories im fleet-local Namespace registrieren, um mit der Bereitstellung von Ressourcen zu beginnen.

Anpassen Ihrer SUSE® Rancher Prime Continuous Delivery Installation

Controller- und Agenten-Replikate

Beginnend mit SUSE® Rancher Prime Continuous Delivery v0.13 stellt das Helm-Chart Replikatzahl-Einstellungen für jeden Controller-Typ und den Agenten zur Verfügung:

  • controller.replicas : Steuert fleet-controller Pods, die Bundles, Cluster und Gruppen verwalten.

  • gitjob.replicas : Steuert die GitOps GitRepo Rekonsiliation.

  • helmops.replicas : Steuert den experimentellen HelmOps-Controller.

  • agent.replicas : Steuert den Fleet agent.

Jeder hat standardmäßig eine Replik.

Aktivieren des Imagescan

Die imagescan Funktion ist standardmäßig deaktiviert, was bedeutet, dass:

  • nicht leere imageScans Blöcke in Ihren fleet.yaml oder entsprechenden Konfigurationsdateien zu Bundle-Erstellungsfehlern führen, die im Status Ihres GitRepos sichtbar sind.

  • der imagescan Controller wird nicht ausgeführt, daher werden in imageScan Blöcken von fleet.yaml oder entsprechenden Konfigurationsdateien referenzierte Repositories nicht auf neuere Bilder überwacht. Das bedeutet auch, dass Bild-Tags, die in Ihren Manifesten mit Annotationen wie image: <image>:<tag> # {"$imagescan": "test-scan"} referenziert werden, nicht erweitert werden.

Um dies zu beheben, installieren Sie Fleet mit --set imagescan.enabled=true.

Zusätzliche SSH-Known-Hosts

Beim Interagieren mit Git-Repositories über SSH sind standardmäßig strenge Hostschlüsselprüfungen aktiviert, was bedeutet, dass SUSE® Rancher Prime Continuous Delivery SSH-Verbindungsversuche zu Hosts ablehnt, für die kein known_hosts Eintrag existiert.

Für weitere Informationen siehe strenge Hostschlüsselprüfungen.

Standardmäßig installiert Fleet known_hosts Einträge für einige weit verbreitete Git-Hosting-Anbieter.

Die zur Konfigurations-Map hinzugefügten Hostschlüssel-Fingerabdrücke stammen jeweils aus:

Wenn jedoch ein anderes Git-Hosting-Setup verwendet wird, wie z.B. private Server, die von Ihnen oder Ihrem Unternehmen gehostet werden, können Einträge für diese Server bei der Installation von Fleet mit dem additionalKnownHosts Helm-Wert hinzugefügt werden, der ein Array von Zeichenfolgen unterstützt. Jedes Element dieses Arrays wäre ein zusätzlicher Eintrag, z.B.:

helm -n cattle-fleet-system install --create-namespace --wait fleet fleet/fleet \
  --set additionalKnownHosts={'ourgitserver.company ssh-rsa <fingerprint>','our-other-git-server.company ssh-ed25519 <fingerprint2>'}

Multi-Controller-Installation: Sharding

Bereitstellung

Ab Version 0.10 unterstützt SUSE® Rancher Prime Continuous Delivery statisches Sharding. Jeder Shard wird durch eine eindeutige Shard-ID definiert. Sie können optional einen Node Selector zuweisen, sodass alle Controller-Pods für diesen Shard auf bestimmten Knoten ausgeführt werden.

Installieren Sie SUSE® Rancher Prime Continuous Delivery mit den folgenden Helm-Optionen:

  • --set shards[$index].id=$shard_id

  • --set shards[$index].nodeSelector.$key=$value

Beispiel:

helm -n cattle-fleet-system install --create-namespace --wait fleet fleet/fleet \
  --set shards[0].id=foo \
  --set shards[0].nodeSelector."kubernetes\.io/hostname"=k3d-upstream-server-0 \
  --set shards[1].id=bar \
  --set shards[1].nodeSelector."kubernetes\.io/hostname"=k3d-upstream-server-1 \
  --set shards[2].id=baz \
  --set shards[2].nodeSelector."kubernetes\.io/hostname"=k3d-upstream-server-2

Überprüfen Sie SUSE® Rancher Prime Continuous Delivery Controller und GitJob-Pods:

kubectl -n cattle-fleet-system get pods -l app=fleet-controller \
  -o=custom-columns='Name:.metadata.name,Shard-ID:.metadata.labels.fleet\.cattle\.io/shard-id,Node:spec.nodeName'
Name                                          Shard-ID   Node
fleet-controller-b4c469c85-rj2q8                         k3d-upstream-server-2
fleet-controller-shard-bar-5f5999958f-nt4bm   bar        k3d-upstream-server-1
fleet-controller-shard-baz-75c8587898-2wkk9   baz        k3d-upstream-server-2
fleet-controller-shard-foo-55478fb9d8-42q2f   foo        k3d-upstream-server-0

Ähnlich für GitJob-Pods:

kubectl -n cattle-fleet-system get pods -l app=gitjob \
  -o=custom-columns='Name:.metadata.name,Shard-ID:.metadata.labels.fleet\.cattle\.io/shard-id,Node:spec.nodeName'

So funktioniert’s

Jeder Fleet Controller verarbeitet Ressourcen, die mit seiner Shard-ID gekennzeichnet sind. Der unsharded Controller verarbeitet alle Ressourcen ohne eine Shard-ID.

Um ein GitRepo auf einen bestimmten Shard bereitzustellen, fügen Sie das Label fleet.cattle.io/shard-ref zur Ressource hinzu.

Beispiel:

apiVersion: fleet.cattle.io/v1alpha1
kind: GitRepo
metadata:
  name: sharding-test
  labels:
    fleet.cattle.io/shard-ref: foo
spec:
  repo: https://github.com/rancher/fleet-examples
  paths:
  - single-cluster/helm

Ein GitRepo mit einer bekannten Shard-ID (zum Beispiel foo) wird von diesem Controller verarbeitet. Unbekannte Shard-IDs (zum Beispiel boo) werden ignoriert.

Um Shards hinzuzufügen oder zu entfernen, stellen Sie SUSE® Rancher Prime Continuous Delivery mit einer aktualisierten Shard-Liste erneut bereit.

Konfiguration für Multi-Cluster

Downstream-Cluster in Rancher werden automatisch in SUSE® Rancher Prime Continuous Delivery registriert. Die folgende Einrichtung gilt nur für eigenständige SUSE® Rancher Prime Continuous Delivery und wurde von Rancher nicht auf Qualität getestet.

Die Installationsschritte sind identisch mit einem Einzel-Cluster-Setup. Nach der Installation des Fleet Manager registrieren Sie Remote-Cluster manuell. Für die von dem Manager initiierten Registrierungen sind zusätzliche API-Serverdetails erforderlich. Ohne diese ist nur eine von den Fleet agent initiierten Registrierung möglich.

API-Server-URL und CA-Zertifikat

Der Fleet Manager benötigt Zugriff auf den Kubernetes-API-Server. Fleet agents verwenden die API-Server-URL und das CA-Zertifikat, um sicher zu kommunizieren.

Erhalten Sie diese Werte aus Ihrer kubeconfig-Datei ($HOME/.kube/config):

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0tLS1CRUdJTi...
    server: https://example.com:6443

CA-Zertifikat extrahieren

Das Feld certificate-authority-data ist Base64-codiert. Dekodieren Sie es und speichern Sie es in einer Datei:

base64 -d encoded-file > ca.pem

Verwenden Sie diesen Befehl, um alle CA-Zertifikate zu extrahieren:

kubectl config view -o json --raw | jq -r '.clusters[].cluster["certificate-authority-data"]' | base64 -d > ca.pem

Für Multi-Cluster-Kubeconfigs:

kubectl config view -o json --raw | jq -r '.clusters[] | select(.name=="CLUSTERNAME").cluster["certificate-authority-data"]' | base64 -d > ca.pem

API-Server extrahieren

API_SERVER_URL=$(kubectl config view -o json --raw | jq -r '.clusters[] | select(.name=="CLUSTER").cluster["server"]')
API_SERVER_CA="ca.pem"

Validieren

Überprüfen Sie die API-Server-URL:

curl -fLk "$API_SERVER_URL/version"

Erwartete Ausgabe: JSON-Versionsinformationen oder eine 401 Unauthorized-Fehlermeldung.

Validieren Sie dann das CA-Zertifikat:

curl -fL --cacert "$API_SERVER_CA" "$API_SERVER_URL/version"

Sie sollten gültiges JSON oder eine 401 Unauthorized Nachricht sehen. Wenn Sie einen SSL-Fehler erhalten, ist die CA-Datei falsch.

Beispiel CA-Datei (ca.pem):

-----BEGIN CERTIFICATE-----
MIIBVjCB/qADAgECAgEAMAoGCCqGSM49BAMCMCMxITAfBgNVBAMMGGszcy1zZXJ2
ZXItY2FAMTU5ODM5MDQ0NzAeFw0yMDA4MjUyMTIwNDdaFw0zMDA4MjMyMTIwNDda
...
-----END CERTIFICATE-----

Für Multi-Cluster installieren

Gehen Sie davon aus, dass die API-Server-URL https://example.com:6443 ist und die CA in ca.pem ist. Wenn Ihr API-Server eine bekannte CA verwendet, lassen Sie den CA-Parameter weg.

API_SERVER_URL="https://example.com:6443"
API_SERVER_CA="ca.pem"

Installieren Sie dann die Fleet-Charts:

helm repo add fleet https://rancher.github.io/fleet-helm-charts/

Installieren Sie die CustomResourceDefinitions:

helm -n cattle-fleet-system install --create-namespace --wait \
    fleet-crd fleet/fleet-crd

Installieren Sie die Fleet Controller:

helm -n cattle-fleet-system install --create-namespace --wait \
    --set apiServerURL="$API_SERVER_URL" \
    --set-file apiServerCA="$API_SERVER_CA" \
    fleet fleet/fleet

Überprüfen

kubectl -n cattle-fleet-system logs -l app=fleet-controller
kubectl -n cattle-fleet-system get pods -l app=fleet-controller
NAME                                READY   STATUS    RESTARTS   AGE
fleet-controller-64f49d756b-n57wq   1/1     Running   0          3m21s

An diesem Punkt sollte der Fleet Manager bereit sein. Sie können jetzt Cluster registrieren und Git-Repositories hinzufügen.