Dans Kubernetes, la commande exec vous permet d'exécuter à distance des commandes sur un pod. Le client Go fournit une interface pratique pour effectuer cette opération.
Considérez le scénario suivant : vous devez exécuter la commande ls sur un pod nommé wordpress-mysql-213049546-29s7d.
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()) }
Vous rencontrez une erreur sans aucun message lorsque vous tentez d'exécuter ce code. Voici comment aborder le problème :
Vous pouvez également vous référer à l'extrait de code suivant pour un fonctionnement exemple :
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 }
Cet exemple de code devrait vous aider à exécuter avec succès des commandes sur des pods à l'aide du client Kubernetes Go.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!