Kubernetes控制器/操作员是开发Kubernetes应用程序的模式之一。运行的核心Kubernetes进程之一是控制器协调循环。
我想知道调用或触发重新调用循环的默认时间间隔是多少?
如果控制器没有捕获事件,是否可以修改此间隔以触发重新循环?
这里的答案是:它真的取决于控制器。例如,如果你看到kube-controller-manager options,你会看到单个二进制文件包含所有这些控制器:
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
您可能知道,同步过程的工作方式是控制器首先监听通知,然后如果在通知器上有更新,则控制器将更新放入工作队列,然后同步过程会频繁启动。在this example,一个样本控制器,该时间由这个call的第二个参数决定:
// time.Second means 1 second
go wait.Until(c.runWorker, time.Second, stopCh)
Until
是一种描述here的api-machinery功能。
请记住,该示例具有2的线程,这意味着两个同步操作可以同时发生。