Exécution d'un pod Kubernetes à l'aide du client Go
Vous souhaitez exécuter une commande dans un pod à l'aide du client Kubernetes Go, mais votre implémentation actuelle est rencontrer une erreur dans exec.Stream(sopt) sans aucun message d'erreur. Cet article vous guidera tout au long du débogage et fournit un exemple correct pour votre cas d'utilisation.
Débogage du problème
L'erreur actuelle peut survenir en raison de paramètres de configuration incorrects ou ne correspondent pas versions. Vérifiez les éléments suivants :
Implémentation correcte
Voici un exemple corrigé basé sur la fonction ExecCmdExample modifiée :
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 }
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!