Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Melaksanakan Perintah dengan Betul dalam Pod Kubernetes Menggunakan Klien Go dan Mengendalikan Sambungan SPDY?

Bagaimana untuk Melaksanakan Perintah dengan Betul dalam Pod Kubernetes Menggunakan Klien Go dan Mengendalikan Sambungan SPDY?

Linda Hamilton
Lepaskan: 2024-12-14 06:22:10
asal
1003 orang telah melayarinya

How to Correctly Execute a Command in a Kubernetes Pod Using the Go Client and Handle SPDY Connections?

Perintah Exec dalam Pod Kubernetes Menggunakan Go Client

Isu:

Kod yang disediakan coretan cuba untuk melaksanakan perintah di dalam pod menggunakan klien Kubernetes Go tetapi menghadapi ralat apabila cuba menstrim output arahan.

Penyelesaian:

Isunya terletak pada penggunaan remotecommand.NewExecutor(), yang bertujuan untuk sambungan HTTP/1.1. Untuk sambungan SPDY, yang biasanya digunakan dalam kelompok Kubernetes, sebaliknya anda harus menggunakan arahan jauh.NewSPDYExecutor().

Kod Diubah Suai:

import (
    "fmt"
    "io"
    "os"

    container "k8s.io/api/core/v1"
    meta "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    restclient "k8s.io/client-go/rest"
    cmd "k8s.io/client-go/tools/remotecommand"
)

func main() {
    // Replace with your own config or use in-cluster config
    config := &restclient.Config{
        Host: "https://192.168.8.175:8080",
        // Insecure if using a self-signed certificate
        Insecure: true,
    }

    // Create a Kubernetes client
    client, err := kubernetes.NewForConfig(config)
    if err != nil {
        fmt.Println(err)
        return
    }

    // Define the pod and container to execute the command in
    podName := "wordpress-mysql-213049546-29s7d"
    namespace := "default"
    containerName := "mysql"

    // Define the command to execute
    command := []string{"ls"}

    // Create the PodExecOptions object
    execOptions := container.PodExecOptions{
        Container: containerName,
        Command:   []string{"ls"},
        Stdin:     true,
        Stdout:    true,
        Stderr:    true,
    }

    // Create the request
    req := client.CoreV1().RESTClient().Post().Resource("pods").Namespace(namespace).Name(podName).SubResource("exec")

    // Pass the PodExecOptions object as VersionedParams
    request := req.VersionedParams(&execOptions, meta.ParameterCodec)

    // Execute the command
    exec, err := cmd.NewSPDYExecutor(config, "POST", request.URL())
    if err != nil {
        fmt.Println(err)
        return
    }

    // Stream the output of the command to stdout and stderr
    err = exec.Stream(cmd.StreamOptions{
        Stdin:  os.Stdin,
        Stdout: os.Stdout,
        Stderr: os.Stderr,
    })
    if err != nil {
        fmt.Println(err)
        return
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Perintah dengan Betul dalam Pod Kubernetes Menggunakan Klien Go dan Mengendalikan Sambungan SPDY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan