一、容器生命周期

  • 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. 深入学习spring cloud gateway 限流熔断

    前言 Spring Cloud Gateway 目前,Spring Cloud Gateway是仅次于Spring Cloud Netflix的第二个最受欢迎的Spring Cloud项目(就GitH ...

  2. (十二)docker --privileged

    1. privileged参数作用 --privileged Give extended privileges to this container 大约在0.6版,privileged被引入docke ...

  3. 诸葛亮的锦囊妙计竟然是大名鼎鼎的Java设计模式:策略模式

    目录 应用场景 简单实现例子 改进代码 策略模式 定义 意图 主要解决问题 何时使用 优缺点 诸葛亮的锦囊妙计 应用场景 京东.天猫双十一,情人节商品大促销,各种商品有不同的促销活动 满减:满200减 ...

  4. APK程序Dex文件无源码调试方法讨论

    那些不靠谱的工具 先来说说那些不靠谱的工具,就是今天吭了我小半天的各种工具,看官上坐,待我细细道来.IDA pro IDA pro6.6之后加入了dex动态调试功能,一时间普天同庆.喜大普奔.兴奋之后 ...

  5. 洛谷P1553 数字反转(升级版)

    题目简介 题目描述       给定一个数,请将该数各个位上数字反转得到一个新数.       这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对 ...

  6. UVA10294项链和手镯(等价类计数问题)

    题意:       给你一串珠子(连接成了一个环),共有n个珠子组成,你有t种颜色,现在你来给这个珠子染色,问染成项链有多少种方法?染成手镯有多少种方法?在项链里,经过顺时针旋转后相同的算一个,在手镯 ...

  7. Windows核心编程 第八章 用户方式中线程的同步(上)

    第8章 用户方式中线程的同步 当所有的线程在互相之间不需要进行通信的情况下就能够顺利地运行时, M i c r o s o f t Wi n d o w s的运行性能最好.但是,线程很少能够在所有的时 ...

  8. Win10 ntoskrnl.exe蓝屏解决

    主机一直用的是无线网卡,装Win10下载驱动.不管是Window10自己更新,还是通过驱动人生.驱动精灵等安装的Killer网卡驱动,均日常导致蓝屏. 状态是这样的:玩游戏蓝屏.检测系统蓝屏.清垃圾蓝 ...

  9. Linux(CentOS-8)安装MySQL8.0.11

    CentOS安装MySQL8.0.11 总的思路就是:安装MySQL,编写配置文件,配置环境变量,成功开启服务,登陆并修改ROOT密码 开启远程访问的思路就是:授权用户所有IP都可以访问,系统的数据库 ...

  10. 1、requests基础

    一.升级pip版本的命令 : python -m pip install --upgrade pip 二.requests安装  windows系统系cmd运行 pip install request ...