18 Grundlegende CLI-Befehle

Die OpenShift CLI verfügt über ein umfangreiches Befehlsspektrum, das sich in verschiedene Kategorien gliedert. Die Befehlsstruktur folgt einem konsistenten Schema aus Verb, Ressourcentyp und optionalen Parametern, wodurch eine intuitive Bedienung gewährleistet wird.

18.1 Befehlsstruktur und Syntax

OpenShift CLI-Befehle folgen der grundlegenden Syntax oc [command] [TYPE] [NAME] [flags]. Die Befehle lassen sich in mehrere Hauptkategorien unterteilen: Cluster-Management, Ressourcenverwaltung, Anwendungsdeployment, Debugging und administrative Funktionen.

CLI_Befehlsstruktur.svg

18.1.1 Grundlegende Syntax-Beispiele

# Grundstruktur: oc [verb] [resource] [name] [flags]
oc get pods                           # Verb: get, Resource: pods
oc describe pod my-app-1-xxxxx       # Verb: describe, Resource: pod, Name: my-app-1-xxxxx  
oc delete service my-service --force  # Verb: delete, Resource: service, Flag: --force

# Mehrere Ressourcen gleichzeitig
oc get pods,services,routes          # Komma-getrennte Ressourcentypen
oc get all                           # Alle Standard-Ressourcen

18.2 Authentifizierung und Cluster-Verbindung

Die Grundlage aller CLI-Operationen bildet die Authentifizierung gegenüber dem OpenShift-Cluster. Diese Befehle etablieren sichere Verbindungen und verwalten Cluster-Kontext.

18.2.1 Login und Logout

Befehl Zweck Beispiel
oc login Cluster-Anmeldung oc login https://api.cluster.com:6443
oc logout Abmeldung vom Cluster oc logout
oc whoami Aktueller Benutzer oc whoami --show-server
# Interactive Login
oc login https://api.sandbox-m2.ll9k.p1.openshiftapps.com:6443
# Username: developer
# Password: [password]

# Token-basierte Anmeldung
oc login --token=sha256~xxxxx --server=https://api.cluster.com:6443

# Status der Authentifizierung prüfen
oc whoami                    # Zeigt aktuellen Benutzer
oc whoami --show-server     # Zeigt Cluster-Server  
oc whoami --show-token      # Zeigt aktuelles Token
oc whoami --show-context    # Zeigt aktuellen Kontext

18.2.2 Cluster-Informationen

# Cluster-Version und -Status
oc version                   # Client- und Server-Version
oc cluster-info             # Cluster-Endpoints und Services
oc api-versions             # Verfügbare API-Versionen
oc api-resources            # Alle verfügbaren Ressourcentypen

# Node-Informationen
oc get nodes                # Alle Cluster-Nodes
oc get nodes -o wide        # Erweiterte Node-Informationen

18.3 Projekt- und Namespace-Management

OpenShift-Projekte bilden logische Isolationseinheiten und entsprechen Kubernetes-Namespaces mit zusätzlichen Sicherheits- und Verwaltungsfunktionen.

18.3.1 Projekt-Befehle

Befehl Zweck Beispiel
oc projects Alle verfügbaren Projekte oc projects
oc project Aktuelles Projekt anzeigen/wechseln oc project my-app
oc new-project Neues Projekt erstellen oc new-project web-app
# Projekt-Workflow
oc projects                              # Alle verfügbaren Projekte auflisten
oc project                              # Aktuelles Projekt anzeigen
oc project my-development               # Zu anderem Projekt wechseln

# Neues Projekt erstellen
oc new-project web-application \
  --description="Web Application Development" \
  --display-name="Web App Dev"

# Projekt-Details anzeigen
oc describe project web-application
oc get project web-application -o yaml

18.3.2 Kontext-Management

# Kubeconfig-Kontexte verwalten
oc config get-contexts                  # Alle verfügbaren Kontexte
oc config current-context              # Aktueller Kontext
oc config use-context cluster1-admin   # Kontext wechseln

# Cluster- und User-Konfiguration
oc config view                          # Komplette Konfiguration anzeigen
oc config set-context --current --namespace=my-project  # Namespace im Kontext setzen

