}
glog.Info(“worker已经启动”)
<-stopCh
glog.Info(“worker已经结束”)
return nil
}
func (c *Controller) runWorker() {
for c.processNextWorkItem() {
}
}
// 取数据处理
func (c *Controller) processNextWorkItem() bool {
obj, shutdown := c.workqueue.Get()
if shutdown {
return false
}
// We wrap this block in a func so we can defer c.workqueue.Done.
err := func(obj interface{}) error {
defer c.workqueue.Done(obj)
var key string
var ok bool
if key, ok = obj.(string); !ok {
c.workqueue.Forget(obj)
runtime.HandleError(fmt.Errorf(“expected string in workqueue but got %#v”, obj))
return nil
}
// 在syncHandler中处理业务
if err := c.syncHandler(key); err != nil {
return fmt.Errorf(“error syncing ‘%s’: %s”, key, err.Error())
}
c.workqueue.Forget(obj)
glog.Infof(“Successfully synced ‘%s’”, key)
return nil
}(obj)
if err != nil {
runtime.HandleError(err)
return true
}
return true
}
// 处理
func (c *Controller) syncHandler(key string) error {
// Convert the namespace/name string into a distinct namespace and name
namespace, name, err := cache.SplitMetaNamespaceKey(key)
if err != nil {
runtime.HandleError(fmt.Errorf(“invalid resource key: %s”, key))
return nil
}
// 从缓存中取对象
student, err := c.studentsLister.Students(namespace).Get(name)
if err != nil {
// 如果Student对象被删除了,就会走到这里,所以应该在这里加入执行
if errors.IsNotFound(err) {
glog.Infof(“Student对象被删除,请在这里执行实际的删除业务: %s/%s …”, namespace, name)
return nil
}
runtime.HandleError(fmt.Errorf(“failed to list student by: %s/%s”, namespace, name))
return err
}
glog.Infof(“这里是student对象的期望状态: %#v …”, student)
glog.Infof(“实际状态是从业务层面得到的,此处应该去的实际状态,与期望状态做对比,并根据差异做出响应(新增或者删除)”)
c.recorder.Event(student, corev1.EventTypeN

最低0.47元/天 解锁文章
433

被折叠的 条评论
为什么被折叠?



