Oc Team zur Rettung

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 .

Source: https://habr.com/ru/post/de418437/


All Articles