18.4 Ressourcenabfrage und -inspektion

Informationsbefehle bilden das Fundament für Monitoring und Troubleshooting. Diese Befehle liefern strukturierte Ausgaben über Cluster-Ressourcen in verschiedenen Formaten.

18.4.1 Grundlegende Get-Befehle

# Standard-Ressourcen abfragen
oc get pods                    # Alle Pods im aktuellen Projekt
oc get services               # Alle Services
oc get routes                 # OpenShift-spezifische Routes
oc get deployments           # Deployment-Controller
oc get all                    # Alle Standard-Ressourcen

# Erweiterte Informationen
oc get pods -o wide           # Zusätzliche Spalten (Node, IP, etc.)
oc get pods --show-labels     # Mit Labels anzeigen
oc get pods --watch           # Kontinuierliche Updates (Watch-Modus)

18.4.2 Output-Formate

Format Flag Anwendungsbereich
Table (Standard) Menschenlesbare Übersicht
Wide -o wide Erweiterte Spalten
YAML -o yaml Vollständige Resource-Definition
JSON -o json Maschinenlesbare Ausgabe
Custom -o custom-columns Benutzerdefinierte Spalten
# Verschiedene Output-Formate
oc get pods -o yaml                    # YAML-Format für Konfiguration
oc get pods -o json                    # JSON für Scripting
oc get pods -o jsonpath='{.items[*].metadata.name}'  # Nur Pod-Namen extrahieren

# Custom Columns
oc get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName

# Template-Output
oc get pods -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'

18.4.3 Filtering und Selektion

# Label-basierte Selektion
oc get pods -l app=my-app             # Pods mit Label app=my-app
oc get pods -l 'environment in (dev,test)'  # Pods mit environment=dev oder test
oc get pods -l app=my-app,version!=v1.0     # Mehrere Label-Bedingungen

# Field-Selektion
oc get pods --field-selector=status.phase=Running     # Nur laufende Pods
oc get pods --field-selector=spec.nodeName=worker-1   # Pods auf spezifischem Node

# Name-basierte Selektion
oc get pods my-app-*                  # Wildcards verwenden
oc get pods --selector="app=my-app"   # Alternative Label-Syntax

18.4.4 Detaillierte Ressourcen-Informationen

# Describe für detaillierte Informationen
oc describe pod my-app-1-xxxxx        # Vollständige Pod-Details inklusive Events
oc describe service my-app            # Service-Konfiguration und Endpoints
oc describe node worker-1             # Node-Status und -Kapazität

# Events system-weit
oc get events                         # Alle Events im Projekt
oc get events --sort-by='.lastTimestamp'  # Sortiert nach Zeit
oc get events --field-selector involvedObject.name=my-pod  # Pod-spezifische Events

18.5 Anwendungslebenszyklus-Management

Deployment-Befehle decken den gesamten Anwendungslebenszyklus ab, von der initialen Bereitstellung bis zu Updates und Rollbacks.

18.5.1 Anwendung Deployment

# Einfache App-Erstellung aus Git
oc new-app https://github.com/openshift/nodejs-ex.git --name=nodejs-app

# App aus Docker-Image
oc new-app --docker-image=nginx:latest --name=web-server

# Source-to-Image mit spezifischem Builder
oc new-app nodejs~https://github.com/user/my-node-app.git --name=custom-app

# Mit Umgebungsvariablen
oc new-app nodejs~https://github.com/user/app.git \
  --env=NODE_ENV=production \
  --env=DATABASE_URL=mongodb://mongo:27017/app

18.5.2 Service-Exposition

# Service für Pod-Zugriff erstellen
oc expose deployment nodejs-app --port=8080 --target-port=8080

# Route für externen Zugriff
oc expose service nodejs-app                    # Standard-Route
oc expose service nodejs-app --hostname=myapp.example.com  # Custom Hostname

# Secure Route mit TLS
oc create route edge --service=nodejs-app --hostname=secure.example.com

18.5.3 Skalierung

