【k8s读书笔记】Kubelet - 1
Kubelet一般是从API Server获取Pod清单(manifest),但也可以从指定目录获取Pod清单来运行Pod。
-
相关参数:
--config=/path/to/kubelet-config.yaml -
在该配置文件中定义配置项
staticPodPath: "/tmp/test_pod.yaml" -
测试用配置文件
apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration address: "192.168.0.8" port: 20250 serializeImagePulls: false evictionHard: memory.available: "200Mi" staticPodPath: "/tmp/test_pod.yaml"
控制平面的组件正是利用该特性以Pod的形式来运行的。
控制平面的组件包括:
- etcd
- API Server
- Scheduler
- Controller Manager
在minikube中,以上组件运行在命名空间kube-system中。
➜ ~ kubectl get node
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 26h v1.27.4
➜ ~ kubectl get ns
NAME STATUS AGE
default Active 28h
kube-node-lease Active 28h
kube-public Active 28h
kube-system Active 28h
➜ ~ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-5d78c9869d-wqzs2 1/1 Running 0 28h
etcd-minikube 1/1 Running 0 28h
kube-apiserver-minikube 1/1 Running 0 28h
kube-controller-manager-minikube 1/1 Running 0 28h
kube-proxy-gbg2z 1/1 Running 0 28h
kube-scheduler-minikube 1/1 Running 0 28h
storage-provisioner 1/1 Running 1 (28h ago) 28h
**“来”**字表示被动
- 尔大哥长枪来刺坏
- 控制平面的组件正是利用该特性以pod的形式来运行的。 = ……作为pod运行的。
相关代码
kubelet命令相关的代码在 kubernetes/cmd/kubelet/kubelet.go- 在文件 kubernetes/cmd/kubelet/app/server.go 中
- 在构造
*cobra.Command类型的变量时,定义了回调函数RunE: func(cmd *cobra.Command, args []string) error {。该函数会调用Run()函数,Run()又会调用小写字母开头的run()。 run()中调用了RunKubelet(),后者又继续调用createAndInitKubelet()createAndInitKubelet()返回的类型为type kubelet.Bootstrap interface
- 在构造
- 至此,开始执行kubernetes/pkg/kubelet中的代码
// Bootstrap is a bootstrapping interface for kubelet, targets the initialization protocol
type Bootstrap interface {
GetConfiguration() kubeletconfiginternal.KubeletConfiguration
BirthCry()
StartGarbageCollection()
ListenAndServe(kubeCfg *kubeletconfiginternal.KubeletConfiguration, tlsOptions *server.TLSOptions, auth server.AuthInterface, tp trace.TracerProvider)
ListenAndServeReadOnly(address net.IP, port uint)
ListenAndServePodResources()
Run(<-chan kubetypes.PodUpdate)
RunOnce(<-chan kubetypes.PodUpdate) ([]RunPodResult, error)
}
Bootstrap定义了kubelet server的行为,可以仅运行一次(RunOnce()),也可以监听Pod资源的变化(ListenAndServePodResources())- 该接口的唯一实现是
type Kubelet struct struct Kubelet上的func (kl *Kubelet) HandleXXX系列函数用于实际处理Pod(与podManager: kubepod.Manager和podWorkers PodWorkers联动)