使用 Go 客户端执行 Kubernetes Pod
您想要使用 Kubernetes Go 客户端在 pod 内执行命令,但您当前的实现是在 exec.Stream(sopt) 中遇到错误,但没有任何错误消息。本文将指导您完成调试,并为您的用例提供正确的示例。
调试问题
当前错误可能是由于配置参数不正确或不匹配而导致的版本。验证以下内容:
正确实现
这是一个基于修改后的 ExecCmdExample 函数的更正示例:
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 }
以上是如何使用Go客户端在Kubernetes Pod中调试并正确执行命令?的详细内容。更多信息请关注PHP中文网其他相关文章!