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

Go クライアントを使用して Kubernetes Exec コマンドを実行するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-06 05:39:14
オリジナル
1002 人が閲覧しました

How to Execute Kubernetes Exec Commands Using the Go Client?

Go クライアントを使用した Kubernetes Exec コマンドの例

問題:

ポッドでのコマンドの実行Kubernetes Go クライアントを使用するのは難しい場合があります。ユーザーは、実行出力をストリーミングしようとすると、明確なメッセージなしでエラーが発生することがあります。

解決策:

Kubernetes Go クライアントを使用してポッド内のコマンドを正しく実行するには、次の手順に従います。手順:

  1. restclient.Config 構造体を使用して Kubernetes クライアント構成を作成します。サーバーホストを指定し、テスト目的で Insecure を true に設定します。
  2. RESTClientFor 関数を使用してクライアントを初期化し、API グループのバージョンとネゴシエートされたシリアライザーを指定します。
  3. Post( ) ポッド リソースのリクエスト ビルダー。リクエスト ビルダーでポッド名、名前空間、およびサブリソース (exec) を設定します。
  4. PodExecOptions を指定し、ParameterCodec を使用してパラメータをエンコードします。
  5. NewExecutor 関数を使用して、次の Executor を作成します。指定された構成、HTTP メソッド、および URL。
  6. ストリーム実行オプションを初期化し、 stdin、stdout、stderr ストリームと TTY 設定。
  7. Stream 関数を呼び出してコマンドを実行します。

注:

質問に記載されているコード例では、間違ったバージョンの 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート