12、K8S中创建Pod的原理和流程 -- (详细46步)v2
2023-12-08 15:33:06 0 举报
从不同的K8S组件维度,基于通讯、认证等基本原则,描述K8S环境中Pod创建的全过程。
作者其他创作
大纲/内容
创建ContainerConfig数据结构
分片IP地址
35
15
IPC
认证失败
与期望匹配
认证成功
认正(Authentication)-------------------------------------X509 | bearer token | basicauth handler
通过RPC调用CRI
12
生成PodStatus对急
9
23.1:并更新到etcd
发送kubectl HTTP请求到api-server
生成运行时对象(runtime.Object)
29
协商API组和API版本
准入处理admit handlers
40
反序列化Pod数据
25
4.1
写入ETCD键格式<namespace>/<name>
查询etcd中api组并调用
否
7
准入控制(Admission)插件-------------------------------------SecurityContextDeny-------------------------------------ResourceQuota-------------------------------------LimitRanger-------------------------------------ServiceAccount
24
21
是
认证失败返回结果
13
45
ETCD组件
Pull image
创建或调整ReplicaSet-------------------------------------分配 label selector
先进行预选策略评估候选节点后创建Binding对象
41
23
3
31
调度到指定Node节点
28
17
46
1
创建业务容器
22
14
33
4
启用Deployment Controller
Scheduler组件
44
32
资源初始化-------------------------------------Sidecar | Volume | Secret
Controller Manager组性
Hostname
调整Pod副本数遵循Owner References规则
添加元数据-------------------容器类型日志路径sandbox ID
启动业务容器
删除HTTP Header Authorization-------------------------------------添加用户信息到context
从kube-apiserver 中检素Spec.lmagePullSecrets.(公有镜像不需要加载)
26
kubelet组件每隔20秒向apiserver查询pod,过滤NodeName与自身所在节点匹配的Pod列表,一旦获取到了这个列表,它就会通过与自己的内部缓存进行比较来检测差异,如果有差异,就开始同步 Pod 列表。
反序列化Binding对象
pause容器
38
返回Json
36
通过Cgroup进行QoS
19
20
Kuberlet组件
更新Pod资源中的字段NodeNameannotationPodScheduled.status
创建pause容器(承载共享IPC,Network,PID)
为 Pod 创建相应的数据目录,包括:Pod 目录(通常是/var/run/kubelet/pods/<podID>);Pod 的挂载卷目录(<podDir>/volumes)Pod 的插件目录(<podDir>/plugins)
更新Deployment的status
CNI(容器网络接口)
授权(Authorization)-------------------------------------Webhook | RBAC ABAC | Node
34
填充Pod.Spec
42
6
43
客户端认证-------------------------------------用户名密码:basic认证x509证书:tls.TLSConfig-------------------------------------bearer tokens | OIDC基础认证http header:Authorlzation-------------------------------------kubeconfig
kubectl命令:kubectl run nginx --image=nginx --replicas=3
资格合法性验证:-------------------------------------资源类型 | 镜像格式 | 部署审计 | dry run
运行Hook容器探测:执行Exec和HTTP请求判断
8
5
30
10
CRI(睿器运行时接口)
通过Authentication验证
27
18
封装客户端kubectl HTTP请求
39
反序列化HTTP请求,并构造运行时对象通过storage provider将请求写入etcd
11
16
Api-Server组件
ReplicaSet Controller检宣新ReplicaSet 的状态
Network
更新ReplicaSet的status
37
Continer
kubectl客户端命令接口
2
收藏
0 条评论
下一页