第九篇:Kubernetes零宕机发布之pod启动与退出

66 阅读2分钟

注明:当前文档内容来源于51cto课堂‘宽哥’杜宽学习课程。

一、Pod生命周期之启动过程

image.png

文字描述

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生命周期之退出过程

image.png

解释: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  # 重启策略