问题标签 [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 投票
3 回答
4114 浏览

go - 如何使用 kubernetes go-client 获取与 kubectl 相同的 Pod 状态信息

使用 kubernetes go-client ( k8s.io/client-go/kubernetes),我知道如何获取pod.Status并且发现pod.Status.Phase有用 ( docs )。例如,我可以使用以下命令输出所有 Pod 的 Pod 状态阶段:

但是,phase它有点简单,因为它只显示 5 个值(PendingRunningSucceededFailedUnknown)。我宁愿获得与kubectl get podsStatus 列中相同的信息,例如:

Init:0/1特别是,我对PodInitializing状态感兴趣。处于这些状态的 Pod 在使用 时只会显示为“Pending” pod.Status.Phase

  • Init:0/1表示 Pod 有 1 个 Init 容器,到目前为止 0 个已成功完成。init 容器在应用容器启动之前运行。
  • PodInitializing表示 Pod 已经完成了 Init Containers 的执行。

有没有办法获得状态,例如Init:0/1using k8s.io/client-go/kubernetes?还是没有捷径,我需要像 kubectl 一样重新计算它?我猜它使用 Pod 状态条件容器状态来构建信息。如果我需要重新计算它,也许我可以使用kubectl 源代码?有谁知道我在哪里可以找到相关位?(我的golang经验非常有限)

0 投票
2 回答
4207 浏览

go - 使用 Kubernetes go-client 向 Pod 添加标签的最短方法是什么

我有一个演示 golang 程序来列出没有特定标签的 Pod。我想对其进行修改,以便它也可以为每个 pod 添加一个标签。

(我使用的是 AWS 托管的 Kubernetes 服务 EKS,所以有一些特定于 EKS 的样板代码)

我知道 kubectl 可以用来添加标签,例如

我希望通过 go-client 有一个等效的方法?

0 投票
1 回答
971 浏览

kubernetes - 使用 k8s client-go 获取命名空间配额

我正在寻找一种使用 client-go 获取命名空间资源配额的方法,类似于kubectl describe ns my-namespace-name.

我已经尝试过ns, err := k8client.CoreV1().Namespaces().Get("my-namespace-name", metav1.GetOptions{}),但它没有提供配额信息。

也尝试过ns, err := k8client.CoreV1().ResourceQuotas("my-namespace-name").Get("name", metav1.GetOptions{}),但我不知道name在.Get() 中将什么作为参数。尝试了命名空间名称,尝试了https://kubernetes.io/docs/reference/kubectl/overview/#resource-types中的几种资源类型,但没有遇到类似resourcequotas "namespaces" not foundresourcequotas "limits.cpu" not found

也试过ns, err := k8client.CoreV1().ResourceQuotas("my-namespace-name").List(metav1.ListOptions{})了,但没有返回结果。

任何关于如何获得它的想法将不胜感激!

0 投票
1 回答
74 浏览

kubernetes - 如何让运行在 pod 中的代码知道它的 pod 名称

我有一些在 pod 内运行的 go 程序。我将如何编写代码以使用 go-client 库让它知道其 pod 名称?

0 投票
1 回答
54 浏览

go - 如何解析多个对象的引用

我正在使用 go-client 库。
我正在工作负载中寻找已安装的秘密。
在我的示例中,我们有两个工作负载:daemonsetdeployments.
尽管它们都是不同的对象,但它们具有相似的结构:

我收到以下错误:

未解决的参考

发生这种情况是因为编译不知道我指的是什么对象:v1beta2.DaemonSetListv1beta2.DeploymentList.

我怎样才能为他们两个解决它?

在此处输入图像描述

0 投票
2 回答
1449 浏览

kubernetes - Kubernetes API 调用是否是秘密更新和 configmap 更新原子调用?

client.Secrets(namespace).Update(secret) 是原子调用吗?如果此调用以某种方式失败,存储在 Kubernetes API 服务器中的原始机密是否会损坏?

https://github.com/kubernetes/client-go/blob/d1b30110f1abd3b2fb21c5c2daad4345ede8a9fc/kubernetes/typed/core/v1/secret.go#L41

同样, core.ConfigMaps(namespace).Update(configmap) 是原子调用吗?如果此调用失败,现有的 configmap 是否会损坏?

0 投票
1 回答
4925 浏览

kubernetes - Kubernetes client-go:watch.Interface vs. cache.NewInformer vs. cache.NewSharedIndexInformer?

我需要我的 Go 应用程序来监控 Kubernetes 集群中的一些资源并对它们的变化做出反应。基于大量文章和示例,我似乎找到了一些方法来做到这一点;但是,我对 Kubernetes 比较陌生,而且它们的描述对我来说太复杂了,以至于我仍然无法掌握它们之间的区别——因此,要知道使用哪一个,所以我不要出现一些意想不到的行为......特别是:

  1. watch.Interface.ResultChan()—(通过 eg 获得rest.Request.Watch())— 这似乎已经让我通过提供 // 事件来对资源发生的变化做出Added反应;ModifiedDeleted
  2. cache.NewInformer()— 当我实现 a 时cache.ResourceEventHandler,我可以将它作为最后一个参数传递:

    — 然后,该myHandler对象将接收//OnAdd()调用。OnUpdate()OnDelete()

    对我来说,这似乎或多或少等同于ResultChan我在上面的(1.)中得到的;一个区别是,显然现在我得到了资源的“之前”状态作为奖励,而ResultChan我只会得到它的“之后”状态。

    另外,IIUC,这实际上是建立在watch.Interface上面提到的(通过NewListWatchFromClient)之上的——所以我想它带来了一些价值,和/或修复了 raw 的一些(什么?)缺陷watch.Interface

  3. cache.NewSharedInformer()并且cache.NewSharedIndexInformer()—— (呃哇,现在这些都是满口的......)我试图深入研究 godocs,但我觉得完全被我不理解的术语所淹没,以至于我似乎无法掌握其中的微妙之处(?)“常规”NewInformer与...之间的差异NewSharedInformerNewSharedIndexInformer

有人可以帮我理解Kubernetes client-go 包中上述 API 之间的区别吗?

0 投票
1 回答
772 浏览

go - 无法在 Kubernetes Go 客户端中覆盖 Kubernetes 配置

我想使用 Kubernetes Go 客户端在集群中执行各种操作。我正在加载kubeconfig包含多个集群和上下文的本地。默认上下文是prod,我要覆盖的配置值之一是CurrentContext

当我检查RawConfig()当前上下文时仍然是“prod”而不是“stage”。为什么配置覆盖不起作用?

另外 AuthInfo 等的覆盖是如何工作的?覆盖只接受一个AuthInfo,而配置包含一个AuthInfo等的映射。

GitHub 相关问题https://github.com/kubernetes/client-go/issues/735

0 投票
1 回答
780 浏览

go - 将 CreationTimeStamp 类型转换为字符串

我正在获取时间pod.CreationTimeStamp并尝试将其存储在变量中。我如何将时间存储到字符串中。

它给出了这个错误:cannot convert pod.ObjectMeta.CreationTimestamp (type "k8s.io/apimachinery/pkg/apis/meta/v1".Time) to type string

0 投票
2 回答
751 浏览

go - 使用 Kubernetes Go 客户端的部署列表的返回类型

当我尝试运行此代码时,它给出了错误:

语法错误:意外文字“k8s.io/api/apps/v1”,预期类型

我想使用 deploymnets 函数返回部署列表。我不知道要使用什么返回类型,以便我成功返回部署列表。