问题标签 [kubernetes-go-client]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
304 浏览

go - 使用 golang 客户端从远程 kubernetes 命令流式输出

我正在使用 golang kubernetes 客户端创建 kubernetes pod 并在其中执行远程命令。但是,我发现在远程执行完成之前我无法获得有关远程执行状态的反馈,因为我无法弄清楚如何流式传输远程命令的日志。这是我当前执行远程命令的实现:

在这个实现中,我不知道远程命令的状态,直到它完成执行,此时我一次获得所有输出日志。

有没有办法在通过调用来读取stdout/stderr时读取它们exec.Stream?在理想的世界中,我希望能够逐行打印远程命令行的输出。我注意到bytes.Buffer有一个ReadString接受分隔符的方法。这看起来像是一个有用的方法,但我无法弄清楚如何使用它。

0 投票
1 回答
132 浏览

go - 如何防止 Kubernetes go-client-discovery pkg 向 stderr 发送错误

我正在使用 go discovery 客户端 pkg ( k8s.io/client-go/discovery, v0.22.2) 列出集群中所有支持的资源 ->

当我运行此代码时,出现以下错误->

现在,我不介意这个错误,困扰我的是我无法阻止这个错误被打印出来。

知道如何阻止发现客户端向标准错误发送错误吗?

0 投票
0 回答
133 浏览

kubernetes - Kubernetes Go 客户端包路径

如何找到 Kubernetes Go 客户端的任何子包的确切路径是什么?

我对整个 Go 依赖项 ( go get k8s.io/client-go@latest) 感到困惑,因为我看到很多等价/相似V1或类似的V1beta1前缀XXX有时会在其他时候以我认为任意的方式出现恐慌。

但是,当我检查文档时,很难找到有关接口、结构定义和包名称的信息(我目前被阻止的东西)。

当我在多次点击后转到这里时:https ://pkg.go.dev/k8s.io/api@v0.23.1/core/v1#Container 那么我如何将此 URL 转换为 Go 包?它可能是Container结构的包,但对于任何其他“Kubernetes 事物”都是一样的。

查看https://github.com/kubernetes/client-go/blob/master/examples/out-of-cluster-client-configuration/main.go上的示例,我发现它们正在导入metav1 "k8s.io/apimachinery/pkg/apis/meta/v1",所以我尝试corev1 "k8s.io/apimachinery/pkg/apis/core/v1"了,但是编译器恐慌

所以我尝试go mod tidy了,但我得到了同样的错误。

我也试过"k8s.io/client-go/util/core"or "k8s.io/client-go/core"- 它不起作用,但必须有一个一致的规则来找出这些包名称。

我习惯于从 GitHub 存储库 URL 推断包名称,例如 importinggithub.com/kubernetes/client-go或类似的,但由于某种原因,在 Kubernetes 中,它们似乎没有以这种方式使用。

如何在https://pkg.go.dev的那些 URL 上找到从这些文档推断包导入的规则?

0 投票
1 回答
165 浏览

kubernetes - 使用 Kubectl 时如何打印 Kubebuilder 中定义的状态字段以显示

如何指定注释,例如+kubebuilder:printcolumn在命令的输出中添加列kubectl get my-crd.my-group.my-domain.com

