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\n"
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,这一点很重要,需要时刻牢记
kubernets之pod的生命周期容器启动后钩子以及容器结束前钩子的更多相关文章
- Kubernetes中资源清单与Pod的生命周期(二)
一.资源清单 1,定义: 在k8s中一般使用yaml格式的文件来创建符合我们预期的资源,这样的yaml被称为资源清单. 使用资源清单创建Pod: kubectl apply -f nginx.yaml ...
- Pod 的生命周期
上图展示了一个 Pod 的完整生命周期过程,其中包含 Init Container.Pod Hook.健康检查 三个主要部分,接下来我们就来分别介绍影响 Pod 生命周期的部分: 首先在介绍 Pod ...
- k8s之pod的生命周期
pod生命周期 和一个个独立的应用容器一样,Pod 也被认为是相对临时性(而不是长期存在)的实体. Pod 会被创建.赋予一个唯一的 ID(UID),并被调度到节点,并在终止(根据重启策略)或删除之前 ...
- Activity的生命周期和启动模式
Activity的生命周期分析 典型情况下的生命周期.是指在用户参与的情况下,Activity所经过的生命周期的改变. 异常情况下的生命周期.是指Activity被系统回收或者由于当前设备的Confi ...
- Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式
Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...
- Android Activity生命周期及启动模式
曾经搞过许多东西,再熟练的东西一段时间没有碰都会生疏或忘记.后来体会到写成文档记录下来的重要性,但有些word或ppt记录下来的东西随着时间流逝会丢失,或者不愿去看.或许保存成博客的形式,会是更好的选 ...
- Android开发艺术探索(一)——Activity的生命周期和启动模式
Activity的生命周期和启动模式 生命周期有? 1.典型情况下的生命周期—>指有用户参与的情况下,Activity所经过的生命周期改变 2.异常情况下的生命周期—>指Activity被 ...
- 《Android开发艺术探索》读书笔记 (1) 第1章 Activity的生命周期和启动模式
第1章 Activity的生命周期和启动模式 1.1 Activity生命周期全面分析 1.1.1 典型情况下生命周期分析(1)一般情况下,当当前Activity从不可见重新变为可见状态时,onRes ...
- Android查缺补漏--Activity生命周期和启动模式
一.生命周期 onCreate():启动Activity时,首次创建Activity时回调. onRestart():再次启动Activity时回调. onStart():首次启动Activity时在 ...
- Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解
前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...
随机推荐
- OpenHarmony 3.2 Beta多媒体系列——音视频播放框架
一.简介 媒体子系统为开发者提供一套接口,方便开发者使用系统的媒体资源,主要包含音视频开发.相机开发.流媒体开发等模块.每个模块都提供给上层应用对应的接口,本文会对音视频开发中的音视频播放框架做一 ...
- BI工具的应用能给企业带来哪些帮助?
大数据时代的到来,加快了企业的信息化进程,越来越多的企业选择应用BI工具于企业的日常经营运作之中.BI即商业智能,我们可以将其理解其为改善业务经营决策的一套解决方案.经过多年的发展,BI已经从最初的& ...
- centos运行django,遇到sqlite报错
在centos上运行django,报错: django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required ...
- 用于多视角人群计数的协同通信图卷积网络 Co-Communication Graph Convolutional Network for Multi-View Crowd Counting
Multi-Camara Methods Co-Communication Graph Convolutional Network for Multi-View Crowd Counting 论文ur ...
- vue3探索——使用ref与$parent实现父子组件间通信
在vue3中,可以使用vue3的API defineExpose()函数结合ref或者$parent,实现父子组件数据的传递. 子组件向父组件传递数据defineExpose()和ref 子组件:通过 ...
- centos 6.4下fdisk分区、格式化、挂载新硬盘
centos 6.4下fdisk分区.格式化.挂载新硬盘 作者: cat 日期: 2013 年 9 月 10 日 发表评论 (0) 查看评论 1.# fdisk -l 查看当前磁盘信息,就会发现最下面 ...
- redis 简单整理——redis 的键管理[七]
前言 简单整理一下redis的键管理. 正文 单个键管理 键重命名 rename key newkey 为了防止被强行rename,Redis提供了renamenx命令,确保只有newKey 不存在时 ...
- ping 介绍
前言 因为要整理网络这一块,所以打算先把概念写下.这节介绍ping的实现原理. 正文 先看一下图: 又没有发现和我们的icmp很像?对头.在icmp中,我写道:icmp有两种报文,一种是差错报文,一种 ...
- iNeuOS工业互联网操作系统,民爆远程运维平台案例
iNeuOS工业互联网操作系统,民爆远程运维平台案例 目 录 1. 概述... 2 2. iNeuOS在民爆生产厂区和北京运维中心配置... 3 1.1 ...
- ImageJ软件使用教程(三):目标计数
目录 多点工具法 阀值分割法 二值化 填充分割 自动计数 显示结果 总结 参考资料 本文以钢筋计数为例,讲解一下如何使用ImageJ软件进行计数,这里只介绍两种方法: 多点工具法 阀值分割法 钢筋计数 ...