# Horizontale Skalierung
oc scale deployment nodejs-app --replicas=3     # Auf 3 Replikas skalieren
oc scale --replicas=5 deployment/nodejs-app     # Alternative Syntax

# Autoscaling konfigurieren
oc autoscale deployment nodejs-app --min=2 --max=10 --cpu-percent=80

# Skalierungsstatus prüfen
oc get hpa                                       # Horizontal Pod Autoscaler Status

18.6 Konfiguration und Secrets-Management

Konfigurationsbefehle ermöglichen die Verwaltung von Umgebungsvariablen, Secrets und ConfigMaps.

18.6.1 ConfigMaps

# ConfigMap erstellen
oc create configmap app-config \
  --from-literal=database.host=postgres.example.com \
  --from-literal=database.port=5432

# ConfigMap aus Datei
oc create configmap app-config --from-file=config.properties

# ConfigMap in Deployment verwenden
oc set env deployment/nodejs-app --from=configmap/app-config

18.6.2 Secrets-Management

# Secret erstellen
oc create secret generic db-credentials \
  --from-literal=username=admin \
  --from-literal=password=secretpassword

# Secret aus Datei
oc create secret generic tls-certs --from-file=tls.crt --from-file=tls.key

# Docker Registry Secret
oc create secret docker-registry regcred \
  --docker-server=registry.example.com \
  --docker-username=user \
  --docker-password=password

# Secret in Deployment mounten
oc set volume deployment/nodejs-app --add \
  --type=secret \
  --secret-name=db-credentials \
  --mount-path=/etc/secrets

18.6.3 Umgebungsvariablen

# Umgebungsvariablen setzen
oc set env deployment/nodejs-app NODE_ENV=production
oc set env deployment/nodejs-app DATABASE_URL=postgres://db:5432/app

# Variablen aus ConfigMap/Secret
oc set env deployment/nodejs-app --from=configmap/app-config
oc set env deployment/nodejs-app --from=secret/db-credentials

# Umgebungsvariablen anzeigen
oc set env deployment/nodejs-app --list

18.7 Debugging und Logs

Diagnose-Befehle ermöglichen tiefgehende Einblicke in Anwendungs- und Cluster-Status.

18.7.1 Log-Management

# Basic Logs
oc logs pod/nodejs-app-1-xxxxx        # Logs eines spezifischen Pods
oc logs deployment/nodejs-app         # Logs aller Pods eines Deployments

# Live Logs (Follow)
oc logs -f deployment/nodejs-app      # Live-Stream der Logs
oc logs -f deployment/nodejs-app --all-containers=true  # Alle Container

# Historische Logs
oc logs deployment/nodejs-app --previous      # Logs des vorherigen Containers
oc logs deployment/nodejs-app --since=1h     # Logs der letzten Stunde
oc logs deployment/nodejs-app --tail=100     # Nur letzte 100 Zeilen

18.7.2 Interactive Debugging

# Shell in laufendem Container
oc rsh deployment/nodejs-app          # Remote Shell
oc rsh pod/nodejs-app-1-xxxxx        # Spezifischer Pod

# Befehle in Container ausführen
oc exec deployment/nodejs-app -- ls -la /app
oc exec -it pod/nodejs-app-1-xxxxx -- /bin/bash

# Debug-Container starten
oc debug pod/nodejs-app-1-xxxxx      # Debug-Container mit gleichem Image
oc debug pod/nodejs-app-1-xxxxx --image=registry.redhat.io/ubi8/ubi  # Custom Debug-Image

18.7.3 Port-Forwarding

# Port-Forwarding für lokalen Zugriff
oc port-forward pod/nodejs-app-1-xxxxx 8080:8080    # Pod-Port-Forward
oc port-forward service/nodejs-app 8080:8080        # Service-Port-Forward

# Background Port-Forward
oc port-forward service/nodejs-app 8080:8080 &

# Mehrere Ports
oc port-forward pod/nodejs-app-1-xxxxx 8080:8080 9090:9090

18.8 Labels und Annotations

Label- und Annotationsverwaltung für Metadaten-Management und Ressourcenorganisation.

18.8.1 Label-Management

