Wenn Sie etwas Besonderes in OpenShift sind, wird Ihnen dieser Beitrag wahrscheinlich nicht viel verraten. Aber wenn Sie gerade erst anfangen, es zu meistern, sparen Sie viel Zeit und Nerven. Wir haben Jorge Tudela González de Riancho, eine Cloud-Beraterin im spanischen Red Hat-Büro, gebeten, einige Life-Hacks für das Dienstprogramm
oc zu schreiben.

Dies ist ein cooles Team, es ist gut durchdacht, es ist leistungsstark, es ist flexibel und es hat, wie Sie sehen werden, viele versteckte Funktionen, die es wert sind, ausprobiert zu werden.
1. Das Wichtigste zuerst: Debuggen
Wenn ich nicht weiß, was passiert, oder eine unverständliche Fehlermeldung
erhalte , verwende ich immer das Flag
--loglevell , mit dem die
Protokollierung bei stderr ermöglicht wird. Abhängig vom Wert dieses Flags können Sie Curl-API-Rest-Aufrufe, den Inhalt von API-Rest-Antworten oder noch detailliertere Informationen anzeigen.

$ oc --loglevel 7 get pod
...
I0216 21:24:12.027793 973 cached_discovery.go:72] returning cached discovery info from /home/jtudelag/.kube/192.168.42.77_8443/v1/serverresources.json
I0216 21:24:12.028046 973 round_trippers.go:383] GET https://192.168.42.77:8443/api/v1/namespaces/myproject/pods
I0216 21:24:12.028052 973 round_trippers.go:390] Request Headers:
I0216 21:24:12.028057 973 round_trippers.go:393] Accept: application/json
I0216 21:24:12.028061 973 round_trippers.go:393] User-Agent: oc/v1.7.6+a08f5eeb62 (linux/amd64) kubernetes/c84beff
I0216 21:24:12.053230 973 round_trippers.go:408] Response Status: 200 OK in 25 milliseconds
I0216 21:24:12.055143 973 cached_discovery.go:119] returning cached discovery info from /home/jtudelag/.kube/192.168.42.77_8443/servergroups.json
I0216 21:24:12.055228 973 cached_discovery.go:72] returning cached discovery info from /home/jtudelag/.kube/192.168.42.77_8443/authentication.k8s.io/v1/serverresources.json
I0216 21:24:12.055288 973 cached_discovery.go:72]
...
Zum Beispiel ist Googlevel 9 sehr praktisch, wenn Sie ein OCP-Objekt patchen, da Sie damit den Patch selbst (den Inhalt der API-Anforderung) anzeigen können.
Wenn beispielsweise ein Patch das Service-Label in "app: hello-jorge" ändert, sieht es folgendermaßen aus:
$ oc --loglevel 9 edit svc hello-openshift
...
I0216 21:33:15.786463 1389 request.go:994] Request Body: {"metadata":{"labels":{"app":"hello-jorge"}}}
I0216 21:33:15.786590 1389 round_trippers.go:386] curl -k -v -XPATCH -H "Accept: application/json" -H "Content-Type: application/strategic-merge-patch+json" -H "User-Agent: oc/v1.7.6+a08f5eeb62 (linux/amd64) kubernetes/c84beff" https://192.168.42.77:8443/api/v1/namespaces/myproject/services/hello-openshift
I0216 21:33:15.797185 1389 round_trippers.go:405] PATCH https://192.168.42.77:8443/api/v1/namespaces/myproject/services/hello-openshift 200 OK in 10 milliseconds
...
Hinweis In Zeiten der Verzweiflung können Sie statt einer Neun mehrere gleichzeitig fahren. Die Ausgabe des Befehls
oc ändert sich dadurch nicht, aber es könnte sich für Sie besser anfühlen.
$ oc --loglevel 9999 get pod
2. su -
Ja, du hast richtig verstanden. Der Befehl
oc kann im Auftrag eines anderen Benutzers ausgeführt werden oder mithilfe der OCP-Sprache den
Identitätswechsel verwenden . Natürlich mit den entsprechenden Rechten. Und dafür reicht es, nur das Flag
--as zu verwenden.
Zum Beispiel:
# jorge
$ oc --as=jorge get pods
Der Identitätswechsel funktioniert nicht nur für Benutzer, sondern auch für Gruppen:
# developers
$ oc --as-group=developers get pods
Identitätswechsel ist in einer Vielzahl von Fällen nützlich. Zum Beispiel, wenn Sie überprüfen müssen, ob der Benutzer die eine oder andere Aktion ausführen kann, oder sehen müssen, was der Befehl
oc für ihn ausgibt. Der Identitätswechsel hilft auch sehr bei der Verwechslung von Rollen und Berechtigungen.
3. Whoami
Das
oc whoami Team ist wahrscheinlich jedem bekannt. Insbesondere das Flag
-t , mit dem Sie das Medientoken für den aktuellen Benutzer / die aktuelle Sitzung abrufen können. Aber was ist, wenn Sie einen Token haben, aber nicht dessen Besitzer sind?
In diesem Fall können Sie sich mit diesem Token bei OpenShift anmelden und dann den
Befehl oc whoami ausführen. Warten Sie, Sie können den Namen des Besitzers sofort herausfinden, indem Sie das Token einfach
als drittes Argument ohne Flags an den
Befehl oc whoami übergeben .
Siehe:
#
$ token=$(oc whoami -t)
#
$ oc whoami $token
jorge
4. oc debug
Wie Sie wissen, kann eine Shell direkt in einem laufenden Pod ausgeführt werden. Manchmal ist es hilfreich, eine vollständige Kopie der Konfiguration des laufenden Pods zu erstellen und Fehler in der Shell zu beheben. Dies ist die sogenannte Standardmethode.
Schauen Sie sich nun an, was Sie mit den
oc-Debug- Optionen tun können: Sie können den Container als root oder als einen anderen Benutzer ausführen. Sie können es auf dem ausgewählten Knoten ausführen oder darin keine Shell, sondern einen anderen Befehl ausführen.
In diesem Fall müssen Sie den richtigen Gleichstrom angeben, zum Beispiel:
# shell pod' dc/jorge
$ oc debug dc/jorge
# , root
$ oc debug --as-root=true dc/jorge
5. oc erklären
OpenShift / Kubernetes-Objekte haben manchmal eine große Anzahl von Feldern. Wenn Sie nach Beispielen für Definitionen für solche Objekte suchen, müssen Sie sich häufig an die Dokumentation für OCP oder andere Primärquellen wenden. Sie können jedoch auch den Befehl
oc EXPLAIN verwenden .
Dieser Befehl zeigt die Dokumentation zu Ressourcen und ihren Feldern an. Dies ist sehr nützlich, wenn Sie neue OCP-Objekte deklarieren oder wenn Sie keinen Zugriff auf die offizielle OCP-Dokumentation haben.
So erhalten Sie beispielsweise eine Pod-Dokumentation und eine Beschreibung der Affinitätsfelder:
# Hilfe auf Pod bekommen
$ oc Pod erklären
BESCHREIBUNG:
Pod ist eine Sammlung von Containern, die auf einem Host ausgeführt werden können. Diese Ressource wird von Clients erstellt und auf Hosts geplant.
FELDER:
Metadaten <Objekt>
Metadaten des Standardobjekts. Weitere Infos:
http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
spec <Objekt>
Angabe des gewünschten Verhaltens des Pods. Weitere Infos:
http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
Status <Objekt>
Zuletzt beobachteter Status der Kapsel. Diese Daten sind möglicherweise nicht aktuell.
Vom System bevölkert. Schreibgeschützt. Weitere Infos:
http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
apiVersion <string>
APIVersion definiert das versionierte Schema dieser Darstellung eines
Objekt. Server sollten erkannte Schemas in die neuesten internen konvertieren
Wert und kann nicht erkannte Werte ablehnen. Weitere Infos:
http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources
Art <string>
Art ist ein Zeichenfolgenwert, der die REST-Ressource dieses Objekts darstellt
repräsentiert. Server können dies aus dem vom Client übermittelten Endpunkt ableiten
Anfragen an. Kann nicht aktualisiert werden. In CamelCase. Weitere Infos:
http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
# Beschreibung des Affinitätsfelds abrufen
$ oc erklären pod.spec.affinity
RESSOURCE: Affinität <Objekt>
BESCHREIBUNG:
Wenn angegeben, gelten die Planungsbeschränkungen des Pods
Affinität ist eine Gruppe von Affinitätsplanungsregeln.
FELDER:
nodeAffinity <Objekt>
Beschreibt die Planungsregeln für die Knotenaffinität für den Pod.
podAffinity <Objekt>
Beschreibt Planungsregeln für die Pod-Affinität (z. B. Suchen Sie diesen Pod in der
gleicher Knoten, gleiche Zone usw. wie einige andere Pods.
podAntiAffinity <Objekt>
Beschreibt Planungsregeln für die Anti-Affinität von Pods (z. B. Vermeiden Sie das Platzieren dieses Pods
im selben Knoten, in derselben Zone usw. wie einige andere Pods.
6. Vergessen Sie grep, awk, cut usw.
Eine weitere coole Funktion des Befehls
oc sind die integrierten Formatierungsfunktionen für die Ausgabe.
Jeder kennt die
Optionen -o json oder
-o yaml , aber das Flag
-o bietet viele andere Optionen.
Die mächtigsten sind wahrscheinlich
go-template und
jsonpath :
json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...
Angenommen, Sie möchten wissen, welcher Dienst von einer bestimmten Route (der Docker-Registrierungsroute) bereitgestellt wird:
# , , my-docker-registry.example.com
$ oc get routes -o=go-template='{{range .items}}{{if eq .spec.host "my-docker-registry.example.com"}}{{.metadata.name}}{{end}}{{end}}'
docker-registry
Angenommen, Sie müssen die Bereitstellungsstrategie für den Router-DC-Router kennen:
#
$ oc get dc router -o=go-template='{{ .spec.strategy.type }}'
Rolling
Wie Sie sehen können, ist
oc ein großartiges Team. Es lohnt sich auf jeden Fall, damit zu spielen, da es eines der coolsten Dinge an OpenShift ist.
Wenn Sie mehr über die interessanten Funktionen von OpenShift erfahren möchten, empfehlen wir Ihnen, unseren
Red Hat Developer- Blog zu lesen. Hier finden Sie nicht nur Artikel unserer Entwickler zu fast jedem Thema, sondern auch einen riesigen Katalog mit
kostenloser Literatur . Und Sie können unseren Beitrag
darüber aktualisieren, wie Sie Minishift auf Ihrem Laptop bereitstellen und anfangen zu leben .