I want to use k8s go client to exec command in a pod. However I cannot find any example about this. So I read kubectl exec
source code, and write code as below. And err = exec.Stream(sopt)
always get an error without any message. Can anyone tell me how to debug this problem, or give me a correct example.
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())
}