Heim > Backend-Entwicklung > Golang > Wie führe ich Kubernetes Exec-Befehle mit dem Go-Client aus?

Wie führe ich Kubernetes Exec-Befehle mit dem Go-Client aus?

Patricia Arquette
Freigeben: 2024-12-06 05:39:14
Original
1003 Leute haben es durchsucht

How to Execute Kubernetes Exec Commands Using the Go Client?

Kubernetes Exec-Befehlsbeispiel mit Go-Client

Problem:

Befehle in einem Pod ausführen Die Verwendung des Kubernetes Go-Clients kann eine Herausforderung sein. Beim Versuch, die Ausführungsausgabe zu streamen, können Benutzer auf Fehler ohne eindeutige Meldungen stoßen.

Lösung:

Um Befehle in einem Pod mit dem Kubernetes Go-Client korrekt auszuführen, befolgen Sie diese Schritte:

  1. Erstellen Sie eine Kubernetes-Clientkonfiguration mithilfe der Struktur restclient.Config und geben Sie dabei den Serverhost und die Einstellung an Zu Testzwecken unsicher bis „true“.
  2. Initialisieren Sie den Client mit der RESTClientFor-Funktion und geben Sie die API-Gruppenversion und den ausgehandelten Serialisierer an.
  3. Konstruieren Sie die Anfrage, indem Sie einen Post()-Anfrage-Builder für die Pods erstellen Ressource. Legen Sie den Pod-Namen, den Namensraum und die Unterressource (exec) im Anforderungs-Builder fest.
  4. Geben Sie die PodExecOptions an und verwenden Sie den ParameterCodec, um die Parameter zu kodieren.
  5. Verwenden Sie die NewExecutor-Funktion, um einen Executor für zu erstellen die angegebene Konfiguration, HTTP-Methode und URL.
  6. Initialisieren Sie die Stream-Ausführungsoptionen und geben Sie die an stdin-, stdout- und stderr-Streams sowie die TTY-Einstellung.
  7. Rufen Sie die Stream-Funktion auf, um den Befehl auszuführen.

Hinweis:

Das in der Frage bereitgestellte Codebeispiel verwendet eine falsche Version der PodExecOptions-Struktur. Die richtige Version stammt aus dem v1-Paket (nicht aus dem unversionierten Paket).

Arbeitsbeispiel:

Der folgende Code zeigt ein funktionierendes Beispiel für die Ausführung von Befehlen in einem Pod mit der Kubernetes Go-Client:

package k8s

import (
    "io"

    v1 "k8s.io/api/core/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/kubernetes/scheme"
    restclient "k8s.io/client-go/rest"
    "k8s.io/client-go/tools/remotecommand"
)

// ExecCmd exec command on specific pod and wait the command's output.
func ExecCmdExample(client kubernetes.Interface, config *restclient.Config, podName string,
    command string, stdin io.Reader, stdout io.Writer, stderr io.Writer) error {
    cmd := []string{
        "sh",
        "-c",
        command,
    }
    req := client.CoreV1().RESTClient().Post().Resource("pods").Name(podName).
        Namespace("default").SubResource("exec")
    option := &v1.PodExecOptions{
        Command: cmd,
        Stdin:   true,
        Stdout:  true,
        Stderr:  true,
        TTY:     true,
    }
    if stdin == nil {
        option.Stdin = false
    }
    req.VersionedParams(
        option,
        scheme.ParameterCodec,
    )
    exec, err := remotecommand.NewSPDYExecutor(config, "POST", req.URL())
    if err != nil {
        return err
    }
    err = exec.Stream(remotecommand.StreamOptions{
        Stdin:  stdin,
        Stdout: stdout,
        Stderr: stderr,
    })
    if err != nil {
        return err
    }

    return nil
}
Nach dem Login kopieren

Dieser Code verwendet korrekt die v1-Version von PodExecOptions und setzt den TTY-Parameter auf wahr, aktiviert bei Bedarf die interaktive Befehlsausführung.

Das obige ist der detaillierte Inhalt vonWie führe ich Kubernetes Exec-Befehle mit dem Go-Client aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage