Heim >Backend-Entwicklung >Golang >Wie behebe ich Fehler beim Ausführen von Befehlen in Kubernetes-Pods mithilfe des Go-Clients?
In Kubernetes können Sie mit dem Befehl exec Befehle remote auf einem Pod ausführen. Der Go-Client bietet eine praktische Schnittstelle zum Ausführen dieses Vorgangs.
Stellen Sie sich das folgende Szenario vor: Sie müssen den ls-Befehl auf einem Pod namens wordpress-mysql-213049546-29s7d ausführen.
config := &restclient.Config{ Host: "http://192.168.8.175:8080", Insecure: true, } config.ContentConfig.GroupVersion = &api.Unversioned config.ContentConfig.NegotiatedSerializer = api.Codecs restClient, err := restclient.RESTClientFor(config) if err != nil { panic(err.Error()) } req := restClient.Post().Resource("pods").Name("wordpress-mysql-213049546-29s7d").Namespace("default").SubResource("exec").Param("container", "mysql") req.VersionedParams(&api.PodExecOptions{ Container: "mysql", Command: []string{"ls"}, Stdin: true, Stdout: true, }, api.ParameterCodec) exec, err := remotecommand.NewExecutor(config, "POST", req.URL()) if err != nil { panic(err.Error()) } sopt := remotecommand.StreamOptions{ SupportedProtocols: remotecommandserver.SupportedStreamingProtocols, Stdin: os.Stdin, Stdout: os.Stdout, Stderr: os.Stderr, Tty: false, } err = exec.Stream(sopt) if err != nil { panic(err.Error()) }
Beim Versuch, diesen Code auszuführen, tritt ein Fehler ohne Meldung auf. So gehen Sie das Problem an:
Alternativ können Sie sich für eine funktionierende Funktion auch auf das folgende Code-Snippet beziehen Beispiel:
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 }
Dieses Codebeispiel soll Ihnen helfen, Befehle erfolgreich auf Pods mit dem Kubernetes Go-Client auszuführen.
Das obige ist der detaillierte Inhalt vonWie behebe ich Fehler beim Ausführen von Befehlen in Kubernetes-Pods mithilfe des Go-Clients?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!