Voraussetzung: ein Cluster mit oc login
als Admin. Die Default-Kataloge in openshift-marketplace müssen laufen
(oc get catalogsource -A). Auf SNO reserviert der Operator-Pod plus GitOps selbst
spürbar RAM – nach dem Test wieder deinstallieren (Schritt 7).
1 Die OLM-Objekte im Überblick
Fünf Objektarten, ein Weg vom Katalog zum laufenden Operator.
openshift-marketplace)channel, installPlanApproval: Automatic oder Manual2 Die vier Default-Kataloge
OperatorHub ist die Konsolen-Oberfläche über den CatalogSources – unter Operators → OperatorHub. Von der CLI aus:
oc get catalogsource -n openshift-marketplace oc get packagemanifests -n openshift-marketplace | grep -i gitops oc describe packagemanifest openshift-gitops-operator -n openshift-marketplace | head -30
| Katalog | ist |
|---|---|
redhat-operators | von Red Hat, voll unterstützt im OCP-Abo – GitOps, Pipelines, Serverless, Logging |
certified-operators | von Partnern zertifiziert, Support beim Partner – Crunchy Postgres, Confluent Kafka |
community-operators | von der Community, kein Support, gut zum Lernen – Strimzi, CloudNativePG, cert-manager |
redhat-marketplace | kostenpflichtig, Kauf über marketplace.redhat.com |
RAM auf SNOJeder Katalog ist ein eigener
Pod in openshift-marketplace. disableAllDefaultSources: true am
OperatorHub-Objekt cluster plus nur der gebrauchte Katalog spart
etwa 300 MB.
3 Voraussetzung: die OperatorGroup
Ohne OperatorGroup bleibt jede Subscription im Namespace hängen.
oc new-project openshift-gitops-operator
cat <<'YAML' | oc apply -f -
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: gitops-og
namespace: openshift-gitops-operator
spec:
targetNamespaces:
- openshift-gitops-operator
YAML
oc get operatorgroup -n openshift-gitops-operator
Der Wirkbereich entscheidet, wen die im Namespace laufenden Operatoren sehen dürfen:
OwnNamespace, SingleNamespace, MultiNamespace,
AllNamespaces (leere targetNamespaces). Zwei
OperatorGroups im selben Namespace brechen alle Operatoren dort – vorher immer
prüfen, ob schon eine existiert.
4 Eine Subscription abonnieren
installPlanApproval: Manual – auf einer Single-Node immer
Manual, ein Auto-Upgrade mitten in einer Demo ist unschön.
cat <<'YAML' | oc apply -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: openshift-gitops-operator namespace: openshift-gitops-operator spec: channel: latest name: openshift-gitops-operator source: redhat-operators sourceNamespace: openshift-marketplace installPlanApproval: Manual YAML oc get subscription -n openshift-gitops-operator oc describe sub openshift-gitops-operator -n openshift-gitops-operator | grep -A3 Conditions
Channels (stable, latest, alpha)
sind Release-Züge – die Subscription nennt einen, OLM hält dich auf dessen
Spitze. startingCSV pinnt eine bestimmte Version. Jede Version nennt per
replaces/skips, was sie ablöst – OLM geht die Kette
Schritt für Schritt, nicht in einem Sprung.
5 Den InstallPlan genehmigen
Bei Manual steht der InstallPlan auf
RequiresApproval, bis du ihn freigibst.
oc get installplan -n openshift-gitops-operator
IP=$(oc get installplan -n openshift-gitops-operator -o jsonpath='{.items[0].metadata.name}')
oc get installplan $IP -n openshift-gitops-operator -o jsonpath='{.spec.clusterServiceVersionNames}{"\n"}'
# ansehen was alles kommt (CRDs, RBAC, Deployment, ...):
oc get installplan $IP -n openshift-gitops-operator -o yaml | grep -A20 "resources:"
# freigeben:
oc patch installplan $IP -n openshift-gitops-operator --type=merge -p '{"spec":{"approved":true}}'
Dependency-Resolution: deklariert eine CSV
required APIs, findet OLM selbst einen Anbieter im Katalog und installiert ihn
mit – der InstallPlan zeigt dann auch die Objekte der Abhängigkeiten. Die
deinstallieren sich beim Aufräumen (Schritt 7) nicht automatisch
mit.
6 Die CSV-Phasen verfolgen
Von der Genehmigung bis zum laufenden Operator – live mitverfolgt.
oc get csv -n openshift-gitops-operator -w # Pending -> InstallReady -> Installing -> Succeeded oc describe sub openshift-gitops-operator -n openshift-gitops-operator | grep -i state oc get pods -n openshift-gitops-operator
Was hängt, steht in status.conditions der Subscription
(oc describe sub <name>) – und in den Pod-Logs des
Operator-Deployments, sobald es existiert. maxOpenShiftVersion in der CSV kann
sogar ein Cluster-Upgrade blocken (G5) – vor einem OKD-Upgrade lohnt ein Blick auf die
installierten CSVs.
7 Wieder deinstallieren
Rollback ist unschön: Subscription und CSV löschen, CRDs und Custom Resources bleiben stehen.
oc delete subscription openshift-gitops-operator -n openshift-gitops-operator oc delete csv -n openshift-gitops-operator --all oc delete project openshift-gitops-operator # CRDs bleiben clusterweit stehen, falls gewuenscht mit aufraeumen: oc get crd | grep -i gitops
Ein älterer Kanal neu abonnieren funktioniert genauso – Subscription mit dem
alten channel/startingCSV neu anlegen. Die vorhandenen CRDs und
Custom Resources bleiben dabei unberührt.
8 Typische Fallen
| Symptom | meist |
|---|---|
| Subscription bleibt ohne InstallPlan | keine passende OperatorGroup im Namespace, oder zwei auf einmal |
InstallPlan hängt bei RequiresApproval | erwartet bei Manual – ganz normal, wartet auf oc patch ... approved:true |
CSV bleibt Pending | eine benötigte API/Abhängigkeit fehlt im Katalog, oder RBAC für den Operator selbst reicht nicht |
Operator-Pod CrashLoopBackOff | Cluster-CPU/RAM knapp (häufig auf SNO), oder eine SCC/RBAC-Einschränkung passt nicht |
9 Warum die Bibliothek (noch) keinen Operator hat
Die zustandsbehaftete Infra der Bibliothek – Postgres, Kafka, Redis, Keycloak –
kommt als Bitnami-Helm-Chart, nicht aus dem OperatorHub. Auf der SNO ist
noch kein Operator installiert, OLM läuft aber bereit
(oc get catalogsource -A zeigt die vier Default-Kataloge). Der erste echte
Kandidat wäre OpenShift GitOps (E3) oder Pipelines
(E2) aus redhat-operators – genau das Beispiel dieser Anleitung.
AllNamespaces auf einem Single-Node nur mit Vorsicht – der Operator-Pod
und alle Operanden teilen sich die begrenzten ~11 GB RAM mit OKD und dem
library-Stack, SingleNamespace wo möglich.
+ Die Kurzfassung
approved:true, kein Überraschungs-Upgrade