Kubernetes Source Code Overview: kubelet
kubelet
The kubelet is the primary “node agent” that runs on each node in the cluster. It makes sure that containers are running in a Pod. The kubelet works in terms of a PodSpec. A PodSpec is a YAML or JSON object that describes a pod. The kubelet takes a set of PodSpecs and ensures that the containers described in those PodSpecs are running and healthy.
1. Introduction
This article provides an overview of kubelet source code in the kubernetes/cmd/kubelet
directory, including parameter parsing and dependencies (in the kubeDeps structure). For the code in kubernetes/pkg/kublete
module, a further overview will be provided later.
The code structure of kubelet is as follows:
The following code snippets are based on the Kubernetes v1.24 version.
The source code is at https://github.com/kubernetes/kubernetes/tree/release-1.24/cmd/kubelet
2. Main Function
The main function creates a NewKubeletCommand and runs the kubelet.
3. NewKubeletCommand
NewKubeletCommand creates a *cobra.Command object with default parameters.
3.1 KubeletServer
KubeletServer encapsulates all of the parameters necessary for starting up a kubelet.
Construct a KubeletServer from kubeletFlags and kubeletConfig:
kubeletServer := &options.KubeletServer{
KubeletFlags: *kubeletFlags,
KubeletConfiguration: *kubeletConfig,
}
3.2 kubeletDeps
KubeletDeps is a bin for things that are necessary for running the Kubelet.
Use kubeletServer to construct the default KubeletDeps:
kubeletDeps, err := UnsecuredDependencies(kubeletServer, utilfeature.DefaultFeatureGate)
if err != nil {
return fmt.Errorf("failed to construct kubelet dependencies: %w", err)
}
4. Run
Run runs the specified KubeletServer with the given Dependencies. This should never exit.
4.1 Initialize kubeDeps.KubeClient
Initialize kubeDeps.KubeClient, and make other two separate clients, kubeDeps.EventClient for events, and kubeDeps.HeartbeatClient for heartbeat.
4.2 Start healthz server
If the healthzPort is specified, start a healthz server. The healthzPort is the port of the localhost healthz endpoint (set to 0 to disable).
5. RunKubelet
RunKubelet is responsible for setting up and running a kubelet.
5.1 startKubelet
startKubelet start the kubelet and the kubelet HTTP server.
5.2 k.Run
go k.Run(podCfg.Updates())
k.Run starts the kubelet reacting to config updates. It runs the code in kubernetes/pkg/kublete
module.
A further overview of the code will be provided later.
Wrap Up
The following diagram shows an overview of kubelet’s start flow:
Reference