17 Einführung in die OpenShift CLI (oc)

Die OpenShift Command Line Interface (CLI) stellt das zentrale Werkzeug für die Verwaltung und Interaktion mit OpenShift-Clustern dar. Das CLI-Tool trägt die Bezeichnung oc und fungiert als primäre Schnittstelle zwischen Administratoren, Entwicklern und der OpenShift-Plattform.

17.1 Konzeptionelle Grundlagen

Die OpenShift CLI basiert auf dem REST-API-Konzept und übersetzt Kommandozeileneingaben in entsprechende HTTP-Anfragen an die OpenShift-API-Server. Dieses Design ermöglicht eine vollständige Verwaltung aller Cluster-Ressourcen über die Kommandozeile, wobei sämtliche Funktionalitäten der Web-Konsole auch über CLI-Befehle zugänglich sind.

Das oc-Tool erweitert die Kubernetes-CLI kubectl um OpenShift-spezifische Funktionalitäten. Dadurch bleiben alle Standard-Kubernetes-Befehle verfügbar, während zusätzliche OpenShift-Konzepte wie Projects, Routes, Build-Konfigurationen und Security Context Constraints über erweiterte Befehle zugänglich werden.

17.1.1 Architektur und Kommunikation

Die CLI kommuniziert über HTTPS mit den API-Servern des OpenShift-Clusters. Authentifizierung erfolgt über OAuth-Token, die nach erfolgreicher Anmeldung lokal gespeichert werden. Die Konfigurationsdaten werden in einer lokalen kubeconfig-Datei gespeichert, die Cluster-Informationen, Benutzerkontext und Authentifizierungsdetails enthält.

17.2 Installation und Setup

Die OpenShift CLI ist für verschiedene Betriebssysteme verfügbar und kann über mehrere Installationsmethoden bezogen werden.

17.2.1 Download-Optionen

Betriebssystem Download-Quelle Installation
Windows mirror.openshift.com Executable herunterladen, PATH hinzufügen
macOS mirror.openshift.com, Homebrew brew install openshift-cli
Linux mirror.openshift.com, Package Manager rpm/deb-Pakete oder Binary
Web Console Cluster-spezifisch Download-Link in Web-Konsole

17.2.2 Linux-Installation

# Binary herunterladen und installieren
wget https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-linux.tar.gz
tar -xzf openshift-client-linux.tar.gz
sudo mv oc /usr/local/bin/
sudo chmod +x /usr/local/bin/oc

# Installation verifizieren
oc version --client

17.2.3 Windows-Installation

# PowerShell: Binary herunterladen
Invoke-WebRequest -Uri "https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/openshift-client-windows.zip" -OutFile "oc.zip"
Expand-Archive -Path "oc.zip" -DestinationPath "C:\OpenShift"

# PATH-Variable erweitern
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\OpenShift", "User")

17.3 Authentifizierung und Cluster-Verbindung

Die erste Interaktion mit einem OpenShift-Cluster erfordert eine Authentifizierung über verschiedene verfügbare Methoden.

17.3.1 Login-Methoden

Token-basierte Authentifizierung (empfohlen):

# Token aus Web-Konsole kopieren
oc login --token=<token> --server=https://api.cluster.example.com:6443

# Login-Status überprüfen
oc whoami
oc whoami --show-server

Username/Password-Authentifizierung:

# Interaktive Anmeldung
oc login https://api.cluster.example.com:6443
# Username: developer
# Password: [eingeben]

# Direkter Login mit Credentials
oc login -u developer -p password https://api.cluster.example.com:6443

Service Account-Token:

# Service Account Token verwenden
oc login --token=$(oc sa get-token myserviceaccount) --server=https://api.cluster.example.com:6443

17.3.2 Konfigurationsverwaltung

Die CLI-Konfiguration wird in ~/.kube/config gespeichert und kann multiple Cluster-Verbindungen verwalten:

# Aktuelle Konfiguration anzeigen
oc config view

# Verfügbare Kontexte auflisten
oc config get-contexts

# Kontext wechseln
oc config use-context cluster1-developer

# Neuen Cluster zur Konfiguration hinzufügen
oc config set-cluster production --server=https://api.prod.example.com:6443
oc config set-context prod-admin --cluster=production --user=admin

