Kubernetes 创建/销毁一个Pod的工作流程;

创建Pod的流程

kubernetes是基于list-watch机制的控制器架构,实现组件间交互的节藕;

简单来说k8s架构类似于微服务的架构,每个组件都有各自的职责,它们都是以Api Server组件为核心,其它组件都是监控自己负责的资源,当资源发生变化时,kube-apiserver会通知这些组件,这个过程类似于发布与订阅的过程;



在这里插入图片描述
接下来我们看下从创建pod 到 pod运行都有哪些过程:

[root@k8s-master ~]# kubectl run pod666 --image=nginx
  1. kubectl向apiserver发送一个创建pod的请求,apiserver会将数据放到etcd中存储;

  2. scheduler收到未绑定pod的资源,通过自身调度算法选择一个合适的node进行绑定,然后响应给apiserver,apiserver再入etcd库;

  3. kubelet收到分配自己节点上的pod,调用docker api创建容器,然后将容器状态响应给apiserver;

[root@k8s-master ~]# kubectl get pod

销毁一个Pod的流程

  1. Pod 设置为Terminating状态,并从所有服务的Endpoints列表中删除
  2. 此时,Pod停止停止,但是Pod中运行的容器不受影响
  3. PreStop Hook被执行
  4. preStop Hook发送容器特殊命令或者Http请求到Pod中,Pod应用程序在接收SIGTERM(该SIGTERM信号是用于导致程序终止的通用信号。不同于SIGKILL,该信号可以被阻止,处理和忽略。这是礼貌地要求程序终止的正常方法),如果使用第三方代码或者管理系统无法控制,则preStop Hook是在不修改应用程序的情况下触发
  5. SIGTERM信号发送给Pod
  6. 此时,Kubernetes将向Pod中的容器发送SIGTERM信号,这个信号即通知容器他们很快将进行关闭。
  7. Kubernetes等待优雅的终止
  8. 此时,Kubernetes等待指定的时间称为优雅终止宽限期。默认情况下,这是30秒(可以修改),值得注意的是,PreStop Hook和SIGTREM信息是属于并行执行,Kubernetes不会等待PreStop Hook完成。

注:
如果Pod在terminationGracePeriod完成之前推出,Kubernetes将进如释放阶段,如果容器在优雅终止宽限期(terminationGracePeriod限定时间),则会发送SIGKILL信号并强制删除。与此同时,所有的Kubernetes对象也会被清除


大家在上面可以看出未列出的组件,原因如下:
controller-manager:pod是直接由kubelet创建的,没有经过调度器,而controller-manager是负责控制器管理的,例如创建deployment等,才会经过controller-manager;

kube-proxy:负责service网络的实现,访问service时会转发到pod;因为在创建pod时没有创建service 所以kube-proxy在这个架构中也没有干预进来;

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不知名运维:

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值