Kubernetes Kubelet Pod 启动流程

38 篇文章 15 订阅
订阅专栏

Pod启动流程


runc有两种,一种docker,一种containerd,上面是以containerd来说明,更加轻量。

用户去创建pod,那么pod的请求会发给apiserver,apiserver接收到请求之后,会把对象存储到etcd里面,存储完成之后,调度器就去watch到pod的创建时间,并且完成调度,绑定pod。

绑定之后,也就是更新,继续去etcd里面做持久化,持久化完成之后,kubelet就watch到已经绑定的pod。

kubelet在启动pod的时候,它启动的不是一个容器进程,而是多个容器进程,不仅仅启动了应用进程,同时还启动了pause容器镜像的实例,容器进程启动了之后可以把它和某个网络namespace产生关联关系,把它放在某个网络namespace下面,在这个独立的网络namesapce下面,它可以有独立的网络配置,如果直接将容器进程放到网络namesapce里面会出现什么样的问题呢?

你的容器进程可靠吗?会不会有错误,会不会异常退出,oom,空指针,等等,当出现这些问题的时候,容器进程就退出了,退出之后容器进程就和这个网络namespace之间的绑定关系就消失了,如果不做一些措施的话,那是不是每次容器进程退出都需要重新为这个容器进程配置网络,那么这样的效率不会很高,如果容器频繁重启,那么就会导致节点上面多了很多不必要的系统操作。

有什么办法让容器进程退出的时候,网络,存储这些东西都不发生变化,这就是为什么需要pause容器。

在容器启动之前,网络就需要就绪,网络是要在容器之前就绪的,这就需要额外的容器进程先启动起来。这个也是pause的功能。

pause容器里面entrypoint其实就是pause,它永远sleep,它是一个不会退出,不消耗资源的一个稳定的进程,那么所有的网络就可以挂载在这个pause上面,当容器应用进程启动的时候,我只需要将应用进程的网络namespace挂载在pause上面就行了。

即使容器出现各种问题重启,没关系,因为网络是挂载在其下面的。所以它就提供了非常稳定的基座。

更加详细的启动过程


再回过头来看pod启动,pod启动的时候最先启动pause容器,启动之后containerd就会去调用cni的插件去setup pod,其实它会将ADD的命令告诉cni插件帮我setup网络,cni这边setup网络之后会去将pod信息返回给runtime,然后这个信息会返回给kubelet,那么这个时候其实pod就有IP了,这个时候才会去进行下面的用户应用容器的启动。

可以看到在启动容器的时候,网络是已经就绪的,所以有网络需求就可以满足了,整个启动完之后就会将状态回写到Apiserver里面,那么整个的启动过程就完成了。

上面是更加细的流程框图,如果读代码可以按照上面的思路作为指导去梳理代码的走读流程。

可以看到最左边是kubelet 中间是CRI 右边是CNI

CheckAdmit:kubelet在sync pod也就是做pod同步的时候,首先也会去做准入,比如它要去启动pod,如果节点资源不够,你非要将nodename设置为该节点,因为和节点产生绑定关系,那么就需要启动这个容器了,启动的时候我要去check一下,也需要去做准入的,要去看你的cpu的需求满足不满足,如果不满足就直接报错了,out of cpu的error,写回到这个pod状态里面。

Check network plugin:然后会去监听当前节点上网络插件的情况,如果网络插件不就绪,那么pod是启动不起来的,所以这里也会直接报错。

Update cgroup:namspace cgroup这些技术要去启动容器进程的时候,要将容器对应的cgroup文件配置好。

Makepoddir:pod需要存储日志,容器的日志需要在主机上有个目录,它会去将数据目录创建起来。

WaitForattachandmount:你的pod是需要一些存储,比如configmap轻量级存储只需要将文件下载下来,然后mount到容器当中就行了,如果是更高要求的存储,比如网络存储,那么需要去创建volume,然后和这个节点产生attach关系,然后再mount到容器里面,其实就是等待存储就绪。

面试的时候:CRI CNI CSI,它们之间关系是怎么样的呢?在启动pod的时候谁先启动,谁后启动,上面可以很清晰看到CSI就在kubelet这部分运行,就是在pod后续加载还没有启动的时候,我就得先去将存储挂载好,并且mount进来。

如果这一步不过的话,它会一直卡在这里,接下来才会去做syncpod。

syncpod里面就是来计算sandbox和容器变化,如果sandox发生变化了,就是已经在运行的容器和我pod本身不匹配了,那就是重建了,这里面其实就是computerpodaction的动作,如果这个pod已经不存在了,你的容器还在,那么就需要将容器kill掉。

然后你要启动一个新的容器,那么会去经历启动的动作。之前讲了第一步就是createpodsandbox,它会去生成这些sandbox的config,它有一些mainfest,要将这些配置文件生成出来。然后pod的日志目录要创建好,然后要去调用runtime的sandbox。

