使用 Go 客户端的 Kubernetes Exec 命令示例
问题:
在 pod 中执行命令使用 Kubernetes Go 客户端可能具有挑战性。用户在尝试流式传输执行输出时可能会遇到没有明确消息的错误。
解决方案:
要使用 Kubernetes Go 客户端在 pod 中正确执行命令,请按照以下步骤操作步骤:
注意:
问题中提供的代码示例使用了不正确版本的 PodExecOptions 结构。正确的版本来自 v1 包(不是未版本化的包)。
工作示例:
以下代码演示了在 pod 中执行命令的工作示例: Kubernetes Go 客户端:
package k8s 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 }
此代码正确使用 PodExecOptions 的 v1 版本并设置 TTY参数设置为 true,如果需要,可以启用交互式命令执行。
以上是如何使用Go客户端执行Kubernetes Exec命令?的详细内容。更多信息请关注PHP中文网其他相关文章!