Go クライアントを使用した Kubernetes Exec コマンドの例
問題:
ポッドでのコマンドの実行Kubernetes Go クライアントを使用するのは難しい場合があります。ユーザーは、実行出力をストリーミングしようとすると、明確なメッセージなしでエラーが発生することがあります。
解決策:
Kubernetes Go クライアントを使用してポッド内のコマンドを正しく実行するには、次の手順に従います。手順:
注:
質問に記載されているコード例では、間違ったバージョンの PodExecOptions 構造体が使用されています。正しいバージョンは v1 パッケージからのものです (バージョン管理されていないパッケージではありません)。
作業例:
次のコードは、次のコードを使用してポッド内でコマンドを実行する作業例を示しています。 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 中国語 Web サイトの他の関連記事を参照してください。