GoLang -如何获得Kubernetes修改



我是golang的新手,我有以下要求:

  1. 我有一个使用图像nginx:latest运行的部署
  2. 然后手动更新此图像到其他内容(例如:nginx:1.22)
  3. 我需要得到旧的图像版本和新的图像版本

所以,我研究了"共享信息者"。在Go Lang。我这样写:


func main() {
. . . 
// create shared informers for resources in all known API group versions with a reSync period and namespace
factory := informers.NewSharedInformerFactoryWithOptions(clientSet, 1*time.Hour, informers.WithNamespace(namespace_to_watch))
podInformer := factory.Core().V1().Pods().Informer()
defer runtime.HandleCrash()
// start informer ->
go factory.Start(stopper)
// start to sync and call list
if !cache.WaitForCacheSync(stopper, podInformer.HasSynced) {
runtime.HandleError(fmt.Errorf("Timed out waiting for caches to sync"))
return
}
podInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc:    onAdd, // register add eventhandler
UpdateFunc: onUpdate,
DeleteFunc: onDelete,
})
}
func onUpdate(oldObj interface{}, newObj interface{}) {
oldPod := oldObj.(*corev1.Pod)
newPod := newObj.(*corev1.Pod)
for container_old := range oldPod.Spec.Containers {
fmt.Printf("Container Old :%s", container_old.Image )
}
for container_new := range newPod.Spec.Containers {
fmt.Printf("Container New :%s", container_new.Image )
}

}

如上所述,根据onUpdate函数,我应该获得两个值,相反,我在每次更新中获得相同的值,如下所示:

Container Old: nginx:latest

Container New: nginx:latest

Container Old: nginx:1.22

Container New: nginx:1.22

Container Old: nginx:1.22

Container New: nginx:1.22

上面的输出是因为不知何故,onUpdate函数被触发了三次,但是正如您所看到的,在所有的时间里,值都是相同的(对于每个输出)。但我期待的是下面这样的内容:

Container Old: nginx:latest

Container New: nginx:1.22

有人能帮我一下吗?

在部署中更新映像时,将使用新的映像容器重新启动pod,并且不会留下旧的pod规范的痕迹。您应该观察部署而不是pod,并检查旧部署和新部署对象之间的映像。下面是一个如何修改onUpdate方法的示例。

func onUpdate(oldObj interface{}, newObj interface{}) {
oldDepl := oldObj.(*v1.Deployment)
newDepl := newObj.(*v1.Deployment)
for oldContainerID := range oldDepl.Spec.Template.Spec.Containers {
for newContainerID := range newDepl.Spec.Template.Spec.Containers {
if oldDepl.Spec.Template.Spec.Containers[oldContainerID].Name == newDepl.Spec.Template.Spec.Containers[newContainerID].Name {
if oldDepl.Spec.Template.Spec.Containers[oldContainerID].Image != newDepl.Spec.Template.Spec.Containers[newContainerID].Image {
fmt.Printf("CONTAINER IMAGE UPDATED FROM %s to %s",
oldDepl.Spec.Template.Spec.Containers[oldContainerID].Image, newDepl.Spec.Template.Spec.Containers[newContainerID].Image)
}
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新