> 백엔드 개발 > Golang > Go 클라이언트를 사용하여 Kubernetes Exec 명령을 실행하는 방법은 무엇입니까?

Go 클라이언트를 사용하여 Kubernetes Exec 명령을 실행하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-06 05:39:14
원래의
1005명이 탐색했습니다.

How to Execute Kubernetes Exec Commands Using the Go Client?

Go 클라이언트를 사용한 Kubernetes Exec 명령 예

문제:

Pod에서 명령 실행 Kubernetes Go 클라이언트를 사용하는 것은 어려울 수 있습니다. 사용자가 실행 출력을 스트리밍하려고 시도할 때 명확한 메시지 없이 오류가 발생할 수 있습니다.

해결책:

Kubernetes Go 클라이언트를 사용하여 Pod에서 명령을 올바르게 실행하려면 다음을 따르세요. 단계:

  1. restclient.Config 구조체를 사용하여 서버 호스트를 지정하고 Insecure를 true로 설정하여 Kubernetes 클라이언트 구성을 생성합니다. 테스트 목적.
  2. RESTClientFor 함수를 사용하여 클라이언트를 초기화하고 API 그룹 버전 및 협상된 직렬 변환기를 지정합니다.
  3. Pod 리소스에 대한 Post() 요청 빌더를 생성하여 요청을 구성합니다. 요청 빌더에서 포드 이름, 네임스페이스 및 하위 리소스(exec)를 설정합니다.
  4. PodExecOptions를 지정하고 ParameterCodec을 사용하여 매개변수를 인코딩합니다.
  5. NewExecutor 함수를 사용하여 주어진 구성, HTTP 메소드 및 URL.
  6. 스트림 실행 옵션을 초기화하고 stdin, stdout 및 stderr 스트림과 TTY 설정.
  7. Stream 함수를 호출하여 명령을 실행합니다.

참고:

질문에 제공된 코드 예제는 잘못된 버전의 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