Kubelet

The kubelet binary is reponsible for maintaining a set of containers on a particular host VM.
It syncs data from both configuration file(s) as well as from a quorum of etcd servers.

It then queries Docker to see what is currently running. It synchronizes the configuration data, with the running set of containers by starting or stopping Docker containers.

Kubelet 首先获取赋给某个 node 上的 Pod 配置,然后调用底层的 container runtime 创建 Pod。

Kubelet 监控 Pod,确保 node 上所有的 Pod 运行在期望的状态。

获取 Pod 配置

Kubelet 能狗以多种方式获取赋给 node 上的 Pod 配置,最重要的方式是 Apiserver。

Kubelet服务启动流程


cmd/kubelet/kubelet.go

main

command.Execute()

    ... -> server.go Run

cmd/kubelet/app/server.go

Run

run

https://toutiao.io/posts/z2e88b/preview Kubelet 源码剖析 包括Kubelet服务启动流程和Pod创建流程两个时序图

CRI


kubelet 调用下层 container runtime 时,并不会直接调用 Docker API,而是通过 CRI 的 gRPC 接口间接执行的。

CRI 抽象层,主要是为了 Kubernetes 屏蔽下层 container runtime 的差异。

dockershim 及其它 container runtime 的 CRI shim,都可能需要额外部署在宿主机上。

你可能感兴趣的:(Kubelet)