问题标签 [client-go]

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 回答
323 浏览

kubernetes - 参考现有的 kubernetes 类型生成 kubernetes 客户端代码

我正在为 kubernetes 编写 CRD,并且无法让代码生成器工作。特别是,对于引用 a 的特定结构,生成 deepcopy 函数失败batch.JobTemplateSpec。注释掉该行可以解决我的问题。

我已经尝试过各种导入和注册JobTemplateSpecin register.go,但这似乎不是解决方案。

特别是,该结构看起来像这样:

我最终得到的是来自 codegen 脚本的这个错误:

其余代码生成失败。

0 投票
2 回答
560 浏览

kubernetes - 通过 operator-sdk/client-go 中的 taints 列出不可调度的 kubernetes 节点

我正在尝试列出在 operator-sdk 运算符中设置为不可调度的所有节点。通常(1.12 之前)这意味着他们已经spec.unscheduleable设置。所以我尝试了这个:

这是错误的:

我对此感到困惑,因为字段选择器适用于 kubectl:

除了这个问题,我注意到在 v1.12 之后,spec.unscheduleable 字段已被弃用,取而代之的是 TaintNodeByCondition。这使事情变得更加复杂,因为现在我真的不认为我可以使用任何人的字段选择器,因为我不相信(除非我弄错了?)无论如何你都可以使用带有污点的字段选择器。

所以,我的问题是 - 如何有效地列出集群中所有受污染/不可调度的节点,特别是在使用 operator-sdk 时

更新:

我已经设法通过使用 v1meta.ListOptions 调用解决了字段选择器问题,如下所示:

但是,我仍然不知道如何处理污点,所以我编辑了问题并将其保持打开状态

0 投票
0 回答
631 浏览

kubernetes - 如何通过 webshel​​l 登录(在 golang 中使用 client-go)具有多容器的 k8s pod?

描述:

当 pod 中只有一个容器时,通过 client-go/remotecommand.NewSPDYExecutor 登录容器/pod 是没有问题的。

但是当一个 pod 中有很多容器时,我无法通过容器 id 点登录。

任何人都可以帮助或给我解决方案吗?提前致谢。


注意:

我正在使用 client-go 连接到 k8s,并使用 remotecommand.NewSPDYExecutor 登录容器。


代码:

这是我用于登录/连接到 pod/容器的代码

我的 pod 与几个边车一起运行。所以一个pod中有多个容器。我希望我可以通过提供容器 id 来登录指定的容器。

0 投票
1 回答
500 浏览

go - How to idiomatically fill empty fields with default values for Kubernetes API objects?

I want to compare two Kubernetes API objects (e.g. v1.PodSpecs): one of them was created manually (expected state), the other one was received from the Kubernetes API/client (actual state). The problem is that even if the two objects are semantically equal, the manually created struct has zerovalues for unspecified fields where the other struct has default values, and so the two doesn't match. It means that a simple reflect.DeepEqual() call is not sufficient for comparison.

E.g. after this:

expected.ImagePullPolicy will be "", while actual.ImagePullPolicy will be "IfNotPresent" (the default value), so the comparison fails.

Is there an idiomatic way to replace zerovalues with default values in Kubernetes API structs specifically? Or alternatively is a constructor function that initializes the struct with default values available for them somewhere?

EDIT: Currently I am using handwritten equality tests for each K8s API object types, but this doesn't seem to be maintainable to me. I am looking for a simple (set of) function(s) that "knows" the default values for all built-in Kubernetes API object fields (maybe somewhere under k8s.io/api*?). Something like this:

0 投票
1 回答
33 浏览

kubernetes - 我该怎么做才能让k8s以下划线而不是驼峰式的形式返回json

我需要使用client-go来获取k8s中的deployment状态,但是当json序列化完成后,k8s默认是camel case序列化的,而我需要以下划线分割的形式传递给前端。我需要做什么?

0 投票
1 回答
89 浏览

go - client-go 中的 golang 语法

有人可以帮我理解这些代码吗?

在 client-go 项目中,有一些我无法理解的代码。代码路径是 \tols\cache\store.go

最后一行“var_Store = &cache{}”,这是什么意思,有官方文档支持吗?

0 投票
0 回答
205 浏览

kubernetes - Controller-runtime 客户端如何让 RESTClient 运行命令

我们已经通过 kubebuilder 2.0 成功构建了一个 operator。在这个操作符中,我们需要在使用 k8s.io/client-go/kubernetes.Clientset 之前在 pod 中运行一个 cmd,它会抓取 restconfig 并像这样运行

在控制器运行时世界中,我无法从控制器运行时的客户端找到任何 RESTClient 。

我想知道我们如何在操作员的 pod 中执行 cmd?

谢谢(编辑)

0 投票
1 回答
108 浏览

kubernetes - 如何使用 k8s client-go 获取 GKE 工作节点的新列表

我正在使用 k8s client-go SDK 的NodeInterface来获取 GKE 集群的所有节点的列表。API 正确返回列表。当我更新(减小)GKE 节点池的大小时,一些工作节点被杀死。我等待集群变得稳定。

调用相同的 API 列出所有 GKE 节点,包括一个已被杀死的节点。我是否需要再等一段时间才能获得更新的工作节点列表?或者我在这里遗漏了什么?

0 投票
1 回答
2074 浏览

go - 当我更新节点或使用 client-go 部署时,我偶尔会收到这样的错误“对象已被修改”

当我更新节点或使用 client-go 部署时,我偶尔会收到这样的错误“对象已被修改;请将您的更改应用到最新版本并重试”。我的目标是向其中添加一个 taint/toleration 和标签节点/部署。

有人说应该使用

,但似乎不起作用。

0 投票
2 回答
3185 浏览

kubernetes - kubernetes client-go 报错:创建时可能没有设置空的命名空间

使用 Kubernetes client-go 以编程方式创建 pod 会出现以下错误: an empty namespace may not be set during creation

从这个例子开始: https ://github.com/feiskyer/go-examples/blob/master/kubernetes/pod-create/pod.go

期望:创建 Pod。
实际:创建失败并出现 k8s 错误:创建期间可能未设置空命名空间