k8s:kubelet

kubelet通过以下方式获取自身node上要运行的pod清单:

1、静态pod
从yaml直接生成,而没有通过控制器管理的pod成为静态pod,kebelet会持续监控yaml文件,如果yaml文件有变化,kubelet会执行对应的变化。
--file-check-frequency 设置检查该目录的时间间隔

2、HTTP端点
通过 --mainfest-url参数设置,通过--http-check-frequency设置检查该HTTP端点数据的时间间隔,默认20s

3、监听api。
kubelet读取到监听信息,如果是创建和修改pod的任务,则做如下处理
1)为pod创建一个数据目录
2)从api读取pod清单
3)为该pod挂载外部卷
4)下载pod用到的Secret
5)检查节点上已运行pod,如果没有容器或者pause容器没启动,则停止pod里所有容器进程,若要删除,则删除这些容器。
6)为pod创建pause容器,pause容器用于接管pod中的网络
7)pod中每个容器做如下处理
7.1 计算容器哈希值,然后用容器的名称查询对应docker容器的哈希值,若找到容器,且哈希值不同,则停止docker容器中的进程,且停止pause容器进程,哈希值相同则不做任何处理。
7.2 如果容器被终止,会根据restartPolicy做处理,没设置restartPolicy则不做任何处理。
7.3 调用docker client下载镜像,调用docker client运行容器。

容器健康检查

LivenessProbe
探测容器不健康,则删除容器,然后根据restartPolicy做相应处理;
如果没有LivenessProbe,kubelet认为LivenessProbe返回的永远是true;

三种探针
execAction:运行命令,返回0代表OK
TCPSocketAction:对IP 端口进行TCP检查
HTTPGetAction:通过ip 端口 路径调用HTTP Get方法, 200<=状态码<=400代表OK

RedinessProbe
探测失败,pod状态会被修改;
endpoint controller将从service的endpoint中删除该容器的IP;

监控
cAdvisor + Heapster
metric server

原文作者:大鹏SP
版权声明:本文采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,转载请标明作者及原文链接。
原文地址:https://www.cnblogs.com/sunpong/p/14991086.html