注明:当前文档内容来源于51cto课堂‘宽哥’杜宽学习课程。
一、Pod生命周期之启动过程
文字描述
1. API Server 在接收到创建pod的请求之后,会根据用户提交的参数值来创建一个运行时的pod对象。
2. 根据 API Server 请求的上下文的元数据来验证两者的 namespace 是否匹配,如果不匹配则创建失败。
3. Namespace 匹配成功之后,会向 pod 对象注入一些系统数据,如果 pod 未提供 pod 的名字,则 API Server 会将 pod 的 uid 作为 pod 的名字。
4. API Server 接下来会检查 pod 对象的必需字段是否为空,如果为空,创建失败。
5. 上述准备工作完成之后会将在 etcd 中持久化这个对象,将异步调用返回结果封装成 restful.response,完成结果反馈。
6. API Server 创建过程完成,剩下的由 scheduler 和 kubelet 来完成,此时 pod 处于 pending 状态。
7. Scheduler选择出最优节点。
8. Kubelet启动该Pod。
二、Pod生命周期之退出过程
解释:Pod删除
1.用户发出删除pod命令
2.将pod标记为"Terminating" 状态
监控到pod对象为"Terminating" 状态的同时启动pod关闭过程
endpoints 控制器监控到pod对象关闭,将pod与service匹配的endpoints 列表中删除
Pod执行PreStop定义的内容
3.宽限期(默认30秒)结束之后,若存在任何一个运行的进程,pod会收到sigkill 信号
4.kubectl 请求API Server将此Pod资源宽限期设置为0从而完成删除操作
三、Pod平滑退出之Prestop
apiVersion: v1 # 必选,API的版本号
kind: Pod # 必选,类型Pod
metadata: # 必选,元数据
name: nginx # 必选,符合RFC 1035规范的Pod名称
spec: # 必选,用于定义Pod的详细信息
containers: # 必选,容器列表
- name: nginx # 必选,符合RFC 1035规范的容器名称
image: nginx:1.15.12 # 必选,容器运行的镜像
imagePullPolicy: IfNotPresent # 镜像拉取策略
lifecycle:
postStart: # 容器创建按成后执行的指令,可以是exec httpGet TCPSocket,不推荐使用
exec:
command:
- sh
- -c
- 'mkdir /data/'
preStop:
exec:
command:
- sh
- -c
- sleep 10
ports: # 可选,容器需要暴露的端口列表
- containerPort: 80 # 端口号
restartPolicy: Never # 重启策略