Go 클라이언트를 사용한 Kubernetes Exec 명령 예
문제:
Pod에서 명령 실행 Kubernetes Go 클라이언트를 사용하는 것은 어려울 수 있습니다. 사용자가 실행 출력을 스트리밍하려고 시도할 때 명확한 메시지 없이 오류가 발생할 수 있습니다.
해결책:
Kubernetes Go 클라이언트를 사용하여 Pod에서 명령을 올바르게 실행하려면 다음을 따르세요. 단계:
참고:
질문에 제공된 코드 예제는 잘못된 버전의 PodExecOptions 구조체를 사용합니다. 올바른 버전은 v1 패키지(버전이 지정되지 않은 패키지 아님)에 있습니다.
작업 예:
다음 코드는 다음을 사용하여 Pod에서 명령을 실행하는 작업 예를 보여줍니다. 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!