网站是用什么做的吗,深圳注册公司网上申请入口,qq网页版在线登录,中国软件园排名前十一、概要kubelet 是运行在每个节点上的主要的“节点代理”#xff0c;每个节点都会启动 kubelet进程#xff0c;用来处理 Master 节点下发到本节点的任务#xff0c;按照 PodSpec 描述来管理Pod 和其中的容器#xff08;PodSpec 是用来描述一个 pod 的 YAML 或者 JSON 对象…一、概要kubelet 是运行在每个节点上的主要的“节点代理”每个节点都会启动 kubelet进程用来处理 Master 节点下发到本节点的任务按照 PodSpec 描述来管理Pod 和其中的容器PodSpec 是用来描述一个 pod 的 YAML 或者 JSON 对象。kubelet 通过各种机制主要通过 apiserver 获取一组 PodSpec 并保证在这些 PodSpec 中描述的容器健康运行。二、kubelet 的主要功能1、kubelet 默认监听四个端口分别为 10250 、10255、10248、4194。LISTEN 0 128 *:10250 *:* users:((kubelet,pid48500,fd28))
LISTEN 0 128 *:10255 *:* users:((kubelet,pid48500,fd26))
LISTEN 0 128 *:4194 *:* users:((kubelet,pid48500,fd13))
LISTEN 0 128 127.0.0.1:10248 *:* users:((kubelet,pid48500,fd23))10250kubelet APIkubelet server 与 apiserver 通信的端口定期请求 apiserver 获取自己所应当处理的任务通过该端口可以访问获取 node 资源以及状态。10248健康检查端口通过访问该端口可以判断 kubelet 是否正常工作, 通过 kubelet 的启动参数 --healthz-port 和 --healthz-bind-address 来指定监听的地址和端口。$ curl http://127.0.0.1:10248/healthzok4194cAdvisor 监听kublet 通过该端口可以获取到该节点的环境信息以及 node 上运行的容器状态等内容访问 http://localhost:4194 可以看到 cAdvisor 的管理界面,通过 kubelet 的启动参数 --cadvisor-port 可以指定启动的端口。$ curl http://127.0.0.1:4194/metrics10255 readonly API提供了 pod 和 node 的信息接口以只读形式暴露出去访问该端口不需要认证和鉴权。// 获取 pod 的接口与 apiserver 的 // http://127.0.0.1:8080/api/v1/pods?fieldSelectorspec.nodeName 接口类似$ curl http://127.0.0.1:10255/pods// 节点信息接口,提供磁盘、网络、CPU、内存等信息$ curl http://127.0.0.1:10255/spec/2、kubelet 主要功能pod 管理kubelet 定期从所监听的数据源获取节点上 pod/container 的期望状态运行什么容器、运行的副本数量、网络或者存储如何配置等等并调用对应的容器平台接口达到这个状态。容器健康检查kubelet 创建了容器之后还要查看容器是否正常运行如果容器运行出错就要根据 pod 设置的重启策略进行处理。容器监控kubelet 会监控所在节点的资源使用情况并定时向 master 报告资源使用数据都是通过 cAdvisor 获取的。知道整个集群所有节点的资源情况对于 pod 的调度和正常运行至关重要。三、kubelet 组件中的模块上图展示了 kubelet 组件中的模块以及模块间的划分。1、PLEG(Pod Lifecycle Event Generator PLEG 是 kubelet 的核心模块,PLEG 会一直调用 container runtime 获取本节点 containers/sandboxes 的信息并与自身维护的 pods cache 信息进行对比生成对应的 PodLifecycleEvent然后输出到 eventChannel 中通过 eventChannel 发送到 kubelet syncLoop 进行消费然后由 kubelet syncPod 来触发 pod 同步处理过程最终达到用户的期望状态。2、cAdvisor cAdvisorhttps://github.com/google/cadvisor是 google 开发的容器监控工具集成在 kubelet 中起到收集本节点和容器的监控信息大部分公司对容器的监控数据都是从 cAdvisor 中获取的 cAvisor 模块对外提供了 interface 接口该接口也被 imageManagerOOMWatchercontainerManager 等所使用。3、OOMWatcher 系统 OOM 的监听器会与 cadvisor 模块之间建立 SystemOOM,通过 Watch方式从 cadvisor 那里收到的 OOM 信号并产生相关事件。4、probeManager probeManager 依赖于 statusManager,livenessManager,containerRefManager会定时去监控 pod 中容器的健康状况当前支持两种类型的探针livenessProbe 和readinessProbe。 livenessProbe用于判断容器是否存活如果探测失败kubelet 会 kill 掉该容器并根据容器的重启策略做相应的处理。 readinessProbe用于判断容器是否启动完成将探测成功的容器加入到该 pod 所在 service 的 endpoints 中反之则移除。readinessProbe 和 livenessProbe 有三种实现方式http、tcp 以及 cmd。5、statusManager statusManager 负责维护状态信息并把 pod 状态更新到 apiserver但是它并不负责监控 pod 状态的变化而是提供对应的接口供其他组件调用比如 probeManager。6、containerRefManager 容器引用的管理相对简单的Manager用来报告容器的创建失败等事件通过定义 map 来实现了 containerID 与 v1.ObjectReferece 容器引用的映射。7、evictionManager 当节点的内存、磁盘或 inode 等资源不足时达到了配置的 evict 策略 node 会变为 pressure 状态此时 kubelet 会按照 qosClass 顺序来驱赶 pod以此来保证节点的稳定性。可以通过配置 kubelet 启动参数 --eviction-hard 来决定 evict 的策略值。8、imageGC imageGC 负责 node 节点的镜像回收当本地的存放镜像的本地磁盘空间达到某阈值的时候会触发镜像的回收删除掉不被 pod 所使用的镜像回收镜像的阈值可以通过 kubelet 的启动参数 --image-gc-high-threshold 和 --image-gc-low-threshold 来设置。9、containerGC containerGC 负责清理 node 节点上已消亡的 container具体的 GC 操作由runtime 来实现。10、imageManager 调用 kubecontainer 提供的PullImage/GetImageRef/ListImages/RemoveImage/ImageStates 方法来保证pod 运行所需要的镜像。11、volumeManager 负责 node 节点上 pod 所使用 volume 的管理volume 与 pod 的生命周期关联负责 pod 创建删除过程中 volume 的 mount/umount/attach/detach 流程kubernetes 采用 volume Plugins 的方式实现存储卷的挂载等操作内置几十种存储插件。12、containerManager 负责 node 节点上运行的容器的 cgroup 配置信息kubelet 启动参数如果指定 --cgroups-per-qos 的时候kubelet 会启动 goroutine 来周期性的更新 pod 的 cgroup 信息维护其正确性该参数默认为 true实现了 pod 的Guaranteed/BestEffort/Burstable 三种级别的 Qos。13、runtimeManager containerRuntime 负责 kubelet 与不同的 runtime 实现进行对接实现对于底层 container 的操作初始化之后得到的 runtime 实例将会被之前描述的组件所使用。可以通过 kubelet 的启动参数 --container-runtime 来定义是使用docker 还是 rkt默认是 docker。14、podManager podManager 提供了接口来存储和访问 pod 的信息维持 static pod 和 mirror pods 的关系podManager 会被statusManager/volumeManager/runtimeManager 所调用podManager 的接口处理流程里面会调用 secretManager 以及 configMapManager。在 v1.12 中kubelet 组件有18个 managercertificateManager
cgroupManager
containerManager
cpuManager
nodeContainerManager
configmapManager
containerReferenceManager
evictionManager
nvidiaGpuManager
imageGCManager
kuberuntimeManager
hostportManager
podManager
proberManager
secretManager
statusManager
volumeManager
tokenManager其中比较重要的模块后面会进行一一分析。参考微软资深工程师详解 K8S 容器运行时 kubernetes 简介 kubelet 和 pod Kubelet 组件解析