17.4 Grundlegende CLI-Operationen

Die OpenShift CLI bietet eine Vielzahl von Befehlen für verschiedene Verwaltungsaufgaben, die in logische Kategorien unterteilt werden können.

17.4.1 Cluster- und Projekt-Management

Befehl Zweck Beispiel
oc projects Verfügbare Projekte anzeigen oc projects
oc project Aktuelles/Wechsel-Projekt oc project my-app
oc new-project Neues Projekt erstellen oc new-project web-app --description="Web Application"
oc delete project Projekt löschen oc delete project old-project
# Projekt-Workflow
oc new-project development --description="Development Environment"
oc project development
oc get all  # Alle Ressourcen im aktuellen Projekt anzeigen

17.4.2 Anwendungs-Deployment

Einfaches Deployment aus Git:

# Neue App aus Git-Repository
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

# App mit spezifischem Builder-Image
oc new-app nodejs~https://github.com/user/node-app.git

Source-to-Image (S2I) Builds:

# S2I-Build starten
oc start-build nodejs-app --from-dir=./src --follow

# Build-Logs verfolgen
oc logs -f bc/nodejs-app

# Build-Status prüfen
oc get builds

17.4.3 Resource-Management

Grundlegende CRUD-Operationen:

# Ressourcen auflisten
oc get pods                    # Alle Pods
oc get pods -o wide           # Erweiterte Informationen
oc get all                    # Alle Ressourcen-Typen

# Detaillierte Ressourcen-Informationen
oc describe pod/nodejs-app-1-xxxxx
oc describe service/nodejs-app

# Ressourcen bearbeiten
oc edit deployment/nodejs-app  # Mit Standard-Editor
oc patch pod nodejs-app-1-xxxxx -p '{"spec":{"containers":[{"name":"nodejs-app","image":"new-image"}]}}'

YAML-basierte Verwaltung:

# Ressourcen als YAML exportieren
oc get deployment/nodejs-app -o yaml > deployment.yaml

# YAML-Datei anwenden
oc apply -f deployment.yaml

# Konfiguration aus mehreren Dateien
oc apply -f ./k8s-manifests/

# Ressourcen löschen
oc delete -f deployment.yaml
oc delete all --selector app=nodejs-app

17.5 Monitoring und Debugging

Die CLI bietet umfangreiche Funktionen für das Monitoring von Anwendungen und Troubleshooting.

17.5.1 Log-Management

# Container-Logs anzeigen
oc logs pod/nodejs-app-1-xxxxx

# Logs mehrerer Container
oc logs deployment/nodejs-app --all-containers=true

# Live-Log-Stream
oc logs -f deployment/nodejs-app

# Logs mit Zeitstempel
oc logs deployment/nodejs-app --timestamps

# Logs der letzten Stunde
oc logs deployment/nodejs-app --since=1h

17.5.2 Pod- und Container-Debugging

Pod-Status und -Events:

# Pod-Details und Events
oc describe pod/nodejs-app-1-xxxxx

# Cluster-Events anzeigen
oc get events --sort-by='.lastTimestamp'

# Node-Informationen
oc get nodes
oc describe node/worker-1

Interactive Debugging:

# Shell in laufendem Container öffnen
oc rsh pod/nodejs-app-1-xxxxx

# Befehl in Container ausführen
oc exec pod/nodejs-app-1-xxxxx -- ls -la /app

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

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

17.5.3 Resource-Monitoring

# Resource-Utilization anzeigen
oc top pods                   # Pod CPU/Memory-Nutzung
oc top nodes                  # Node-Resource-Nutzung

# Resource-Quotas und -Limits
oc describe quota
oc describe limits

# Service-Endpunkte prüfen
oc get endpoints
oc describe service/nodejs-app

17.6 Erweiterte CLI-Features

17.6.1 Template- und Kustomization-Support

# OpenShift-Templates verwenden
oc get templates -n openshift  # Verfügbare Templates
oc new-app --template=mysql-persistent

# Parameter-basierte Template-Nutzung
oc process -f mysql-template.yaml -p MYSQL_USER=admin | oc apply -f -

# Kustomize-Integration
oc apply -k ./overlays/production/

17.6.2 Batch-Operationen und Automation

Ressourcen-Selektion:

