Kubernetes核心原理(四)之Kubelet

摘要:
您可以通过kubelet-help或查看kubernetes源代码来查看此参数。–节点状态更新频率:配置kubelet向主心跳报告的频率。默认值为10s。Kubelet使用WatchAndList通过APIServerClient侦听etcd中/registry/nodes/${current node name}和/registry/pods的目录,并将获取的信息同步到本地缓存。Kubelet监听etcd并对pod执行操作。对容器的操作通过DockerClient执行,例如开始删除容器。Kubelet创建和修改Pod过程:为这个Pod创建一个数据目录。

1. kubelet简介

在kubernetes集群中,每个Node节点都会启动kubelet进程,用来处理Master节点下发到本节点的任务,管理Pod和其中的容器。kubelet会在API Server上注册节点信息,定期向Master汇报节点资源使用情况,并通过cAdvisor监控容器和节点资源。可以把kubelet理解成【Server-Agent】架构中的agent,是Node上的pod管家。

更多kubelet配置参数信息可参考kubelet --help

2. 节点管理

节点通过设置kubelet的启动参数“–register-node”,来决定是否向API Server注册自己,默认为true。可以通过kubelet --help或者查看kubernetes源码【cmd/kubelet/app/server.go中】来查看该参数。

kubelet的配置文件

默认配置文件在/etc/kubernetes/kubelet中,其中

  • –api-servers:用来配置Master节点的IP和端口。
  • –kubeconfig:用来配置kubeconfig的路径,kubeconfig文件常用来指定证书。
  • –hostname-override:用来配置该节点在集群中显示的主机名。
  • –node-status-update-frequency:配置kubelet向Master心跳上报的频率,默认为10s。

3. Pod管理

kubelet有几种方式获取自身Node上所需要运行的Pod清单。但本文只讨论通过API Server监听etcd目录,同步Pod列表的方式。

kubelet通过API Server Client使用WatchAndList的方式监听etcd中/registry/nodes/${当前节点名称}和/registry/pods的目录,将获取的信息同步到本地缓存中。

kubelet监听etcd,执行对Pod的操作,对容器的操作则是通过Docker Client执行,例如启动删除容器等。

kubelet创建和修改Pod流程:

  1. 为该Pod创建一个数据目录。
  2. 从API Server读取该Pod清单。
  3. 为该Pod挂载外部卷(External Volume)
  4. 下载Pod用到的Secret。
  5. 检查运行的Pod,执行Pod中未完成的任务。
  6. 先创建一个Pause容器,该容器接管Pod的网络,再创建其他容器。
  7. Pod中容器的处理流程:
    1)比较容器hash值并做相应处理。
    2)如果容器被终止了且没有指定重启策略,则不做任何处理。
    3)调用Docker Client下载容器镜像,调用Docker Client运行容器。

4. 容器健康检查

Pod通过探针的方式来检查容器的健康状态,具体可参考Pod详解#Pod健康检查

5. cAdvisor资源监控

kubelet通过cAdvisor获取本节点信息及容器的数据。cAdvisor为谷歌开源的容器资源分析工具,默认集成到kubernetes中。

cAdvisor自动采集CPU,内存,文件系统,网络使用情况,容器中运行的进程,默认端口为4194。可以通过Node IP+Port访问。

更多参考:http://github.com/google/cadvisor

参考《Kubernetes权威指南》

https://www.huweihuang.com/article/kubernetes/core-principle/kubernetes-core-principle-kubelet/

免责声明:文章转载自《Kubernetes核心原理(四)之Kubelet》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iOS 代码安全加固--反编译和代码混淆死锁检测下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

手动部署kubernetes(k8s)和利用ansible自动部署k8s

1. 百度网盘链接:含自动部署脚本和手动部署文档 链接:https://pan.baidu.com/s/1xZPbImxCOG6WFMvR0Wua3g 提取码:7y66 2.  1.15版本dashboard是中文版,且应用了ngress-nginx,1.17版本只部署了dashboard,且为英文版本;...

K8S从入门到放弃系列-(8)kube-apiserver 高可用配置

摘要:   前面几篇文章,就是整个的master节点各组件的部署,上面我们提到过,k8s组件中,kube-controller-manager、kube-scheduler及etcd这三个服务高可用,都是通过leader选举模式产生,本章节我们着重介绍下kube-apiserver高可用配置 1、以下操作属于node节点上组件的部署,在master节点上...

实现Mac主机上的Docker容器中的图形界面显示(运行GUI应用)

我有一个需求: 一方面,我需要在 Docker 容器环境下运行应用(因为有些环境在 Mac 下很难安装配置,并且希望环境干净隔离)。 另一方面,容器中的应用又需要进行图形界面的显示。 由于 Docker 容器是命令行的形式,本身不支持图形界面显示,因此我希望 Docker 容器能和我的 Mac 主机上的 GUI 进行连接。 我的 Mac OS X 系统...

.NET Core容器化开发系列(一)——Docker里面跑个.NET Core

前言     博客园中已经有很多如何在Docker里面运行ASP.NET Core的介绍了。本篇主要介绍一些细节,帮助初学的朋友更加深入地理解如何在Docker中运行ASP.NET Core。 安装Docker     Docker现支持在主流Linux、Windows和macOS上安装,官方的安装文档请参考docker docs。鉴于国内的网络环境,...

k8S--05 K8s控制器类型

目录 K8s控制器类型 一、pod控制器 二、ReplicaSet控制器 三、Deployment资源配置清单 四、Service控制器 五、Ingress控制器介绍 1.安装部署traefik 2.创建traefik的web-ui的ingress规则 3.ingress实验 K8s控制器类型 一、pod控制器 0.控制器作用 pod...

深入理解kubernetes(K8s)的Qos, requests和limits

Kubernetes的服务质量保证(QoS) Kubernetes需要整体统筹平台资源使用情况、公平合理的将资源分配给相关pod容器使用,并且要保证容器生命周期内有足够的资源来保证其运行。 与此同时,由于资源发放的独占性,即资源已经分配给了某容器,同样的资源不会在分配给其他容器,对于资源利用率相对较低的容器来说,占用资源却没有实际使用(比如CPU、内存)造...