Kubernetes-Pod-Ausführung mit dem Go-Client
Sie möchten einen Befehl in einem Pod mit dem Kubernetes Go-Client ausführen, aber Ihre aktuelle Implementierung ist dies Es ist ein Fehler in exec.Stream(sopt) ohne Fehlermeldung aufgetreten. Dieser Artikel führt Sie durch das Debuggen und bietet ein korrektes Beispiel für Ihren Anwendungsfall.
Fehlerbehebung
Der aktuelle Fehler kann aufgrund falscher oder nicht übereinstimmender Konfigurationsparameter auftreten Versionen. Überprüfen Sie Folgendes:
Korrekte Implementierung
Hier ist ein korrigiertes Beispiel basierend auf der geänderten ExecCmdExample-Funktion:
package k8s import ( "io" v1 "k8s.io/api/core/v1" "k8s.io/client-go/kubernetes" _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" // Auth plugin specific to GKE "k8s.io/client-go/rest" "k8s.io/client-go/tools/remotecommand" ) // ExecCmdExample executes a command on a specific pod and waits for the command's output. func ExecCmdExample(client kubernetes.Interface, podName string, command string, stdin io.Reader, stdout io.Writer, stderr io.Writer) error { // Use a larger reader buffer size to handle long outputs. buf := make([]byte, 10000) cmd := []string{ "sh", "-c", command, } options := &v1.PodExecOptions{ Command: cmd, Stdin: stdin != nil, Stdout: true, Stderr: true, TTY: false, } req := client.CoreV1().RESTClient().Post(). Resource("pods"). Name(podName). Namespace("default"). SubResource("exec"). VersionedParams( options, 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, }) // Read additional output if necessary. if _, err = exec.Read(buf); err != nil { return err } return nil }
Das obige ist der detaillierte Inhalt vonWie kann ich mit dem Go-Client Befehle in Kubernetes-Pods debuggen und korrekt ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!