Home > Backend Development > Golang > Error while running specific command in pod

Error while running specific command in pod

WBOY
Release: 2024-02-09 17:30:10
forward
698 people have browsed it

在 pod 中运行特定命令时出现错误

php小编鱼仔在使用pod运行特定命令时遇到了错误。这个问题对于开发人员来说是非常常见的,但解决起来可能会有些困难。当我们在pod中执行特定命令时出现错误,这可能是由于多种因素引起的,比如版本不兼容、依赖关系问题等。在解决这个问题之前,我们需要先确定具体的错误信息,然后逐步排查和解决。在本文中,我们将介绍一些常见的错误情况和相应的解决方案,希望能帮助到遇到类似问题的开发人员。

问题内容

我正在尝试在正在运行的 pod 中执行命令。我正在使用 go k8sclient 来实现此目的,但遇到了问题。我也不知道解决方案是否正确。任何人都可以检查并提供正确的解决方案吗?

这是我的代码。

namespace := getnamespace()
        podname := "maxscale-0"

        config, err := rest.inclusterconfig()
        if err != nil {
                log.fatal(err)
        }

        clientset, err := kubernetes.newforconfig(config)
        if err != nil {
                log.fatal(err)
        }



        req := clientset.corev1().pods(namespace).exec(podname, &corev1.podexecoptions{
                command: []string{"sh", "-c", "grep -op '\"name\": \"\\k[^\"]*' /var/lib/maxscale/mariadb-monitor_journal.json"},
        })

        // set up a stream to capture the output
        execstream, err := req.stream()
        if err != nil {
                fmt.println(err)
                os.exit(1)
        }

        // print the output
        buf := new(bytes.buffer)
        buf.readfrom(execstream)
        fmt.println(buf.string())
Copy after login

我得到的错误是

clientset.CoreV1().Pods(namespace).Exec undefined (type "k8s.io/client-go/kubernetes/typed/core/v1".PodInterface has no field or method Exec)
Copy after login

解决方法

正如 @david maze 所分享的,要使用 k8 的 go 客户端在 pod 中执行命令,请遵循以下代码:

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
}
Copy after login

另请参阅此链接了解更多信息

The above is the detailed content of Error while running specific command in pod. For more information, please follow other related articles on the PHP Chinese website!

source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template