几年前,我写了一个设备插件,它对英特尔QAT设备的AllocateRequests做出React。直到最近,pod都是在kubevirt下运行的。当租户部署时,AllocateRequest到达插件,插件按预期React。当主机重新引导正在运行的使用QAT资源的pod时,pod会在新的AllocateRequest到达插件后重新启动。
这个插件的一个困难是,我们必须尝试找出哪个pod负责发送AllocateRequest。我们需要这个,这样我们就可以做其他与pod+QAT设备相关的内务处理。我们有一个confd端,它告诉我们pod名称和部署状态(部署,配置),插件监视confd以查找从配置到部署的pod,并将其与AllocateRequest匹配。到目前为止,这一切都很顺利。
但是现在我们已经在我们的平台上添加了对非kubevirt pod的支持,当非kubevirt pod由于非QAT相关的错误而重新部署时,它们并不总是告诉我们的confd接口。这将导致一个AllocateRequest到达我们的confd接口指示已经部署的pod的插件。由于我们可以部署0到128个pod,因此很难确定AllocateRequest属于谁。
我的第一React是试图找到一种方法,让k8告诉我分配给pod的资源id。我添加了告密者工厂等,以及以下回调:
func AddPod(obj interface{}) {
pod := obj.(*v1.Pod)
fmt.Println("Pod all: ", pod)
}
我可以看到pod何时部署,以及pod何时生成新的AllocateRequest。我在输出中看到了QAT引用,但没有资源ID。由上面的AddPod()生成的消息的QAT部分看起来像:
xx.com/qat: {{15 0} {<nil>" 15 DecimalSI},
QAT设备计数为15是正确的,但没有资源ID.我还需要知道一个新的bug短列表的资源ID,所有这些bug都与获得一个AllocateRequest有关,我无法与导致它发生的pod匹配。
以下是我的问题:
1.有没有一种方法可以使用informer或类似informer的东西来显示分配给pod的资源ID?
1.由于这些资源标识分配似乎在重新引导后被k8记住,k8是如何序列化它们的?
1.我可以在k8s日志中的任何地方获得资源ID分配吗?
谢谢你,
- 唐纳德
1条答案
按热度按时间hzbexzde1#
根据所提供的所有信息,提供有关您查询的信息,
1.I有没有办法使用informer或类似informer的东西来显示分配给pod的资源ID?
不幸的是,通知者将无法做到这一点,因为Kubernetes API服务器将只提供分配的资源数量,而不是特定的资源ID。
1.由于这些资源ID分配似乎在重新引导后被k8s记住,k8s如何序列化它们?
重新启动后,Kubernetes不会记住您分配的特定设备。相反,kubelet在重启时看到pod分配,然后为这些设备发送新的Allocate请求。设备插件和kubelet确保正确的资源分配,但特定的序列化不会暴露在kubelet之外。
1.我可以在k8s日志中的任何地方获得资源ID分配吗?
尝试增加日志记录的详细程度,因为它可以捕获分配的确切细节。它可能会出现在日志中,具体取决于设备插件和kubelet的交互方式。
附件是一些对您的用例有用的链接。[1][2]
[1][https://kubernetes.io/docs/concepts/cluster-administration/logging/](https://kubernetes.io/docs/concepts/cluster-administration/logging/)
[2]https://pkg.go.dev/k8s.io/[email protected]/tools/cache
[3][https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/](https://kubernetes.io/docs/concepts/extend-kubernetes/compute-storage-net/device-plugins/)