Ответ здесь: это действительно зависит от контроллера. Например, если вы увидите опции kube-controller-manager , вы увидите, что один двоичный файл включает в себя все эти контроллеры:
attachdetach, bootstrapsigner, cloud-node-lifecycle, clusterrole-aggregation, cronjob, csrapproving, csrcleaner, csrsigning, daemonset, deployment, disruption, endpoint, garbagecollector, horizontalpodautoscaling, job, namespace, nodeipam, nodelifecycle, persistentvolume-binder, persistentvolume-expander, podgc, pv-protection, pvc-protection, replicaset, replicationcontroller, resourcequota, root-ca-cert-publisher, route, service, serviceaccount, serviceaccount-token, statefulset, tokencleaner, ttl, ttl-after-finished
Некоторые из них имеют настраиваемые периоды синхронизации, а некоторые нет (встроены в контроллер). Например, для развертываний:
--deployment-controller-sync-period duration Default: 30s
Как вы, возможно, знаете, то, как работает процесс синхронизации, заключается в том, что сначала контроллер слушает информеры, затем, если есть обновление информера, контроллер помещает обновление в рабочую очередь, а затем процесс синхронизации запускается очень часто. В этом примере , пример контроллера, это время определяется вторым параметром этого вызова :
// time.Second means 1 second
go wait.Until(c.runWorker, time.Second, stopCh)
Until
- это функция API, описанная здесь .
Имейте в виду, что в примере есть нить 2 , что означает, что две операции синхронизации могут выполняться одновременно.