kubernetes之给容器的生命周期事件添加处理器

简介

此文讲述如何给容器的声明周期时间添加处理器,Kubernetes支持postStartpreStop事件。Kubernetes在容器启动之后立即发送postStart事件,在容器终止之前立即发送preStop事件。

备注:此文档参考官方文档,并加以自己的理解。如有误导性的内容,请批评指正。

定义 postStart 和 preStop 处理器

创建一个包含一个容器的Pod,容器中有postStartpreStop事件。文件名:lifecycle-events.yaml

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
      preStop:
        exec:
          command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]

在配置文件中,postStart命令写入一条message文件到容器的/usr/share/message目录。preStop命令平滑停止nginx。如果容器由于故障而终止,这将很有帮助。

# kubectl apply -f /root/k8s-example/pods/lifecycle-events.yaml

确认Pod中的容器正在运行

# kubectl get pod lifecycle-demo
NAME             READY   STATUS    RESTARTS   AGE
lifecycle-demo   1/1     Running   0          26h

进入容器的shell

# kubectl exec -it lifecycle-demo -- /bin/bash

在shell中确认postStart处理器创建的message文件存在

[email protected]:/#  cat /usr/share/message
Hello from the postStart handler

创建容器后,Kubernetes立即发送postStart事件。 但是,不能保证在调用Container的entrypoint之前先调用postStart处理程序。 postStart处理程序相对于Container的代码异步运行,但是Kubernetes对容器的管理会阻塞,直到postStart处理程序完成。 在postStart处理程序完成之前,容器的状态不会设置为RUNNING

原文地址:https://www.cnblogs.com/mcsiberiawolf/p/12227852.html

时间: 2024-08-30 17:49:13

kubernetes之给容器的生命周期事件添加处理器的相关文章

[转]ASP.net Application 生命周期事件

生命周期事件和 Global.asax 文件 在应用程序的生命周期期间,应用程序会引发可处理的事件并调用可重写的特定方法.若要处理应用程序事件或方法,可以在应用程序根目录中创建一个名为 Global.asax 的文件. 如果创建了 Global.asax 文件,ASP.NET 会将其编译为从 HttpApplication 类派生的类,然后使用该派生类表示应用程序. HttpApplication 进程的一个实例每次只处理一个请求.由于在访问应用程序类中的非静态成员时不需要将其锁定,这样可以简化

asp.net 页面生命周期事件详细

(1)请求页面:页请求发生在页生命周期开始之前. (2)开始:在开始阶段,将设置页属性,如Request和Response.在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性. (3)初始化页面:页面初始化期间,可以使用页中的控件,并将设置每个控件的UniqueID属性.如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值. (4)加载页面:加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性. (5)验证:

Application简介(二)--重写应用程序的生命周期事件

Application类为应用程序的创建和终止.低可用内存和配置改变了事件处理程序,通过重写以下这些方法,可以为上述几种情况实现自己的应用程序行为: 1.onCreate:在创建应用程序时调用这个方法.可以重写这个方法来实例化应用程序单态,也可以创建和实例化任何应用程序状态变量或共享资源. 2.onLowMemory:这个方法一般只会在后台进程已经终止,但是前台应用程序仍然缺少内存时调用.可以重写这个处理程序来清空缓存或者释放不必要的资源. 3.onTrimMemory:作为onLowMemor

ASP.NET -- WebForm -- 页面生命周期事件

ASP.NET -- WebForm --  页面生命周期事件在页生命周期的每个阶段中,页将引发可运行您自己的代码进行处理的事件. 1. PreInit: 使用该事件来执行下列操作: 检查 IsPostBack 属性来确定是不是第一次处理该页. 创建或重新创建动态控件. 动态设置主控页. 动态设置 Theme 属性. 读取或设置配置文件属性值. 注意: 如果请求是回发请求,则控件的值尚未从视图状态还原.如果在此阶段设置控件属性,则其值可能会在下一事件中被覆盖. 2. Init   在所有控件都已

react篇章-React State(状态)-将生命周期方法添加到类中

将生命周期方法添加到类中 在具有许多组件的应用程序中,在销毁时释放组件所占用的资源非常重要. 每当 Clock 组件第一次加载到 DOM 中的时候,我们都想生成定时器,这在 React 中被称为挂载. 同样,每当 Clock 生成的这个 DOM 被移除的时候,我们也会想要清除定时器,这在 React 中被称为卸载. 我们可以在组件类上声明特殊的方法,当组件挂载或卸载时,来运行一些代码: <!DOCTYPE html> <html> <head> <meta cha

ASP.NET最常用的页面生命周期事件

PreInit:在页生命周期的早期阶段可以访问的事件.在PreInit事件后,将加载个性化信息和页主题. Init:在所有的控件都已初始化,且已应用所有外观设置后引发.使用该事件来读取或初始化控件属性. InitComplete:在页初始化完成时发生. PreLoad:在Load事件之前对页面或控件执行处理.在Page引发该事件后,它会为自身和所有控件加载视图状态,然后处理Request实例包括对任何回发数据. Load:当服务器控件加载到Page对象时发生.使用IsPostBack页面属性检查

eclipse编辑器生命周期事件监听

在做eclipse的编辑器开发时,可能会需要对编辑器的生命周期中的某个过程进行监听,该监听事件为org.eclipse.ui.IPartListener(2): public interface IPartListener {     public void partActivated(IWorkbenchPart part);     public void partBroughtToTop(IWorkbenchPart part);     public void partClosed(IW

ASP.NET网页生命周期事件

网页事件 典型的使用方式 PreInit PreInit事件是网页生命周期中非常早起的一个事件,在PreInit事件触发之后,就会加载用户设置信息与网页主题.我们通常使用PreInit事件来执行下列处理: l 检查IsPostBack属性,来确认网页是否为第一次被处理. l 创建或重新创建动态控件. l 动态设置一个母版页. l 动态设置Theme属性. l 读取或设置用户设置文件属性值. Init 在所有的控件都已经被初始化,而且所有的面板设置都已经应用之后,就会触发Init事件.可以使用此事

quick-cocos2d-x游戏开发【13】——节点生命周期事件,帧事件等其他事件

在前面已经学过了"触摸事件","触摸捕获事件","按键事件",此外,quick还有其他几个事件,前面已经列过有这些, 预定义的节点事件: cc.NODE_EVENT - enter, exit 等事件 cc.NODE_ENTER_FRAME_EVENT - 帧事件 cc.NODE_TOUCH_EVENT - 触摸事件 cc.NODE_TOUCH_CAPTURE_EVENT - 捕获触摸事件 预定义的层事件: cc.ACCELERATE_EVENT