Go クライアントを使用した Kubernetes ポッドの実行
Kubernetes Go クライアントを使用してポッド内でコマンドを実行したいと考えていますが、現在の実装は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 ポッドでコマンドをデバッグし、正しく実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。