Kubernetes Source Code Overview: Kube-controller-manager
An overview of Kube-controller-manager source code

Kubernetes Source Code Overview: Kube-controller-manager

Kube-controller-manager

Kube-controller-manager is a binary that runs controllers, which are control loops shipped with Kubernetes. Examples of controllers are the Deployment Controller, Service Controller, Job Controller, Namespace Controller, ReplicaSet Controller, Endpoints Controller, and so on.

1. Introduction

This article provides an overview of kube-controller-manager source code in kubernetes/cmd/kube-controller-manager directory, which including parameter parsing and initialization of various types of controllers. For the code in kubernetes/pkg/controller module, a further overview will be provided later.

The code structure of the kube-controller-manager is as follows:


No alt text provided for this image

The following code snippets are based on the Kubernetes v1.24 version.

The source code is at https://github.com/kubernetes/kubernetes/blob/release-1.24/cmd/kube-controller-manager/controller-manager.go


2. Main Function

The main function of kube-controller-manager is very clean.

No alt text provided for this image

3. NewControllerManagerCommand

NewControllerManagerCommand creates a *cobra.Command object with default parameters.

No alt text provided for this image

4. Run

Run runs the kube-controller-manager.

No alt text provided for this image

The core functions are CreateControllerContext, StartControllers and NewControllerInitializers.

4.1 CreateControllerContext

CreateControllerContext creates a context struct containing references to resources needed by the controllers such as the cloud provider and clientBuilder.

No alt text provided for this image

4.2 NewControllerInitializers

NewControllerInitializers is a public map of named controller groups paired to their InitFunc. This allows for structured downstream composition and subdivision.

No alt text provided for this image

NewControllerInitializers

4.3 StartControllers

StartControllers starts a set of controllers with a specified ControllerContext.

No alt text provided for this image

StartControllers

4.4 InitFunc

InitFunc is used to launch a particular controller. It returns a controller that can optionally implement other interfaces so that the controller manager can support the requested features. The bool indicates whether the controller was enabled.


type InitFunc func(ctx context.Context, controllerCtx ControllerContext) (controller controller.Interface, enabled bool, err error)        

5. Some Start Controller Functions

5. 1 startJobController

startJobController creates a new JobController and runs the goroutine responsible for watching and syncing Jobs.

No alt text provided for this image

startJobController

5.2 startDeploymentController

startDeploymentController creates a new DeploymentController and runs the goroutine responsible for watching and syncing Deployments.

No alt text provided for this image

startDeploymentController

5.3 startReplicaSetController

startReplicaSetController configures a new ReplicaSetController and begins watching and syncing ReplicaSets.

No alt text provided for this image

startReplicaSetController

Wrap up

The following diagram shows an overview flow of kube-controller-manager:

No alt text provided for this image

overview flow

Mahesh B.

Sr. Service Delivery Manager Poland

2 年

Congrates..

要查看或添加评论,请登录

Abhishek Shrivastava的更多文章

社区洞察

其他会员也浏览了