# Labels hinzufügen/ändern
oc label pod nodejs-app-1-xxxxx environment=production
oc label deployment nodejs-app version=v2.0
oc label nodes worker-1 disktype=ssd

# Labels entfernen
oc label pod nodejs-app-1-xxxxx environment-     # Trailing dash entfernt Label

# Labels anzeigen
oc get pods --show-labels
oc describe pod nodejs-app-1-xxxxx | grep Labels

18.8.2 Annotations

# Annotations hinzufügen
oc annotate pod nodejs-app-1-xxxxx description="Production web server"
oc annotate service nodejs-app prometheus.io/scrape=true

# Annotations anzeigen
oc describe pod nodejs-app-1-xxxxx | grep Annotations

18.9 Batch-Operationen und erweiterte Befehle

Batch-Befehle ermöglichen die gleichzeitige Bearbeitung mehrerer Ressourcen über Selektoren.

18.9.1 Bulk-Operationen

# Mehrere Ressourcen basierend auf Labels
oc delete all -l app=my-old-app                    # Alle Ressourcen mit Label löschen
oc label pods -l environment=dev version=v2.0      # Labels für mehrere Pods setzen

# Patch-Operationen
oc patch deployment nodejs-app -p '{"spec":{"replicas":5}}'           # JSON-Patch
oc patch service nodejs-app -p '{"spec":{"ports":[{"port":80}]}}'     # Service-Port ändern

# Strategic Merge Patch
oc patch deployment nodejs-app --type='strategic' -p='
spec:
  template:
    spec:
      containers:
      - name: nodejs-app
        image: nodejs:16
'

18.9.2 YAML-basierte Operationen

# Ressourcen aus YAML-Dateien
oc apply -f deployment.yaml           # YAML-Datei anwenden
oc apply -f ./k8s-configs/            # Alle YAML-Dateien im Verzeichnis
oc apply -f https://raw.githubusercontent.com/user/repo/main/deploy.yaml

# Ressourcen exportieren
oc get deployment nodejs-app -o yaml > nodejs-deployment.yaml
oc get all -o yaml > complete-backup.yaml

# Dry-run für Validierung
oc apply -f deployment.yaml --dry-run=client       # Client-side Validierung
oc apply -f deployment.yaml --dry-run=server       # Server-side Validierung

18.9.3 Advanced Querying

# JSONPath-Queries
oc get pods -o jsonpath='{.items[*].metadata.name}'                    # Alle Pod-Namen
oc get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'  # Node IPs

# JQ für komplexe JSON-Processing
oc get pods -o json | jq '.items[] | select(.status.phase=="Running") | .metadata.name'

# Resource-Monitoring
oc top pods                           # CPU/Memory-Nutzung aller Pods
oc top pods --sort-by=memory         # Sortiert nach Memory-Verbrauch
oc top nodes                         # Node-Ressourcen-Nutzung

18.10 Pipeline-Integration und Automation

Die CLI unterstützt Pipeline-Integration durch standardisierte Exit-Codes und maschinenlesbare Ausgabeformate.

18.10.1 Scripting-freundliche Befehle

# Exit-Codes für Conditional Logic
oc get pod my-app-1-xxxxx &>/dev/null && echo "Pod exists" || echo "Pod not found"

# Warteschleifen
oc wait --for=condition=ready pod -l app=my-app --timeout=300s         # Warten auf Ready
oc wait --for=condition=available deployment/nodejs-app --timeout=600s # Warten auf Deployment

# Rollout-Management
oc rollout status deployment/nodejs-app                 # Rollout-Status prüfen
oc rollout pause deployment/nodejs-app                  # Rollout pausieren
oc rollout resume deployment/nodejs-app                 # Rollout fortsetzen
oc rollout undo deployment/nodejs-app --to-revision=2   # Rollback zu Revision

Diese grundlegenden CLI-Befehle bilden das Fundament für die tägliche Arbeit mit OpenShift. Die Kombination aus imperativen Befehlen für schnelle Aktionen und deklarativen YAML-basierten Operationen für reproduzierbare Konfigurationen macht die CLI zu einem vielseitigen und mächtigen Werkzeug.