Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Melaksanakan Perintah dengan Betul dalam Pod Kubernetes Menggunakan Klien Go dan Mengendalikan Sambungan SPDY?
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 } }
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!