kubelet

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
+--------------------------------------------------------+       
| +---------------------+ +---------------------+ |
| | kubelet | | kube-proxy | |
| | | | | |
| +---------------------+ +---------------------+ |
| +----------------------------------------------------+ |
| | Container Runtime (Docker) | |
| | +---------------------+ +---------------------+ | |
| | |Pod | |Pod | | |
| | | +-----+ +-----+ | |+-----++-----++-----+| | |
| | | |C1 | |C2 | | ||C1 ||C2 ||C3 || | |
| | | | | | | | || || || || | |
| | | +-----+ +-----+ | |+-----++-----++-----+| | |
| | +---------------------+ +---------------------+ | |
| +----------------------------------------------------+ |
+--------------------------------------------------------+

节点管理

执行 kubelet --help 的时候,会看到它所支持的可配置参数,其中有一个 --register-node 参数便是用于控制是否向 kube-apiserver 注册节点的,默认是开启的
当 kubeadm join 执行成功后,便可以通过 kubectl get node 查看到新加入集群中的 Node

在节点上通过以下命令查看 kubelet 的状态:

1
systemctl status kubelet

查看 Node 信息:

1
kubectl get nodes | awk '{if(NR>1)print}'| awk {'print $1'} | xargs -I {} kubectl get nodes {} -o yaml

查看配置文件:

1
cat /var/lib/kubelet/config.yaml

配置说明:
https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/

1
2
3
4
maxPods:最大的 Pod 数
healthzBindAddress 和 healthzPort:配置了健康检查所监听的地址和端口
authentication 和 authorization :认证授权相关
evictionHard:涉及到 kubelet 的驱逐策略,对 Pod 调度分配之类的影响很大

验证方式:

1
curl 127.0.0.1:10248/healthz

Pod 管理

kube-scheduler 处理了 Pod 应该调度至哪个 Node,而 kubelet 则是保障该 Pod 能按照预期,在对应 Node 上启动并保持工作
另外 kubelet 其实还承担着清理 Node 上一些由 K8S 调度 Pod 所造成的磁盘占用之类的工作
kubelet 在保障 Pod 能按预期工作,主要是做了两方面的事情:

健康检查:通过 LivenessProbe 和 ReadinessProbe 探针进行检查,判断是否健康及是否已经准备好接受请求。
资源监控:通过 cAdvisor 进行资源监控

kubelet 的作用之一是负责镜像拉取,在镜像方面的错误主要预设了 6 种:

1
2
3
4
5
6
ImagePullBackOff
ImageInspectError
ErrImagePull
ErrImageNeverPull
RegistryUnavailable
InvalidImageName