k8s pod生命周期

镇楼图

 

 

 

 

 

复制到typora效果更佳哦

# 笔记

### 1、pod

```bash
k8s最小的管理单元是pod,pod主要是用来管理pod,在一个pod中包含的是一个调用链的服务。

例如:
nginx Django

```

![pod生命周期](pod%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F.png)

### 2 、pod生命周期

```bash
上图就是pod的整个生命周期:
    1.容器初始化
    2.启动回调(postStart)
    3.存活探针(liveness probe)
    4.就绪探针(readiness probe)
    5.停止回调(pre stop)
```

#### 2.1、容器初始化

```bash
初始化容器必须运行完成直至结束,若某初始化容器运行失败,那么k8s需要重启它直到成功完成
每个初始化容器都必须按定义的顺序串行运行

1.既然有了command,那为什么还要用初始化(initcontainers)呢?
#command,不保证在容器启动之前运行,而初始化是一定是容器启动之前运行,运行成功才会继续启动容器否则,重启容器

用法:
#initcontainers和containers同级
……
spec:
  initcontainers:
  ……
  containers:
  ……
  
```



#### 2.2、启动回调(postStart)

```bash
当Pod中所有的容器创建完成之后,立即调用的命令。

执行失败:如果启动回调钩子执行失败,容器无法进入正常启动状态。

#检测方式又有三种:
exec、http、socket三种,分别是通过执行命令、http请求、检测端口是否开启,三种方式检测

---

PostStart:容器创建成功后,运行前的任务,用于资源部署、环境准备等。

......
containers:
- image: sample:v2  
     name: war
     lifecycle:
      postStart:
       exec:
         command:
          - “cp”
          - “/sample.war”
          - “/app”

————————————————
使用方法
---
#exec
……
spec:
  containers:
    - name: nginx
      image: nginx:1.18
      imagePullPolicy: IfNotPresent
      lifecycle:
        postStart:
          exec:
            command:
              - "/bin/sh"
              - "-c"
              - "echo 'Hello World!' > /root/1.txt"
#容器启动成功后执行"echo 'Hello World!' > /root/1.txt"这个命令执行成功则,检测通过,否则检测失败无法进入正常状态
---
#http协议访问
……
spec:
  restartPolicy: OnFailure
  containers:
    - name: nginx
      image: nginx:1.18
      imagePullPolicy: IfNotPresent
      lifecycle:
        postStart:
          httpGet:
            port: 80
            path: /
            host: www.baidu.com
#容器启动成功后访问www.baidu.com这个域名80端口访问成功则检测通过,否则无法进入正常状态
---
#socket 通过ping命令检测端口
……
spec:
  restartPolicy: OnFailure
  containers:
    - name: nginx
      image: nginx:1.18
      imagePullPolicy: IfNotPresent
      lifecycle:
        postStart:
          tcpSocket:
            port: 80
            host: 106.13.81.75
```



#### 2.3、存活探针(liveness probe)

```bash
存活探针的主要作用就用来测试容器是否存活,如过检测失败,则认为容器不健康,会根据相应的设置来判断是否进行重启操作,如果不配置存活探针则默认为健康状态

initialDelaySeconds。如果没有设置,探针将在启动时立即探测,通常会导致探测失败,因为程序还没准备好开始接收请求


#示例:
存活探针同样有三种探测方式:exec、http、socket三种,分别是通过执行命令、http请求、检测端口是否开启,三种方式检测
liveness probe,在containers下级
---
……
spec:
  containers:
  livenessProbe:
      initialDelaySeconds: 10   #延迟检测时间
      periodSeconds: 5          #检测时间间隔
      exec:
        command:
        - cat
        - /tmp/healthy

#http、socket和上面都一样这里就直接跳过了
---
#相关配置(在livenessProbe下级):
initialDelaySeconds: Pod 启动后首次进行检查的等待时间,单位“秒”。
periodSeconds: 检查的间隔时间,默认为 10s,单位“秒”。
timeoutSeconds: 探针执行检测请求后,等待响应的超时时间,默认为 1s,单位“秒”。
successThreshold: 探针检测失败后认为成功的最小连接成功次数,默认为 1s,在 Liveness 探针中必须为 1s,最小值为 1s。
failureThreshold: 探测失败的重试次数,重试一定次数后将认为失败,在 readiness 探针中,Pod会被标记为未就绪,默认为 3s,

```



#### 2.4、就绪探针(readiness probe)

```bash
用于判断容器中应用是否启动完成,当探测成功后才使 Pod 对外提供网络访问,如果探测失败,将会从负载均衡上驱逐,再接收流量,直到再次检测通过

#示例:
readiness probe的配置和livenessProbe是一样的
---
……
spec:
  containers:
  readinessProbe:
      initialDelaySeconds: 10   #延迟检测时间
      periodSeconds: 5          #检测时间间隔
      exec:
        command:
        - cat
        - /tmp/healthy

#http、socket和上面都一样这里就直接跳过了
---
#相关配置(在livenessProbe下级):
initialDelaySeconds: Pod 启动后首次进行检查的等待时间,单位“秒”。
periodSeconds: 检查的间隔时间,默认为 10s,单位“秒”。
timeoutSeconds: 探针执行检测请求后,等待响应的超时时间,默认为 1s,单位“秒”。
successThreshold: 探针检测失败后认为成功的最小连接成功次数,默认为 1s,在 Liveness 探针中必须为 1s,最小值为 1s。
failureThreshold: 探测失败的重试次数,重试一定次数后将认为失败,在 readiness 探针中,Pod会被标记为未就绪,默认为 3s,
```



#### 2.5、停止回调(pre stop)

```bash

PreStop:在容器被终止前的任务,用于优雅关闭应用程序、通知其他系统等等。

优雅的删除资源对象:
    当用户请求删除含有pod的资源对象时(如RC、deployment等),K8S为了让应用程序优雅关闭(即让应用程序完成正在处理的请求后,再关闭软件),K8S提供两种信息通知:
            1)、默认:K8S通知node执行docker stop命令,docker会先向容器中PID为1的进程发送系统信号SIGTERM,然后等待容器中的应用程序终止执行,如果等待时间达到设定的超时时间,或者默认超时时间(30s),会继续发送SIGKILL的系统信号强行kill掉进程。
            2)、使用pod生命周期(利用PreStop回调函数),它执行在发送终止信号之前。


---
……
spec:
  containers:
    prestop:
      httpGet:
        host: monitor.com
        psth: /waring
        port: 8080
        scheme: HTTP
```

 

posted @ 2022-01-05 21:31  念长卿  阅读(175)  评论(0编辑  收藏  举报