以containerd为例,它的cri本身又是一个grpc的服务,kubelet会去调用grpc服务,这个时候整个请求就转到containerd进程里面,kubelet就要暂时等待它的返回结果了。

然后就是createsandboxcontainer,然后一步一步的往下走,最后由cri去调用cni的接口。

针对这种创建网络的请求,其实就是setup网络的过程,在cni里面是addnetwork这种方法去实现的,上面就是整个pod清单的获取,一直到pod容器进程启动的这样一个过程。至于用户容器启动就不多说了。

k8s学习笔记(三):pod启动流程和实践案例
qq_57629230的博客
06-23 3303
启动一个pod背后会发生什么?如何去创建一个pod呢?一文教你搞懂!
k8s创建pod - 启动pod的流程
qq_48391148的博客
09-28 9313
Pending(悬决) pod已经被kubernetes系统接受,但有一个或者多个容器尚未创建,亦未运行,可以通过kubectl describe 查看处于 Pending 状态的原因 Running (运行中) Pod已经绑定到了某个节点,Pod中所有容器都已被创建,至少有一个容器任在运行 Successed (成功) Pod中的所有容器都已经执行成功并终止,并且不会再重启 Failed (失败) Pod中所有容器都终止,并且至少有一个容器是因
Pod启动流程
Makka_Pakkaa的博客
08-07 785
KubernetesPod启动流程是一个高度自动化和分布式的过程,涉及多个组件的协同工作。通过创建Pod配置文件、提交配置到API Server、Scheduler调度、kubelet在选定节点上启动Pod以及持续监控和更新Pod状态等步骤,Kubernetes能够高效地管理和运行容器化应用。
k8s scheduler 调度与 kubelet 启动 Pod 流程总结(四)
奔跑的蜗牛的博客
03-03 2359
本文主要总结了 k8s 中的scheduler 架构以及调度策略,以及Pod 创建流程是怎么样的,对k8s 控制平面组件 scheduler 和 kubelet 有个更加深入的认知。
kubernetespod创建流程、内部container启动流程
weixin_41198062的博客
05-24 627
文章目录Kubernetes Podpodkubernetes中各阶段的状态Kubernets创建pod流程pod内部container启动流程 Kubernetes Pod podkubernetes中各阶段的状态 pod status 描述 pending pod已经被kubernetes系统接收,但是container还未创建 running pod已经被调度到node上,并且其container都已经创建成功,且至少一个container处于running状态 succe
Kubernetes-Pod启动流程
富贵的博客
11-22 2807
kubelet 通过 API Server 监听 etcd 目录,同步 pod 列表。如果发现有新的 pod 绑定到本节点,则按照 pod 清单要求创建 pod,如果是发现 pod 被更新,则做出相应更改。读取到 pod 的信息之后,如果是创建和修改 pod 的任务,则做如下处理: 1、为该 pod 创建一个数据目录 2、从 API Server 读取该 pod 清单 3、为该 pod 挂载外部卷 4、下载 pod 所需的 Secret 5、检查已经运行在节点中 pod,如果该 pod 没有容器或者 Pau
kubelet源码分析(一)——kubelet启动流程pod状态变化感知和消费流程
weixin_43599368的博客
03-15 913
目录 1、kubelet启动流程 1.1cmd/kubelet/app/server.go Run方法 1.2cmd/kubelet/app/server.go run方法 1.3cmd/kubelet/app/server.go RunKubelet方法 1.4cmd/kubelet/app/server.go CreateAndInitKubelet方法 1.5c...
关于k8s集群Pod启动过程
最新发布
2402_83805984的博客
08-08 1272
APIServer创建了Pod资源对象并已经存入了etcd中,但是它并未被调度完成。仍然处于从仓库下载镜像的过程中。(pod调度失败、拉取镜像失败、挂载存储卷失败)
kubelet 创建pod流程(代码图解+日志说明)
plchenliang的博客
09-25 3440
本文重点介绍kubelet创建pod相关流程,通过梳理代码及实战查看日志,来说明kubelet创建pod的重点步骤
【云原生--KubernetesPod重启策略
夏颜的博客
08-03 2520
引言:在k8s集群中,当某个pod资源需要重启时,我们只会对其进行删除,由其pod控制器进行重新构建。k8s集群的自愈也是对资源的一个重新构建,。我们,那么k8s集群在对资源进行管理时,其“重启”规则又是什么呢?......
KubernetesPod的创建流程
✨ 欢迎来到【Seal ^_^ 的CSDN博客】!这里是我记录技术心得、分享经验的地方。✨
08-01 4477
整个过程从用户提交配置开始,到Pod在集群中成功运行并更新状态结束,涉及了多个Kubernetes组件的协同工作。
KubernetesPod启动和终止的最佳实践
KubernetesPod启动的流程概述 ## 1.1 Pod启动的基本原理 在Kubernetes中,Pod启动过程涉及到容器的创建、资源分配、网络设置等一系列操作。Pod的启动是通过Kubernetes的控制平面组件和Node上的Kubelet组件...
[k8s] kubelet单组件启动静态pod
weixin_33690963的博客
12-30 276
kubelet单组件启动静态pod 无需k8s其他组件,单独下载kubelet的二进制,可以启动静态pod. 静态pod不受api管理,kubectl get po可以看到,但是kubectl delete pod 删除后,出去pending状态, 节点容器并没有删除,要想删除,去节点操作kubelet相对应的目录文件 静态pod创建有2中方法: 最常用的配置文件方法,还有http方法. 配置文件...
Kubernetes 启动Pod的方法-Pod的调度算法-Pod间的通信-k8s的控制器-Pod资源控制-发布Service服务
lpfstudy的博客
07-07 1652
目录Pod参考文档:Pod | KubernetesPod配置文件:simple-pod.yaml对master进行如下操作Pod的状态有:参考文档:(70条消息) Pod生命周期中的状态解释_pod状态_闹玩儿扣眼珠子的博客-CSDN博客进入Pod内的nginx容器:当我们创建一个Pod,其中的步骤是什么?(启动Pob的流程)大概步骤:k8s的 控制器有哪些:创建Pod过程中提出的问题: Scheduler在做任务的时候,使用了那些调度算法呢?根据Pod的调度策略和方法:(K8s有哪些调度算法?)Pod
Kubelet源码分析(一):启动流程分析
weixin_34032792的博客
02-06 336
源码版本 kubernetes version: v1.3.0 简介 在Kubernetes急群众,在每个Node节点上都会启动一个kubelet服务进程。该进程用于处理Master节点下发到本节点的任务,管理PodPod中的容器。每个Kubelet进程会在APIServer上注册节点自身信息,定期向Master节点汇报节点资源的使用情...
Kubernetes(8):Pod启动命令
不积跬步,无以至千里
10-11 1792
while true;3 如果command没写,但args写了,那么Dockerfile中配置的ENTRYPOINT的命令会被执行,使用当前args的参数。在前面的案例中, 一直有一个问题没解决,就是busybox容器一直没有成功运行,那么到底是什么原因导致这个容器故障呢?4 如果command和args都写了,那么Dockerfile的配置被忽略,执行command并追加上args参数。2 如果command写了,但args没有写,那么Dockerfile默认的配置会被忽略,执行输入的command。
kubernetes容器启动详解
热门推荐
柳清风的专栏
06-10 1万+
如果大家对kubernetes组件以及架构相关分析,可以看我之前的源码阅读,今天只从一个函数分析容器的启动过程,这个函数就是SyncPod,这个是创建kubelet里面最核心的一个函数了。这个方法分为五步:// 1. Compute sandbox and container changes. // 2. Kill pod sandbox if necessary. // 3. Kill an
kubernetes-pod启动流程
Jddfd的博客
07-14 1021
kubernetespod启动流程
写文章