我有一个 CRD(自定义资源定义),struct其规格和状态通常为 s(类似于此处的 Kubebuilder 教程https://book.kubebuilder.io/cronjob-tutorial/new-api.html#添加新的 api)。

我有这样的状态 struct

其中有几个问题:

时间场

  • 我已经尝试将其设为类型metav1.Time(方便的格式,如他们在https://book.kubebuilder.io/cronjob-tutorial/api-design.html?highlight=metav1.Time#designing-an-api中所述),但是然后此注释// +kubebuilder:printcolumn:name="Last Deploy",type="date",JSONPath=.status.lastDeployTime`` 在 .status.lastDeployTime 的输出中显示为空kubectl
  • 所以我将类型更改为string(然后在控制器中执行oess.Status.LastDeployTime = fmt.Sprintf("%s", metav1.Time{Time: time.Now().UTC()})),然后添加注释+kubebuilder:printcolumn:name="Last Deploy",type=string,JSONPath=.status.lastDeployTime`` 但该字段在 .status.lastDeployTime 的输出中仍然显示为空kubectl

切片字段[]string和地图字段map[string]string

  • 我该如何配置这些?这里没有提及(点击“显示详细参数帮助”时):https ://book.kubebuilder.io/reference/markers/crd.html
  • 如果这些不是在使用时出现格式问题的“简单类型” kubectl,这是否意味着我唯一的选择是string用某种方式制作它们fmt.Sprintf(...)
  • 还有其他选择吗?
0 投票
0 回答
82 浏览

kubernetes - 如何在 Go SDK 忽略 Env Var 源的情况下检索 Kubernetes 环境变量值?

有没有办法在不知道其来源并避免浏览所有可能来源的情况下获取环境变量的值?

假设在 YAML 领域,我们可以拥有:

或者:

但甚至还有许多其他来源。

现在,当使用 Kubernetes 的 Go SDK 时,在这里https://pkg.go.dev/k8s.io/api/core/v1#EnvVar我看到我可以这样做:

是否可以Value在 Go 中检索它而忽略 type 实例中的内容corev1.EnvVar?某种方便的代码为我们进行迭代?

作为替代方法,如何corev1.EnvVar在 Go 中检索来自 ConfigMap 的值?

0 投票
1 回答
50 浏览

go - 如何使用 go-client 在 k8s 中访问我的 pod

我正在使用 go-client 访问我环境中的 k8s 资源。有一些 API 可以获取/列出 pod、命名空间等。

如何访问我当前正在运行的 pod?

0 投票
0 回答
65 浏览

go - 使用 k8s.io 库获取秘密

我对 Go 和 Kubernetes 库 k8s.io ( https://github.com/kubernetes/client-go ) 完全陌生,并试图弄清楚如何获得特定的秘密。

我有一种观察者,可以观察Secrets. 我正在遍历特定命名空间中的 Secretlist。那行得通,我也可以通过while循环过滤它们。但我不知道如何在这个循环中应该可用的不同命名空间中获取和搜索 Secret 。

我需要在命名空间“my-namespace”中命名为 XXX 的秘密(我知道以下行不存在,它应该只概述我正在寻找的想法)我来自 Ruby,所以我搜索了这样的东西:

像上面那样的功能存在吗?

这就是我所拥有的:这会在命名空间“默认”中观察我的所有秘密。哪个有效。该示例取自执行类似我正在搜索的代码的代码,我现在尝试修改。:

我希望你能明白..

如果有的话,还请告诉我import需要哪个库。

0 投票
0 回答
37 浏览

go - 无法将令牌添加到对 Kube Exec 的 Golang 请求

我正在尝试在 Kubernetes Pod 容器上执行远程命令。我在本地 go-client 和 Kube api-server 中有一个代理。此代理需要在 HTTP 请求标头中提供一个令牌以进行身份​​验证。但不知何故,这个令牌并没有从客户端传播到代理。因此,请求会收到 403 禁止错误。以下是代码:-

开/关:

有人可以告诉我如何向连接添加令牌吗?

PS:另外,将令牌添加到req

返回相同的错误

0 投票
0 回答
28 浏览

go - 使用 go-client 从父 pod 动态创建的 Kubernetes pod 无权访问 configmap

我正面临 Kubernetes 和 go 客户端组合的问题。命名空间中的主程序将使用go clientinvestigate在命名空间下创建子 pod 。子 pod 期望挂载在 namespace 中可见的 configmap 。创建失败并出现错误:signersigner

如果我也利用 configmapdebug手动将 pod 添加到命名空间,则配置开始工作。signer然后动态 pod 就可以成功挂载 configmap。区分这两种配置的唯一项目是debugpod,其配置如下:

0 投票
1 回答
61 浏览

go - Golang kubernetes go-client 将 Deployment 转换为 DeploymentList

我正在创建一个程序,该程序从 Kubernetes 获取所有部署的列表作为*v1.DeploymentList. 我设法做到了,并且有效。然后我对这个列表进行一些处理,然后执行许多操作。现在,我有一个新要求;还需要能够只提取一个部署并对其应用相同的逻辑。问题是当我使用获取部署时,我得到*v1.Deployment的当然是不同于*v1.DeploymentList这是一个列表。现在,这个 DeploymentList 不是一个切片,所以我不能只使用append也不知道如何转换/转换。作为一个“务实”的解决方案,我试图做的只是将该部署转换为部署列表,然后将我的其余逻辑作为部署应用,因为此时更改其他所有内容将意味着很多负担。

我有以下代码:

它返回一个*v1.Deployment,但我需要这个数据作为一个列表,即使*v1.DeploymentList我试图附加它,但*v1.DeploymentList它不是一个切片,所以我不能这样做。关于如何实现这一目标或我应该改变做事方式的任何想法?请解释。仅供参考:我是 Go 新手,也对 k8s 相关的东西编程。