一、生命周期相关流程

二、生命周期配置

生命周期配置

完整配置文件 nginx-prestop-po.yaml

apiVersion: v1 # api 文档版本
kind: Pod  # 资源对象类型,也可以配置为像Deployment、StatefulSet这一类的对象
metadata: # Pod 相关的元数据,用于描述 Pod 的数据
  name: nginx-prestop-po # Pod 的名称
  labels: # 定义 Pod 的标签
    type: app # 自定义 label 标签,名字为 type,值为 app
    test: 1.0.0 # 自定义 label 标签,描述 Pod 版本号
  namespace: 'default' # 命名空间的配置
spec: # 期望 Pod 按照这里面的描述进行创建
  containers: # 对于 Pod 中的容器描述
  - name: nginx # 容器的名称
    image: nginx:1.7.9 # 指定容器的镜像
    imagePullPolicy: IfNotPresent # 镜像拉取策略,指定如果本地有就用本地的,如果没有就拉取远程的
    
    # 生命周期配置
    lifecycle:
        postStart: # 容创建完成后执行的动作,不能保证该操作一定在容器的 command 之前执行,一般不使用
            exec: # 可以是 exec / httpGet / tcpSocket
                command:
                - sh
                - -c
                - 'mkdir /data'
        
        preStop: # 在容器停止前执行的动作
            #httpGet: # 发送一个 http 请求
            #    path: /
            #    port: 80
            exec: # 执行一个命令
                command:
                - sh
                - -c
                - sleep 9

    command: # 指定容器启动时执行的命令
    - nginx
    - -g
    - 'daemon off;' # nginx -g 'daemon off;'
    workingDir: /usr/share/nginx/html # 定义容器启动后的工作目录
    ports:
    - name: http # 端口名称
      containerPort: 80 # 描述容器内要暴露什么端口
      protocol: TCP # 描述该端口是基于哪种协议通信的
    env: # 环境变量
    - name: JVM_OPTS # 环境变量名称
      value: '-Xms128m -Xmx128m' # 环境变量的值
    resources:
      requests: # 最少需要多少资源
        cpu: 100m # 限制 cpu 最少使用 0.1 个核心
        memory: 128Mi # 限制内存最少使用 128兆
      limits: # 最多可以用多少资源
        cpu: 200m # 限制 cpu 最多使用 0.2 个核心
        memory: 256Mi # 限制 最多使用 256兆
  restartPolicy: OnFailure # 重启策略,只有失败的情况才会重启

三、验证

1. postStart 生命周期验证

  • 1) 修改yaml文件中的lifecycle 生命周期的配置参数为以上内容
  • 2) 根据配置文件创建pod, pod名为 nginx-prestop-po

    kubectl create -f nginx-prestop-po.yaml
  • 3) 查看pod

    kubectl get po

  • 4) 验证命令是否执行成功, 使用kubectl exec -it nginx-prestop-po bash 进入容器查看/data目录是否存在

    [root@k8s-master pods]# kubectl exec -it nginx-prestop-po bash
        kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
        root@nginx-prestop-po:/usr/share/nginx/html# 
        root@nginx-prestop-po:/usr/share/nginx/html# cd /data/
        root@nginx-prestop-po:/data# pwd
        /data
        root@nginx-prestop-po:/data#

    综上, postStart 在容器启动后执行命令成功

2. preStop 生命周期验证

  • 1) 修改yaml文件中的lifecycle 生命周期下 preStop的配置参数

    # 生命周期配置
    lifecycle:
        postStart: # 容创建完成后执行的动作,不能保证该操作一定在容器的 command 之前执行,一般不使用
            exec: # 可以是 exec / httpGet / tcpSocket
                command:
                - sh
                - -c
                # 这里在容器启动时, 在/data/目录中创建了一个 stop.txt文件
                - 'mkdir /data & touch /data/stop.txt'
    
        preStop: # 在容器停止前执行的动作
            exec: # 执行一个命令
                command:
                - sh
                - -c
                # 此处命令的含义是将 `stopping` 写入 `/data/stop.txt` 文件里, 为了更好验证, 我们将持续监听该文件
                - "echo 'stopping' > /data/stop.txt "
  • 2) 根据配置文件创建pod, pod名为 nginx-prestop-po

    kubectl create -f nginx-prestop-po.yaml
  • 3) 查看pod

    kubectl get po

  • 4) 验证 preStop 命令是否执行成功

    • 使用kubectl exec -it nginx-prestop-po bash 进入容器
    • 持续监听 /data/stop.txt 文件

      tail -f /data/stop.txt
    • 开启另一个窗口删除容器

    综上, preStop 在容器关闭前执行命令成功

最后修改:2023 年 07 月 20 日
如果觉得我的文章对你有用,请点个赞吧~