问题标签 [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.
go - 如何使用 kubernetes go-client 获取与 kubectl 相同的 Pod 状态信息
使用 kubernetes go-client ( k8s.io/client-go/kubernetes
),我知道如何获取pod.Status
并且发现pod.Status.Phase
有用 ( docs )。例如,我可以使用以下命令输出所有 Pod 的 Pod 状态阶段:
但是,phase
它有点简单,因为它只显示 5 个值(Pending
、Running
、Succeeded
、Failed
、Unknown
)。我宁愿获得与kubectl get pods
Status 列中相同的信息,例如:
Init:0/1
特别是,我对PodInitializing
状态感兴趣。处于这些状态的 Pod 在使用 时只会显示为“Pending” pod.Status.Phase
。
Init:0/1
表示 Pod 有 1 个 Init 容器,到目前为止 0 个已成功完成。init 容器在应用容器启动之前运行。PodInitializing
表示 Pod 已经完成了 Init Containers 的执行。
有没有办法获得状态,例如Init:0/1
using k8s.io/client-go/kubernetes
?还是没有捷径,我需要像 kubectl 一样重新计算它?我猜它使用 Pod 状态条件和容器状态来构建信息。如果我需要重新计算它,也许我可以使用kubectl 源代码?有谁知道我在哪里可以找到相关位?(我的golang经验非常有限)
go - 使用 Kubernetes go-client 向 Pod 添加标签的最短方法是什么
我有一个演示 golang 程序来列出没有特定标签的 Pod。我想对其进行修改,以便它也可以为每个 pod 添加一个标签。
(我使用的是 AWS 托管的 Kubernetes 服务 EKS,所以有一些特定于 EKS 的样板代码)
我知道 kubectl 可以用来添加标签,例如
我希望通过 go-client 有一个等效的方法?
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 found
或
resourcequotas "limits.cpu" not found
也试过ns, err := k8client.CoreV1().ResourceQuotas("my-namespace-name").List(metav1.ListOptions{})
了,但没有返回结果。
任何关于如何获得它的想法将不胜感激!
kubernetes - 如何让运行在 pod 中的代码知道它的 pod 名称
我有一些在 pod 内运行的 go 程序。我将如何编写代码以使用 go-client 库让它知道其 pod 名称?
kubernetes - Kubernetes API 调用是否是秘密更新和 configmap 更新原子调用?
client.Secrets(namespace).Update(secret) 是原子调用吗?如果此调用以某种方式失败,存储在 Kubernetes API 服务器中的原始机密是否会损坏?
同样, core.ConfigMaps(namespace).Update(configmap) 是原子调用吗?如果此调用失败,现有的 configmap 是否会损坏?
kubernetes - Kubernetes client-go:watch.Interface vs. cache.NewInformer vs. cache.NewSharedIndexInformer?
我需要我的 Go 应用程序来监控 Kubernetes 集群中的一些资源并对它们的变化做出反应。基于大量文章和示例,我似乎找到了一些方法来做到这一点;但是,我对 Kubernetes 比较陌生,而且它们的描述对我来说太复杂了,以至于我仍然无法掌握它们之间的区别——因此,要知道使用哪一个,所以我不要出现一些意想不到的行为......特别是:
watch.Interface.ResultChan()
—(通过 eg 获得rest.Request.Watch()
)— 这似乎已经让我通过提供 // 事件来对资源发生的变化做出Added
反应;Modified
Deleted
cache.NewInformer()
— 当我实现 a 时cache.ResourceEventHandler
,我可以将它作为最后一个参数传递:— 然后,该
myHandler
对象将接收//OnAdd()
调用。OnUpdate()
OnDelete()
对我来说,这似乎或多或少等同于
ResultChan
我在上面的(1.)中得到的;一个区别是,显然现在我得到了资源的“之前”状态作为奖励,而ResultChan
我只会得到它的“之后”状态。另外,IIUC,这实际上是建立在
watch.Interface
上面提到的(通过NewListWatchFromClient
)之上的——所以我想它带来了一些价值,和/或修复了 raw 的一些(什么?)缺陷watch.Interface
?cache.NewSharedInformer()
并且cache.NewSharedIndexInformer()
—— (呃哇,现在这些都是满口的......)我试图深入研究 godocs,但我觉得完全被我不理解的术语所淹没,以至于我似乎无法掌握其中的微妙之处(?)“常规”NewInformer
与...之间的差异NewSharedInformer
。NewSharedIndexInformer
有人可以帮我理解Kubernetes client-go 包中上述 API 之间的区别吗?
go - 无法在 Kubernetes Go 客户端中覆盖 Kubernetes 配置
我想使用 Kubernetes Go 客户端在集群中执行各种操作。我正在加载kubeconfig
包含多个集群和上下文的本地。默认上下文是prod
,我要覆盖的配置值之一是CurrentContext
当我检查RawConfig()
当前上下文时仍然是“prod”而不是“stage”。为什么配置覆盖不起作用?
另外 AuthInfo 等的覆盖是如何工作的?覆盖只接受一个AuthInfo
,而配置包含一个AuthInfo
等的映射。
GitHub 相关问题https://github.com/kubernetes/client-go/issues/735
go - 将 CreationTimeStamp 类型转换为字符串
我正在获取时间pod.CreationTimeStamp
并尝试将其存储在变量中。我如何将时间存储到字符串中。
它给出了这个错误:cannot convert pod.ObjectMeta.CreationTimestamp (type "k8s.io/apimachinery/pkg/apis/meta/v1".Time) to type string
go - 使用 Kubernetes Go 客户端的部署列表的返回类型
当我尝试运行此代码时,它给出了错误:
语法错误:意外文字“k8s.io/api/apps/v1”,预期类型
我想使用 deploymnets 函数返回部署列表。我不知道要使用什么返回类型,以便我成功返回部署列表。