Oc Team zur Rettung

Published on August 02, 2018

Oc Team zur Rettung

    Wenn Sie OpenShift-Spezialist sind, wird dieser Beitrag wahrscheinlich nicht viele neue Dinge enthüllen. Aber wenn Sie gerade erst anfangen, es zu meistern, werden Sie viel Zeit und Nerven sparen. Wir haben Jorge Tudela González de Riancho, einen Cloud-Berater im spanischen Büro von Red Hat, gebeten, ein paar Life-Hacs für das Hilfsprogramm oc zu schreiben .



    Dies ist ein cooles Team, es ist gut durchdacht, leistungsstark, flexibel und wie Sie sehen werden, hat es viele versteckte Funktionen, die es wert sind, ausprobiert zu werden.

    1. Das Wichtigste zuerst: Debuggen


    Wenn ich nicht weiß, was gerade passiert, oder eine unverständliche Fehlermeldung erhalte , verwende ich immer das Flag --loglevell , mit dem der Protokolleintrag in stderr aktiviert wird . Abhängig vom Wert dieses Flags können Sie die Curl-Aufrufe der Rest-API, den Inhalt der Antworten der Rest-API 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 loglevel 9 sehr nützlich, wenn Sie ein OCP-Objekt patchen, da Sie den Patch selbst (den Inhalt der API-Anfrage) sehen können.

    Wenn beispielsweise ein Patch das Service-Label in "app: hallo-jorge" ändert, sieht es folgendermaßen aus: Hinweis. In Momenten der Verzweiflung können Sie statt einer Neun ein paar auf einmal fahren. Die Ausgabe des Befehls oc ändert sich nicht, fühlt sich jedoch möglicherweise besser an.

    $ 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
    ...



    $ oc --loglevel 9999 get pod

    2. su -


    Ja, du hast es richtig verstanden. Der Befehl oc kann im Namen eines anderen Benutzers ausgeführt werden oder mithilfe von OCP Identitätswechsel verwenden . Natürlich, wenn Sie die entsprechenden Rechte haben. Und dafür genügt es, nur das Flag --as zu verwenden .

    Beispiel: Identitätswechsel funktioniert nicht nur für Benutzer, sondern auch für Gruppen: Identitätswechsel ist in verschiedenen Fällen hilfreich. Zum Beispiel, wenn geprüft werden muss, ob der Benutzer eine bestimmte Aktion ausführen kann, oder um zu sehen, was der Befehl oc für ihn ausgibt . Ein weiterer Identitätswechsel ist sehr hilfreich, um Rollen und Berechtigungen zu verwechseln.

    # запускаем от имени пользователя jorge
    $ oc --as=jorge get pods



    # запускаем от имени группы developers
    $ oc --as-group=developers get pods



    3. whoami


    Das Team von oc whoami ist allen bekannt. Insbesondere das Flag -t , mit dem das Medientoken für den aktuellen Benutzer / die aktuelle Sitzung abgerufen werden kann. Aber was ist, wenn Sie ein 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 jedoch sofort herausfinden, indem Sie das Token mit dem dritten Argument ohne Flags an den Befehl oc whoami übergeben .

    Siehe:
    # сохраняем токен
    $ token=$(oc whoami -t)

    # получаем имя владельца токена
    $ oc whoami $token
    jorge

    4. oc debuggen


    Wie Sie wissen, kann die Shell direkt im 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.

    Und jetzt schauen Sie sich an, was Sie mit den oc-Debug- Optionen tun können : Sie können den Container als root oder als jeder andere Benutzer starten. Sie können es auf dem ausgewählten Knoten ausführen, oder Sie können einen anderen Befehl darin ausführen, nicht die Shell.

    Sie müssen 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


    In Objekten OpenShift / Kubernetes gibt es manchmal eine Vielzahl von Feldern. Bei der Suche nach Beispielen für Definitionen solcher Objekte muss häufig auf die Dokumentation zum OCP oder auf andere Primärquellen verwiesen werden. Sie können jedoch auch den Befehl oc explain verwenden .

    Dieser Befehl zeigt Dokumentation zu Ressourcen und ihren Feldern an. Dies ist sehr hilfreich, wenn Sie neue OCP-Objekte deklarieren oder wenn Sie keinen Zugriff auf offizielle OCP-Dokumentation haben.

    So erhalten Sie beispielsweise Dokumentation zu Pods und eine Beschreibung der Affinitätsfelder:

    # Pod Hilfe bekommen
    $ oc erkläre Pod
    BESCHREIBUNG:
    Pod ist eine Sammlung von Containern, die auf einem Host ausgeführt werden können. Diese Ressource wird von den Clients erstellt.
    FELDER:
      Metadaten <Objekt>
        Metadaten des Standardobjekts. Weitere Infos:
        http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata
      spec <Object>
        Specification of the desired behavior of the pod. More info:
        http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
      status       <Object>
        Most recently observed status of the pod. This data may not be up to date.
        Populated by the system. Read-only. More info:
        http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
      apiVersion   <string>
        APIVersion defines the versioned schema of this representation of an
        object. Servers should convert recognized schemas to the latest internal
        value, and may reject unrecognized values. More info:
        http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources
      kind <string>
        Kind is a string value representing the REST resource this object
        represents. Servers may infer this from the endpoint the client submits
        requests to. Cannot be updated. In CamelCase. More info:
        http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
    # получаем описание полей affinity
    $ oc explain pod.spec.affinity
    RESOURCE: affinity <Object>
    DESCRIPTION:
        If specified, the pod's scheduling constraints
       Affinity is a group of affinity scheduling rules.
    FIELDS:
      nodeAffinity <Object>
        Describes node affinity scheduling rules for the pod.
      podAffinity <Object>
        Describes pod affinity scheduling rules (e.g. co-locate this pod in the
        same node, zone, etc. as some other pod(s)).
      podAntiAffinity      <Object>
        Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod
        in the same node, zone, etc. as some other pod(s)).
    

    6. Vergiss grep, awk, cut, etc.


    Eine weitere coole Funktion des Befehls oc sind die integrierten Ausgabeformatierungsfunktionen. Jeder kennt die Optionen -o json oder -o yaml , aber das Flag -o enthält viele andere Optionen.

    Die stärkste, vielleicht - eine Go-Vorlage und jsonpath : Angenommen , Sie wollen herausfinden , welcher Dienst zu bestimmten Strecken vorgesehen ist (Route Docker-Registry): Oder zum Beispiel Bereitstellungsstrategie Router dc Router wissen müssen: Wie Sie sehen können, oc - es tolles Team. Es lohnt sich auf jeden Fall, damit zu spielen, da dies eines der coolsten Dinge in OpenShift ist.

    json|yaml|wide|name|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...



    # запросим сервисы, предоставляемые маршрутами, но только для узла с именем 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



    # запросим стратегию развертывания маршрутизатора
    $ oc get dc router -o=go-template='{{ .spec.strategy.type }}'
    Rolling



    Wenn Sie mehr über die interessanten Funktionen von OpenShift erfahren möchten, empfehlen wir Ihnen einen Blick auf unseren Blog Red Hat Developer - hier warten Sie nicht nur auf Artikel unserer Entwickler zu fast jedem Thema, sondern auch auf einen riesigen Katalog kostenloser Literatur . Und Sie können unseren Beitrag darüber, wie Sie Minishift auf Ihrem Laptop bereitstellen und anfangen zu leben, auffrischen .