• kubernets之pod的生命周期容器启动后钩子以及容器结束前钩子


    一 先来介绍容器启动后钩子

      1.1  容器启动后钩子,并不是容器启动之后才会执行的操作,而是在容器启动过程中,异步的和容器进行启动的一种钩子它有2种表现形式,包括我们后面提到的容器结束前钩子一样

      • 在一个容器内部执行一条命令
      • 或者向URL发起一个HTTP的get请求

        

      1.2  创建一个带有容器启动后钩子的pod

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-with-poststart-hook
    spec:
      containers:
      - image: luksa/kubia
        name: luksa
        lifecycle:
          postStart:
            exec:
              command:
              - sh
              - -c
              - "echo 'hook will fail with exit code 20'; sleep 5; exit 20"
    • 这个钩子会在休眠5s之后,以退出码20的形式非0退出
    • 理论上由于这个钩子失败,这个pod最后也无法ready
    • 我们创建完之后,查看下这个pod的状态

      1.3  观察这个pod的事件以及pod的状态

    
    

       [root@node01 Chapter17]# k get po
         NAME READY STATUS RESTARTS AGE
         pod-with-poststart-hook 0/1 CrashLoopBackOff 1 2m7s

    Events:
      Type     Reason               Age   From               Message
      ----     ------               ----  ----               -------
      Normal   Scheduled            32s   default-scheduler  Successfully assigned default/pod-with-poststart-hook to node02
      Normal   Pulling              30s   kubelet            Pulling image "luksa/kubia"
      Normal   Pulled               30s   kubelet            Successfully pulled image "luksa/kubia"
      Normal   Created              30s   kubelet            Created container luksa
      Normal   Started              30s   kubelet            Started container luksa
      Warning  FailedPostStartHook  24s   kubelet            Exec lifecycle hook ([sh -c echo 'hook will fail with exit code 20'; sleep 5; exit 20]) for Container "luksa" in Pod "pod-with-poststart-hook_default(24c143e9-606d-11eb-802a-5254002a5691)" failed - error: command 'sh -c echo 'hook will fail with exit code 20'; sleep 5; exit 20' exited with 20: , message: "hook will fail with exit code 20
    "
      Normal   Killing              24s   kubelet            FailedPostStartHook
    • 显示failedpoststarthook状态,应该是容器启动后钩子非0退出
    • 容器状态显示CrashLoopBackOff

    二 容器停止前钩子介绍

      2.1  创建一个停止前钩子

    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-with-prestop-hook
    spec:
      containers:
      - image: luksa/kubia
        name: luksa
        lifecycle:
          preStop:
            httpGet:
              port: 8080
              path: shutdown
    • 停止前钩子的结果不会影响这个容器是否最后会被停止,但是会在事件中看到一个FailedPreStartHook的告警
    • 一个很不明智的做法是在停止前钩子上面将SIGTERM信息给容器进程,原因是正常的SIGTERM信息没有被容器进程正确的接收到,其实真正的原因是在启动容器的时候开发者用了shell形式,这种形式会将应用交给shell管理,然后shell接收到这个SIGTREM,但是容器进程没有正确接收这个信息,所以正确的做法是使用exec的形式,而不是shell形式
    • 这些钩子针对的对象是容器而不是pod,这一点很重要,需要时刻牢记
  • 相关阅读:
    zabbix迁移思路
    top命令
    random随机数
    判断传入元素是否可见
    title_contains
    1.Selenium的工作原理以及网页上查找元素
    APP升级测试
    英语词汇
    作文 |素材笔记
    408计组 |二、数据的表示和运算
  • 原文地址:https://www.cnblogs.com/wxm-pythoncoder/p/14335664.html
Copyright © 2020-2023  润新知