使用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中文網其他相關文章!