kubernetes之kubelet运行机制分析
kubernetes集群中,每个Node节点工作节点上都会启动一个kubelet服务进程。用于处理master节点下发到本节点的任务,管理pod和pod中的容器。每个kubelet进程都会在API Server上注册节点自身信息,定期汇报节点资源使用情况,通过cAdvisor监控容器和节点资源。
1.1 节点管理
节点通过设置kubelet启动参数“--register-node”来决定是否向API Server注册自己。
kubelet默认10秒报告一次节点状态。
1.2 pod管理
kubelet通过以下几种方式获取自身NOde所有运行的pod清单。
(1)文件
kubelet启动参数--config指定配置文件目录下的文件(默认是/etc/kubernetes/manifests/)通过--file-check-frequency设置检查该文件目录的时间间隔。默认为20s
(2)HTTP端点(URL)
通过--manifest-url参数设置。通过--http-check-frequency设置检查该HTTP端点数据的时间间隔。默认为20s
(3)API Server
通过API Server监听etcd目录,同步pod列表
如果kubelet读取监听到的信息是创建和修改pod任务做如下处理
1、为该pod创建一个数据目录
2、从API Server读取该pod清单
3、为该pod挂在外部卷
4、下载pod用到的Secret
5、检查已经运行在节点中的pod,如果pod没有容器或pause容器没有启动,则会停止pod里所有容器的进程。如果在pod中有需要删除的容器,删除这些容器
6、用kubernetes/pause镜像为每个pod创建一个容器。该pause容器用于接管pod中所有其他容器的网络。每创建一个新pod,先创建一个pause容器,然后创建其他容器。
7、为pod中每个容器做如下处理
计算hash值,用容器名字查询对应docker容器hash之,如果找到容器,hash值不同,则停止docker中容器进程,并停止与之关联的pause容器的进程。若相同,不做处理。
如果容器被终止了,没有指定restartPolicy,不做任何处理
调用docker client下载容器经,调用docker client运行容器。
1、3 容器健康检查
通过两类探针来检查容器健康状态。
一个是LivenessProbe探针,用于判断容器是否健康。如果不健康kubelet删除该容器,并根据重启策略做相应处理。如果没有设置livenessProbe,认为返回的值用为是Success
一个是ReadnessProbe探针,用于判断容器是否启动完成,且准备接受请求。如果检查失败,pod状态将被修改。
LivenessProbe包含三种实现方式
1、ExecAction:在容器内部执行一个命令,如果该命令退出状态码为0,表示健康
2、TCPSocketAction:通过容器的IP地址和端口号指定TCP检查,如果端口能被访问,表示健康。
3、HTTPGetAction: 通过容器的IP地址和端口号以及路径调用HTTP Get方法,如果响应码大于等于200且小于等于400,表示健康。
1.4 cAdvisor资源监控
kubernetes之kubelet运行机制分析的更多相关文章
- kubernetes之kube-proxy运行机制分析
在kubernetes集群的每个node都会运行一个kube-proxy服务进程,这个进程可用看作Service的透明代理兼负载均衡器.其核心功能是将到某个Service的访问请求转发到后端的多个po ...
- 《Kubernetes权威指南》——Kubelet运行机制与安全机制
1 Kubelet运行机制 Kubenetes集群中的每个Node节点都会启动一个Kubelet服务进程用于处理Master下发到该节点的任务,管理Pod及其中的容器 Kubelet进程在API Se ...
- abp运行机制分析
abp运行流程 由于公司现在大量向abp框架+react前后端分离架构转型,所以有必要分析abp框架是如何在iis运行的,所以才有这篇文章 public class MvcApplication : ...
- kube-proxy运行机制分析【转载】
转自:http://blog.itpub.net/28624388/viewspace-2155433/ 1.Service在很多情况下只是一个概念,而真正将Service的作用实现的是kube-pr ...
- ActiveSupport::Concern 和 gem 'name_of_person'(300✨) 的内部运行机制分析
理解ActiveRecord::Concern: 参考:include和extend的区别: https://www.cnblogs.com/chentianwei/p/9408963.html 传统 ...
- kubernetes/k8s CRI分析-kubelet创建pod分析
先来简单回顾上一篇博客<kubernetes/k8s CRI 分析-容器运行时接口分析>的内容. 上篇博文先对 CRI 做了介绍,然后对 kubelet CRI 相关源码包括 kubele ...
- kubernetes/k8s CRI分析-kubelet删除pod分析
关联博客<kubernetes/k8s CRI 分析-容器运行时接口分析> <kubernetes/k8s CRI分析-kubelet创建pod分析> 之前的博文先对 CRI ...
- ASP.NET MVC的运行机制--url的全局分析
全局 首先我们来看一副图片 首先,用户通过Web浏览器向服务器发送一条url请求,这里请求的url不再是xxx.aspx格式,而是http://HostName/ControllerNam ...
- .net core系列之《从源码对Configuration的底层运行机制进行分析》
通过对Configuration源代码的分析从而来自定义一个配置数据源 1.用反编译工具来看看AddJsonFile()这个方法究竟干了什么,源代码如下: public static IConfigu ...
随机推荐
- canvas详解---矩形绘制
首先,就上述绘制弧线的章节进行一个小小的补充: 如果我们使用了context.beginPath();紧接着后面的context.moveTo(x,y),可以改为context.lineTo(x,y) ...
- 如何开发一个异常检测系统:使用什么特征变量(features)来构建异常检测算法
如何构建与选择异常检测算法中的features 如果我的feature像图1所示的那样的正态分布图的话,我们可以很高兴地将它送入异常检测系统中去构建算法. 如果我的feature像图2那样不是正态分布 ...
- Game-Based Learning Is Changing How We Teach. Here's Why.
https://www.edsurge.com/news/2019-02-04-game-based-learning-is-changing-how-we-teach-here-s-why This ...
- 使用VSCode开发Flutter
前言 为什么使用VSCode? flutter官方推荐的编辑器有IDEA/Android Studio和VSCode, 之前开发Flutter用的IDEA, 不过IDEA始终比较重,于是换用VSCod ...
- yolov3
YOLOv3没有太多的创新,主要是借鉴一些好的方案融合到YOLO里面.不过效果还是不错的,在保持速度优势的前提下,提升了预测精度,尤其是加强了对小物体的识别能力(yolov1在这方面是有缺陷的). 本 ...
- # [SDOI2019]移动金币 阶梯博弈 dp
[SDOI移动金币 链接 vijos 思路 阶梯博弈,dp统计. 参见wxyww 代码 #include <bits/stdc++.h> using namespace std; cons ...
- 【JZOJ5551】【20190625】旅途
题目 \(n\)个点\(m\)条边的无向图,一条路径的代价定义为路径上前\(k\)大边的边权和 对于$k = n \to 1 $,求1-n的最短路 \(n,m \le 3000 \ , \ w_i \ ...
- APIO2019 游记
\(\text {Cu}\)滚粗了,滚粗选手不配拥有游记.
- 【luoguP2989】[USACO10MAR]对速度的需要Need For Speed
题目描述 最大化平均值 二分一个\(x\) \(check\): \(\frac{F+\sum_{i=1}^{n} X_{i} \times F_{i}}{M+\sum_{i=1}^{n} X_{i} ...
- nginx 日志之 access_log
web服务器的访问日志是非常重要的,我们可以通过访问日志来分析用户的访问情况, 也可以通过访问日志发现一些异常访问,比如cc攻击. 格式: access_log /path/to/logfile fo ...