Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 使用k8s.io包使用Kubectl Apply命令_Go_Kubernetes - Fatal编程技术网

Go 使用k8s.io包使用Kubectl Apply命令

Go 使用k8s.io包使用Kubectl Apply命令,go,kubernetes,Go,Kubernetes,我需要在我的应用程序中添加kubectl apply功能 我已经浏览了kubectl go-client,它没有关于apply命令的规定 我可以在go应用程序中创建kubectl的实例吗 如果不是1,我可以使用k8s.io/kubernetes包模拟kubectl apply命令吗 如果需要,将给出问题和澄清。这可以通过创建插件并向kubectl添加插件来完成 您可以用任何编程语言或脚本编写插件,以允许您编写命令行命令 不需要安装插件或预加载。插件可执行文件从kubectl二进制文件接收继承的环

我需要在我的应用程序中添加
kubectl apply
功能

我已经浏览了
kubectl go-client
,它没有关于apply命令的规定

  • 我可以在go应用程序中创建
    kubectl
    的实例吗
  • 如果不是1,我可以使用
    k8s.io/kubernetes
    包模拟
    kubectl apply
    命令吗

  • 如果需要,将给出问题和澄清。

    这可以通过创建插件并向kubectl添加插件来完成

    您可以用任何编程语言或脚本编写插件,以允许您编写命令行命令

    不需要安装插件或预加载。插件可执行文件从
    kubectl
    二进制文件接收继承的环境。插件根据其名称确定希望实现的命令路径。例如,一个插件想要提供一个新的命令
    kubectl-foo
    ,它将被命名为
    kubectl-foo
    ,并位于用户路径的某个地方

    示例插件可以如下所示:

    #!/bin/bash
    # optional argument handling
    if [[ "$1" == "version" ]]
    then
      echo "1.0.0"
      exit 0
    fi
    
    # optional argument handling
    if [[ "$1" == "config" ]]
    then
      echo $KUBECONFIG
      exit 0
    fi
    echo "I am a plugin named kubectl-foo"
    
    之后,您只需将其设置为可执行
    chmod+x./kubectl foo
    ,并将其移动到路径
    mv./kubectl foo/usr/local/bin

    现在您可以通过
    kubectl foo
    调用它:

    $ kubectl foo
    I am a plugin named kubectl-foo
    
    所有参数和标志都按原样传递给可执行文件:

    $ kubectl foo version
    1.0.0
    

    您可以在Kubernetes文档中阅读更多关于kubectl插件的信息。

    这可以通过创建并向kubectl添加插件来完成

    您可以用任何编程语言或脚本编写插件,以允许您编写命令行命令

    不需要安装插件或预加载。插件可执行文件从
    kubectl
    二进制文件接收继承的环境。插件根据其名称确定希望实现的命令路径。例如,一个插件想要提供一个新的命令
    kubectl-foo
    ,它将被命名为
    kubectl-foo
    ,并位于用户路径的某个地方

    示例插件可以如下所示:

    #!/bin/bash
    # optional argument handling
    if [[ "$1" == "version" ]]
    then
      echo "1.0.0"
      exit 0
    fi
    
    # optional argument handling
    if [[ "$1" == "config" ]]
    then
      echo $KUBECONFIG
      exit 0
    fi
    echo "I am a plugin named kubectl-foo"
    
    之后,您只需将其设置为可执行
    chmod+x./kubectl foo
    ,并将其移动到路径
    mv./kubectl foo/usr/local/bin

    现在您可以通过
    kubectl foo
    调用它:

    $ kubectl foo
    I am a plugin named kubectl-foo
    
    所有参数和标志都按原样传递给可执行文件:

    $ kubectl foo version
    1.0.0
    
    您可以在Kubernetes文档中阅读更多关于kubectl插件的信息

  • 我可以在我的应用程序中创建kubectl的实例吗
  • 您可以在应用程序中包装
    kubectl
    命令,并在新的子进程中启动它,就像您通过shell脚本所做的那样。有关更多信息,请参阅go中的
    exec
    程序包:

    这对我们来说效果很好,kubectl通常有
    -o
    -参数,用于控制输出格式,因此可以返回机器可读的文本

    已经有一些开源项目使用这种方法:

  • 如果不是1,我可以使用k8s.io/kubernetes包来模拟kubectl apply命令吗
  • 在kubectl源代码中搜索时找到了吗? 看看run函数:

    func (o *ApplyOptions) Run() error { ... r := o.Builder. Unstructured(). Schema(o.Validator). ContinueOnError(). NamespaceParam(o.Namespace).DefaultNamespace(). FilenameParam(o.EnforceNamespace, &o.DeleteOptions.FilenameOptions). LabelSelectorParam(o.Selector). IncludeUninitialized(o.ShouldIncludeUninitialized). Flatten(). Do() ... err = r.Visit(func(info *resource.Info, err error) error { ... func(o*ApplyOptions)运行()错误{ ... r:=o.Builder。 非结构化()。 模式(o.Validator)。 ContinueOnError()。 NamespaceParam(o.Namespace).DefaultNamespace()。 FilenameParam(o.EnforceNamespace,&o.DeleteOptions.FilenameOptions)。 LabelSelectorParam(o.选择器)。 包括未初始化(o.应包括未初始化)。 展平()。 Do() ... err=r.Visit(func(info*resource.info,err error)错误{ ... 它的可读性不是很好,但这就是
    kubectl apply
    所做的。 也许一种可能的方法是调试代码,看看is能做些什么

  • 我可以在我的应用程序中创建kubectl的实例吗
  • 您可以在应用程序中包装
    kubectl
    命令,并在新的子进程中启动它,就像通过shell脚本所做的那样。有关更多信息,请参阅go中的
    exec
    包:

    这对我们来说效果很好,kubectl通常有
    -o
    -参数,用于控制输出格式,因此可以返回机器可读的文本

    已经有一些开源项目使用这种方法:

  • 如果不是1,我可以使用k8s.io/kubernetes包来模拟kubectl apply命令吗
  • 在kubectl源代码中搜索时找到了吗? 看看run函数:

    func (o *ApplyOptions) Run() error { ... r := o.Builder. Unstructured(). Schema(o.Validator). ContinueOnError(). NamespaceParam(o.Namespace).DefaultNamespace(). FilenameParam(o.EnforceNamespace, &o.DeleteOptions.FilenameOptions). LabelSelectorParam(o.Selector). IncludeUninitialized(o.ShouldIncludeUninitialized). Flatten(). Do() ... err = r.Visit(func(info *resource.Info, err error) error { ... func(o*ApplyOptions)运行()错误{ ... r:=o.Builder。 非结构化()。 模式(o.Validator)。 ContinueOnError()。 NamespaceParam(o.Namespace).DefaultNamespace()。 FilenameParam(o.EnforceNamespace,&o.DeleteOptions.FilenameOptions)。 LabelSelectorParam(o.选择器)。 包括未初始化(o.应包括未初始化)。 展平()。 Do() ... err=r.Visit(func(info*resource.info,err error)错误{ ... 它的可读性不是很好,但这就是
    kubectl apply
    所做的。 也许一种可能的方法是调试代码,看看is能做些什么。

    • kubectl
      应仅从命令行使用
    • 但是,您可以使用某种形式的exec(例如python中的
      os.system
      )将其包装在代码中,golang
      import“os/exec
      ”中也会存在类似的情况,但这种方法是肮脏的
    • 您需要在代码中使用客户端库来执行操作
    • 客户端库的列表为
        • kubectl
          应仅从命令行使用
        • 但是,您可以使用某种形式的exec(例如python中的
          os.system
          )将其封装在代码中,类似的