【三】Kubernetes学习笔记-Pod 生命周期与 Init C 介绍
一、容器生命周期
- 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 介绍的更多相关文章
- Angular 5.x 学习笔记(2) - 生命周期钩子 - 暂时搁浅
Angular 5.x Lifecycle Hooks Learn Note Angular 5.x 生命周期钩子学习笔记 标签(空格分隔): Angular Note on cnblogs.com ...
- iOS学习笔记—ViewController/生命周期
ViewController是iOS应用程序中重要的部分,是应用程序数据和视图之间的重要桥梁,ViewController管理应用中的众多视图.iOS的SDK中提供很多原生ViewController ...
- Android学习笔记_18_Activity生命周期 及 跳转方式
一.Activity有三个状态: 1.当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态.它就是响应用户操作的Activity. 2. 当它上面有另外一个Activity,使它失去了焦点但 ...
- Java Web学习笔记-Servle生命周期
Servlet会在服务器启动或第一次请求该Servlet的时候开始生命周期,在服务器停止的时候结束生命周期. 无论请求多少次Servlet,最多只有一个Servlet实例.多个客户端并发请求Servl ...
- android学习笔记 activity生命周期&任务栈&activity启动模式
activity生命周期 完整生命周期 oncreate->onstart->onresume->onpause->onstop->ondestory 使用场景:应用程序 ...
- MVC学习笔记---MVC生命周期
Asp.net应用程序管道处理用户请求时特别强调"时机",对Asp.net生命周期的了解多少直接影响我们写页面和控件的效率.因此在2007年和2008年我在这个话题上各写了一篇文章 ...
- MVC学习笔记---MVC生命周期及管道
ASP.NET和ASP.NET MVC的HttpApplication请求处理管道有共同的部分和不同之处,本系列将体验ASP.NET MVC请求处理管道生命周期的19个关键环节. ①以IIS6.0为例 ...
- Vue2学习笔记:实例生命周期
实例生命周期 每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测(data observer).编译模版.挂载实例到 DOM ,然后在数据变化时更新 DOM .在这个 ...
- VUE 学习笔记 二 生命周期
1.除了数据属性,Vue 实例还暴露了一些有用的实例属性与方法.它们都有前缀 $,以便与用户定义的属性区分开来 var data = { a: 1 } var vm = new Vue({ el: ' ...
随机推荐
- (十三)VMware Harbor 身份验证模式
VMware Harbor 修改Harbor仓库admin用户 参考:https://blog.csdn.net/qq_40460909 https://blog.csdn.net/qq_404609 ...
- Trees on the level UVA - 122
Trees are fundamental in many branches of computer science (Pun definitely intended). Current stateo ...
- Day 12_61_多线程的创建和启动(二)
多线程的创建和启动 * 在java中实现多线程的第二种方法 实现java.lang.Runnable接口,重写run()方法 * 推荐使用这种方式,因为实现接口还可以保留类的继承. package c ...
- kafka listeners和advertised配置
kafka listeners和advertised配置 kafka版本:kafka_2.11-2.3.0 kafka配置listeners # The address the socket ser ...
- IDEA中集成Git
一.新建项目,绑定GIT 1.新建spring boot项目 2.路径选择git本地文件地址 3.新的项目文件绑定git,将远程的git文件拷贝至项目中 二.修改文件,使用IDEA操作GIT 1.提 ...
- 文件上传bypass安全狗
0x00 前言 本文首发于先知社区:https://xz.aliyun.com/t/9507 我们知道WAF分为软WAF,如某狗,某盾等等:云WAF,如阿里云CDN,百度云CDN等等:硬WAF,如天融 ...
- 02- HTML网页基础知识与浏览器介绍
1.认识网页 网页主要由文字,图像和超链接等元素构成.当然,除了这些元素,网页还可以包含音频,视频,以及flask等. 如图所示就是一个网页: 网页是如何形成的呢? 它是由前端人员写的代码,经过浏览器 ...
- 深入探索Android热修复技术原理读书笔记 —— 热修复技术介绍
1.1 什么是热修复 对于广大的移动开发者而言,发版更新是最为寻常不过的事了.然而,如果你 发现刚发出去的包有紧急的BUG需要修复,那你就必须需要经过下面这样的流程: 这就是传统的更新流程,步骤十分繁 ...
- SpringCloud之配置中心(config)的使用Git+数据库实现
SpringCloud微服务实战系列教程 -------------------------目录------------------------------ 一.配置中心应用(Git) 二.配置中心的 ...
- POJ1904 强联通(最大匹配可能性)
题意: 有n个王子,n个公主,然后给你每个王子喜欢的公主,最后问你在不影响最大匹配的前提下,每个王子可以匹配那些公主. 思路: 是hdu4685的减弱版,之前研究过hdu468 ...