热门文章

  • Oracle RAC原理 114199
  • Linux /etc/passwd 47531
  • Oracle-Rman详解 46977
  • Nginx 获取客户端真实IP $remote_addr与X-Forwarded-For 41526
  • Kubelet 各个端口作用 10250 36346

分类专栏

  • Kubernetes coredns 1篇
  • Kubernetes CRI 1篇
  • Linux 操作系统实用技术 78篇
  • linux 操作综诉 5篇
  • Linux 性能优化 37篇
  • Linux 操作系统 CPU篇 8篇
  • 操作系统 进程管理 7篇
  • 操作系统 文件系统 6篇
  • Linux 操作系统 内存管理 21篇
  • 网络基础前奏 物理层 15篇
  • 计算机网络 数据链路层 21篇
  • 计算机网络 网络层 路由与交换 19篇
  • 计算机网络 网络层 4篇
  • 计算机网络 传输层 35篇
  • 计算机网络 应用层 HTTP协议 39篇
  • html css javascript jquery 33篇
  • Golang Gin 12篇
  • Golang Gorm 20篇
  • Vue.js 38篇
  • Go 12篇
  • Go 基础 变量 11篇
  • Go 值 指针 引用 4篇
  • Golang 包管理、函数 17篇
  • Go 基础 错误处理和defer
  • Go 基础 文件操作 3篇
  • Go 基础 条件判断 控制循环 2篇
  • Go 复合数据类型 arry slice map 5篇
  • Golang 面向对象编程 结构体 struct 16篇
  • Golang Goroutines 和 Channels 12篇
  • Go 方法和接口 10篇
  • Golang 常用包 文件操作/http/time 5篇
  • Go 基础 程序结构 2篇
  • 运维必须知道的JVM知识 13篇
  • Docker 63篇
  • Docker 架构与进程管理 13篇
  • Docker NameSpace 3篇
  • Docker Cgroup 8篇
  • Docker UnionFS 19篇
  • Docker 网络 9篇
  • Docker 安全 1篇
  • Kubernetes APIServer 27篇
  • Kubernetes configmap secret 4篇
  • Kubernetes CNI 13篇
  • Nginx 103篇
  • RocketMQ 5篇
  • Redis 64篇
  • Zabbix 14篇
  • tomcat 30篇
  • LVS 8篇
  • keepalived 7篇
  • Netfilter/IPtables 8篇
  • Shell 54篇
  • Ansible 26篇
  • Haproxy 7篇
  • Devops CI/CD Jenkins 81篇
  • devops Jenkins 各种发布策略 1篇
  • Terraform 19篇
  • GitLab 13篇
  • consul 2篇
  • Devops CI 代码质量平台 SonarQube 12篇
  • Devops CI 制品库 Nexus 9篇
  • 微服务全链路监控 skywalking pinpoint 3篇
  • ELK 32篇
  • Kubernetes 架构与核心对象 7篇
  • Kubernetes 规划与部署 32篇
  • Kubernetes Pod 30篇
  • ETCD 19篇
  • Kubernete kube-Scheduler 16篇
  • Kubernetes controller-manager 17篇
  • Kubernetes Scheduler 2篇
  • Kubernetes kubelet 38篇
  • Kubernetes kube-proxy 13篇
  • Kubernetes CSI 28篇
  • Kubernetes日志收集 9篇
  • Kubernetes Helm 6篇
  • k8s 基础篇 46篇
  • Kubernetes Pod 常见故障速查 7篇
  • Kubernetes Service 7篇
  • Kubernetes 安全 36篇
  • k8s与微服务 24篇
  • Service Mesh Istio 32篇
  • Prometheus 114篇
  • ceph 9篇
  • 杂谈 4篇
  • Mysql 35篇
  • ORACLE RAC+ASM 60篇
  • Oracle 日常管理 97篇
  • Oracle RMAN和备份恢复 18篇

