Kubernetes에서 exec 명령을 사용하면 Pod에서 원격으로 명령을 실행할 수 있습니다. Go 클라이언트는 이 작업을 수행하기 위한 편리한 인터페이스를 제공합니다.
다음 시나리오를 고려해보세요. wordpress-mysql-213049546-29s7d라는 Pod에서 ls 명령을 실행해야 합니다.
config := &restclient.Config{ Host: "http://192.168.8.175:8080", Insecure: true, } config.ContentConfig.GroupVersion = &api.Unversioned config.ContentConfig.NegotiatedSerializer = api.Codecs restClient, err := restclient.RESTClientFor(config) if err != nil { panic(err.Error()) } req := restClient.Post().Resource("pods").Name("wordpress-mysql-213049546-29s7d").Namespace("default").SubResource("exec").Param("container", "mysql") req.VersionedParams(&api.PodExecOptions{ Container: "mysql", Command: []string{"ls"}, Stdin: true, Stdout: true, }, api.ParameterCodec) exec, err := remotecommand.NewExecutor(config, "POST", req.URL()) if err != nil { panic(err.Error()) } sopt := remotecommand.StreamOptions{ SupportedProtocols: remotecommandserver.SupportedStreamingProtocols, Stdin: os.Stdin, Stdout: os.Stdout, Stderr: os.Stderr, Tty: false, } err = exec.Stream(sopt) if err != nil { panic(err.Error()) }
이 코드를 실행하려고 하면 메시지 없이 오류가 발생합니다. 문제에 접근하는 방법은 다음과 같습니다.
또는 다음 코드 조각을 참조하여 작업할 수도 있습니다. 예:
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 }
이 코드 샘플은 Kubernetes Go 클라이언트를 사용하여 Pod에서 명령을 성공적으로 실행하는 데 도움이 됩니다.
위 내용은 Go 클라이언트를 사용하여 Kubernetes 포드에서 명령을 실행할 때 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!