一、容器生命周期

  • Init C(初始化容器)只是用于 Pod 初始化的,不会一直随着 Pod 生命周期存在,Init C 在初始化完成之后就会死亡。
  • 一个 Pod 可以有多个 Init C,也可以不需要 Init C。
  • Init C 是依次执行的,第一个执行成功后才可以执行下一个 Init C,不能同时执行。

Main C 退出后 Pod 生命周期就会结束,Init C 正常退出后 Pod 生命周期并不会结束,但是 Init C 不是正常退出(返回0)的话,是不会执行到 Main C 这一步的。

如果 Pod 的 Init 容器失败,Kubernetes 会不断的重启该 Pod,直到 Init 容器成功为止。

如果 Pod 对应的 restartPolicy 为 Never,它不会重新启动。

二、Init 容器

Pod 能够具有多个容器,应用运行在容器里面,但是它也可能有一个或多个先于应用容器启动的 Init 容器。

Init 容器与普通容器非常相似,除了如下两点:

  • Init 容器总是运行到成功完成为止;
  • 每个 Init 容器都必须在下一个Init容器启动之前成功完成。

Init 容器使用案例

Init 模板:

apiVersion: v1
kind: Pod
metadata:
name: myapp-pod # Pod 名称
labels:
app: myapp # Pod 标签
spec:
containers:
- name: myapp-container # Pod 里面第一个容器名称
image: busybox # 该容器使用的镜像名称
command: ['sh','-c','echo The app is running! && sleep 3600']
# 执行命令,输出一句话结束后该容器休眠6分钟
initContainers: # 对容器初始化
- name: init-myservice # 第一个初始化容器名称
image: busybox # 初始化容器镜像
command: ['sh','-c','until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
# 解析 myservice ,until 当条件为真的时候退出循环;
# 如果解析不成功,输出一句话,休眠2s继续循环。
- name: init-mydb # 第二个初始化容器名称
image: busybox
command: ['sh','-c','until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
# 跟第一个类似,不多追溯。

创建 Pod :

READY:总共一个需要就绪的,现在就绪状态为0;

STAUS:总共两个初始化容器,现在一个都没有成功;

查看 Init 容器日志:

解析不成功,导致 Init 容器在不断循环解析:

接下来创建一个 Service 使得 Init 容器可以解析成功:

kind: Service
apiVersion: v1
metadata:
name: myservice
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376

再次查看 Pod 状态:

其中第一个 Init 容器已经执行成功了,由于第二个 Init 容器还是没有解析成功,所以 Pod 就绪状态还是为0。

接下来创建 mydb Service :

kind: Service
apiVersion: v1
metadata:
name: mydb
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9377

此时再次查看 Pod 状态:

只有两个 Init 容器初始化都成功了,Main C (也就是这里的 myapp-pod)才会运行成功。

特殊说明

  • 在 Pod 启动过程中,Init 容器会按顺序在 网络数据卷 初始化之后启动,每个容器必须在下一个容器启动之前成功退出。

这里的“网络”和“数据卷”是指 Pause 容器,真正 Pod 第一个启动的容器不是 Init 容器,而是 Pause 容器。

  • 如果由于运行时或失败退出,将导致容器启动失败,它会根据 Pod 的 restartPolicy 指定的策略进行重试。然而,如果 Pod 的 restartPolicy 设置为 Always,Init 容器失败时会使用

    RestartPolicy 策略。

  • 在所有的 Init 容器没有成功之前,Pod 将不会变成 Ready 状态。Init 容器的端口将不会在 Service 中进行聚集。正在初始化中的 Pod 处于 Pending 状态,但应该会将 Initializing 状态设置为 true。

  • 如果 Pod 重启,所有 Init 容器必须重新执行。

  • 在 Pod 中的每个 app 和 Init 容器的名称必须唯一,与任何其他容器共享同一个名称,会在验证时抛出错误。

同一组 Init 容器端口是可以相同的,因为第一个 Init 容器启动成功后就会退出,端口就不会被占用。

以上有不恰当或者讲得不对的地方,希望各位留言指正,谢谢!

站在巨人的肩膀上!

【三】Kubernetes学习笔记-Pod 生命周期与 Init C 介绍的更多相关文章

  1. Angular 5.x 学习笔记(2) - 生命周期钩子 - 暂时搁浅

    Angular 5.x Lifecycle Hooks Learn Note Angular 5.x 生命周期钩子学习笔记 标签(空格分隔): Angular Note on cnblogs.com ...

  2. iOS学习笔记—ViewController/生命周期

    ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController ...

  3. Android学习笔记_18_Activity生命周期 及 跳转方式

    一.Activity有三个状态: 1.当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态.它就是响应用户操作的Activity. 2. 当它上面有另外一个Activity,使它失去了焦点但 ...

  4. Java Web学习笔记-Servle生命周期

    Servlet会在服务器启动或第一次请求该Servlet的时候开始生命周期,在服务器停止的时候结束生命周期. 无论请求多少次Servlet,最多只有一个Servlet实例.多个客户端并发请求Servl ...

  5. android学习笔记 activity生命周期&任务栈&activity启动模式

    activity生命周期 完整生命周期 oncreate->onstart->onresume->onpause->onstop->ondestory 使用场景:应用程序 ...

  6. MVC学习笔记---MVC生命周期

    Asp.net应用程序管道处理用户请求时特别强调"时机",对Asp.net生命周期的了解多少直接影响我们写页面和控件的效率.因此在2007年和2008年我在这个话题上各写了一篇文章 ...

  7. MVC学习笔记---MVC生命周期及管道

    ASP.NET和ASP.NET MVC的HttpApplication请求处理管道有共同的部分和不同之处,本系列将体验ASP.NET MVC请求处理管道生命周期的19个关键环节. ①以IIS6.0为例 ...

  8. Vue2学习笔记:实例生命周期

    实例生命周期 每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测(data observer).编译模版.挂载实例到 DOM ,然后在数据变化时更新 DOM .在这个 ...

  9. VUE 学习笔记 二 生命周期

    1.除了数据属性,Vue 实例还暴露了一些有用的实例属性与方法.它们都有前缀 $,以便与用户定义的属性区分开来 var data = { a: 1 } var vm = new Vue({ el: ' ...

随机推荐

  1. CrackMe_002

    老规矩,先熟悉程序. 只有一个验证的功能,错误提示You Get ... 关闭没有nag窗口 第一种,暴力破解 查找字符串,很少,直接双击进入 可以看到错误提示的跳转来自: 表示这应该是个重要的跳转, ...

  2. MySQL数据类型全解析

    1 概述 本文主要介绍了MySQL的各种数据类型,版本为8.x, MySQL的数据类型可以分为六类:数值类型,日期时间类型,字符串类型,二进制类型,JSON类型与空间数据类型. 2 数值类型 数值类型 ...

  3. JFX11+Maven+IDEA 发布跨平台应用的完美解决方案

    1 概述 前几天写了两篇关于JFX+IDEA打包跨平台应用的文章,这篇是使用IDEA自带功能打包的,这篇是使用Maven进行打包的,但是效果不太满意,因为从JDK9开始实现模块化,同时JFX部分从JD ...

  4. day14.面向对象编程

    一 对象的概念 "面向对象"的核心是"对象"二字,而对象的精髓在于"整合" 所有的程序都是由"数据"与"功能& ...

  5. IP Networks UVA - 1590

     Alex is administrator of IP networks. His clients have a bunch of individual IP addresses and he de ...

  6. JAVAEE_Servlet_03_Servlet对象生命周期

    Servlet的对象声明周期 * 什么是对象生命周期? - 生命周期表示一个JAVA对象从创建到销毁的过程是一个生命周期 * Servlet对象生命周期 1. Servlet对象创建 无参构造 2. ...

  7. Day01_09_数据类型

    数据类型 数据类型分类 *基本数据类型 *引用数据类型 基本数据类型 --第一类 整数型 byte short int long --第二类 浮点型 float double --第三类 布尔型 bo ...

  8. 假如kubernetes不支持docker了该怎么办

    假如kubernetes不支持docker了该怎么办 从官网安装文档可以看到kubernetes支持一下几种: https://kubernetes.io/docs/setup/production- ...

  9. hdu4544 优先队列(小贪心)

    题意: 湫湫系列故事--消灭兔子                                                                         Time Limit: ...

  10. Photoshop 第二课 工具-钢笔的使用

    钢笔的使用 钢笔→ 是一个非常实用(主要用于)但是非常难操作(会者不难哦~)的工具. 钢笔属性中有三种状态:1.路径:2.形状:3.像素.其中路径和形状是我们最常用的状态.路径是一条用来圈定需要操作的 ...