最新评论

  • Grafana 导航栏 文本面板

    数据分析玩家: 你好,grafana展示的图片地址有要求吗,我这边展示不了本地图片

  • Go modules工程 修改包依赖的版本号

    CSDN-Ada助手: Golang 与 Python 相比,哪个更适合进行服务器端编程?

  • VictoriaMetrics 简介

    cloud-笔记: 你好,我们业务代码 上报监控数据到vmagent 采用什么方式?http post吗?

  • nginx proxy_set_header详解

    阿J~: 大佬,一给我嘞giao

  • kubernetes Pod failed to create fsnotify watcher: too many open files

    CSDN-Ada助手: CS入门 技能树或许可以帮到你:https://edu.csdn.net/skill/gml?utm_source=AI_act_gml

最新文章

  • rsyslogd 内存占用很高解决方案
  • Kubelet 核心指标监控
  • kubelet 运行机制、功能 全面分析
2024
09月 16篇
08月 8篇
07月 23篇
06月 5篇
05月 19篇
04月 33篇
03月 10篇
02月 5篇
2023年185篇
2022年357篇
2021年424篇
2020年488篇
2019年5篇
2018年208篇
2017年94篇

目录

目录

分类专栏

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家德庆玻璃钢动物雕塑批发玻璃钢蔬菜雕塑公司有哪些新乡玻璃钢浮雕学校镂空雕塑福建玻璃钢雕塑摆件设计云南水景玻璃钢雕塑弥勒市玻璃钢雕塑报价长海玻璃钢雕塑厂家商场吊挂式美陈河南季节性商场美陈订购商场花街造型美陈卡通雕塑美女与野兽玻璃钢雕塑锦簇玻璃钢雕塑翻译成英文吉林创意玻璃钢雕塑图片玻璃钢雕塑修补如何防止裂开江苏玻璃钢雕塑摆件研发商场玻璃钢雕塑制作厂家玻璃钢军人雕塑厂家江苏廉政文化玻璃钢雕塑批发包头卡通玻璃钢雕塑公司沈阳惠州玻璃钢动物雕塑玻璃钢灰色雕塑青岛市玻璃钢雕塑雕刻公司玻璃钢商业美陈雕塑公司公仔玻璃钢动物雕塑费用是多少泡沫雕塑玻璃钢定制厂家花朵校园玻璃钢景观雕塑厂家浙江抽象玻璃钢雕塑生产厂家欧式玻璃钢雕塑设计公司商场秋季美陈方案白山玻璃钢雕塑厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化