# Label-basierte Operationen
oc get pods -l app=nodejs-app
oc delete all -l environment=development

# Feld-basierte Selektion
oc get pods --field-selector=status.phase=Running
oc delete pods --field-selector=status.phase=Failed

CLI-Automatisierung:

# JSON-Output für Scripting
oc get pods -o json | jq '.items[].metadata.name'

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

# Watch-Modus für kontinuierliches Monitoring
oc get pods --watch

17.7 OpenShift-spezifische Befehle

Die CLI umfasst viele OpenShift-spezifische Befehle, die über Standard-Kubernetes-Funktionalitäten hinausgehen.

17.7.1 Build- und Image-Management

Befehl Zweck Beispiel
oc start-build Build-Prozess starten oc start-build myapp --follow
oc cancel-build Build abbrechen oc cancel-build myapp-2
oc import-image Externe Images importieren oc import-image nodejs --from=node:16
oc tag Image-Tags verwalten oc tag myapp:latest myapp:v1.0

17.7.2 Route- und Service-Management

# Route für Service erstellen
oc expose service/nodejs-app --name=web-route

# Route mit Custom-Hostname
oc expose service/nodejs-app --hostname=app.example.com

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

# Route-Status prüfen
oc get routes
oc describe route/web-route

17.7.3 Security und RBAC

# Service Accounts verwalten
oc create serviceaccount myapp-sa
oc get serviceaccounts

# Berechtigungen zuweisen
oc adm policy add-role-to-user edit developer
oc adm policy add-scc-to-user anyuid -z myapp-sa

# Security Context Constraints prüfen
oc get scc
oc describe scc/restricted

17.8 Produktivitäts-Features

17.8.1 Auto-Completion und Aliase

# Bash-Completion aktivieren
echo 'source <(oc completion bash)' >> ~/.bashrc

# Zsh-Completion
echo 'source <(oc completion zsh)' >> ~/.zshrc

# Nützliche Aliase
alias k=oc
alias kgp='oc get pods'
alias kgs='oc get services'
alias kd='oc describe'

17.8.2 Plugin-Erweiterungen

# kubectl-Plugins funktionieren auch mit oc
oc krew install tree        # Pod-Hierarchie visualisieren
oc tree deployment/myapp

# Custom Scripts als Plugins
# Erstelle ausführbare Datei: oc-myplugin
# In PATH verfügbar machen: oc myplugin

17.9 Best Practices und Troubleshooting

17.9.1 Häufige CLI-Patterns

Effizientes Resource-Management:

# Bulk-Operationen mit Labels
oc label pods -l app=myapp version=v2.0
oc delete pods -l version=v1.0

# Conditional Operations
oc get pods -o json | jq -r '.items[] | select(.status.phase=="Failed") | .metadata.name' | xargs oc delete pod

# Rolling Deployment überwachen
oc rollout status deployment/myapp
oc rollout history deployment/myapp
oc rollout undo deployment/myapp --to-revision=2

17.9.2 Troubleshooting-Workflows

Systematische Problem-Analyse:

# 1. Cluster-Status prüfen
oc get nodes
oc get pods --all-namespaces | grep -v Running

# 2. Application-Health überprüfen
oc get all -l app=myapp
oc describe deployment/myapp

# 3. Events und Logs analysieren
oc get events --sort-by='.lastTimestamp' | tail -20
oc logs deployment/myapp --previous  # Logs von vorherigem Container

# 4. Resource-Constraints prüfen
oc describe node/worker-1 | grep -A 10 "Allocated resources"
oc top pods --sort-by=memory

Performance-Debugging:

# Network-Connectivity testen
oc run debug --image=registry.redhat.io/ubi8/ubi -- sleep 3600
oc exec -it debug -- curl -I http://myapp:8080

# DNS-Resolution prüfen
oc exec -it debug -- nslookup myapp.myproject.svc.cluster.local

Die OpenShift CLI ist ein mächtiges Werkzeug, das sowohl für tägliche Verwaltungsaufgaben als auch für komplexe Automatisierungsszenarien geeignet ist. Die Kombination aus Kubernetes-Kompatibilität und OpenShift-spezifischen Erweiterungen macht sie zu einem unverzichtbaren Tool für jeden OpenShift-Administrator und -Entwickler.