ホームページ >バックエンド開発 >Golang >Go クライアントを使用して Kubernetes ポッドでコマンドをデバッグし、正しく実行するにはどうすればよいですか?

Go クライアントを使用して Kubernetes ポッドでコマンドをデバッグし、正しく実行するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-08 18:01:12406ブラウズ

How to Debug and Correctly Execute Commands in Kubernetes Pods Using the Go Client?

Go クライアントを使用した Kubernetes ポッドの実行

Kubernetes Go クライアントを使用してポッド内でコマンドを実行したいと考えていますが、現在の実装はexec.Stream(sopt) でエラーが発生しましたが、エラー メッセージは表示されません。この記事では、デバッグ手順を説明し、ユースケースに適した例を示します。

問題のデバッグ

現在のエラーは、構成パラメータが正しくないか、不一致であるために発生する可能性があります。バージョン。次の点を確認してください:

  • 構成内の Host フィールドが Kubernetes API サーバーのアドレスと一致していることを確認します。
  • でサポートされている正しい Kubernetes API バージョンを使用するように config.ContentConfig.GroupVersion を更新します。
  • req.VersionedParams で指定されたコンテナー名がクラスターの名前と一致するかどうかを確認します。

正しい実装

変更された 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
}
  • 構成変数は構成されていると想定されるため削除されました
  • VersionedParams メソッドは、PodExecOptions と ParameterCodec の新しいバージョンを処理するようになりました。
  • 長いコマンド出力を処理するためにバッファリングされたリーダーが使用されます。
  • TTY オプションは false に設定されますインタラクティブな端末サポートは必要ないためです。

以上がGo クライアントを使用して Kubernetes ポッドでコマンドをデバッグし、正しく実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。