使用 golang 代码部署 kubernetes Pod

Deploy a kubernetes Pod using golang code

是否可以使用 golang 代码而不是命令行 Linux 和 [=12] 来部署 kubernetes Pod =]kubectl ?

是的。你绝对可以。 Kubernetes 是用 golang 编写的。它有官方客户端。您可以使用此 go 客户端创建、删除、修补、列出、控制几乎所有 Kubernetes 资源。

这是官方客户端存储库:kubernetes/client-go

我已经创建了一个示例存储库 here 来展示如何使用 client-go.

创建 pod

您必须执行以下操作才能使用此客户端创建 pod。我们将创建一个简单的 busybox pod。

  1. 使用您的 kube-config 文件创建 configuration。一般配置文件是$HOME/.kube/config文件。请参阅示例 here
  2. 使用此 configuration 创建一个 clientset。参见示例 here.
  3. 现在,生成我们要部署的 pod 定义。参见示例 here.
  4. 最后,使用 clientset 在 kubernetes 集群中创建 pod。请参阅示例 here.

你可以写一个函数,把细胞图像yaml文件作为参数。

func cellDeploy(pathToFileName string) error {
    cmd := exec.Command("kubectl", "apply", "-f", pathToFileName)
    stdoutReader, _ := cmd.StdoutPipe()
    stdoutScanner := bufio.NewScanner(stdoutReader)
    go func() {
        for stdoutScanner.Scan() {
            fmt.Println(stdoutScanner.Text())
        }
    }()
    stderrReader, _ := cmd.StderrPipe()
    stderrScanner := bufio.NewScanner(stderrReader)
    go func() {
        for stderrScanner.Scan() {
            fmt.Println(stderrScanner.Text())
        }
    }()
    err := cmd.Start()
    if err != nil {
        fmt.Printf("Error : %v \n", err)
        os.Exit(1)
    }
    err = cmd.Wait()
    if err != nil {
        fmt.Printf("Error: %v \n", err)
        os.Exit(1)
    }

    return nil
}