Kubernetes-6:Pod生命周期介绍(init Container)
Pod生命周期
生命周期
1、API server调用kubelet下达Pod创建指令
2、容器环境初始化
3、进入Pod生命周期内(Pod开始创建)
4、Pod只要创建,就会自动生成一个pause容器,用于共享网络,共享存储
5、init C(init Container)初始化容器
init C仅仅负责初始化,初始化完毕后,init 容器会自动销毁
init C不能并列进行,每个init C必须在下一个init C启动前完成
如果Pod的init C失败,k8s会不断重启Pod,直到init C成功为止,除非设置Pod的restartPolicy为Never
6、开始执行 Main C(主容器)
主容器运行时会进行一个START(一进入容器就运行的指令)和STOP(退出容器前运行的指令)操作
7、readiness 就绪检测(探测),可以设置探测间隔时间
8、Liveness 生存检测,主要检测容器内是否可以正常提供服务,若不能则进行一系列操作
Init C示例
优势:
(1)它们可以包含并运行实用工具,但是出于安全考虑,是不建议在应用程序容器镜像中包含这些实用工具的
(2)它们可以包含使用工具和定制化代码来安装,但是不能出现在应用程序镜像中。例如,创建镜像没必要FROM另一个镜像,只需要在安装过程中使用类似sed、 awk、python或dig这样的工具。
(3)应用程序镜像可 以分离出创建和部署的角色,而没有 必要联合它们构建一个单独的镜像。
(4)Init容器使用Linux Namespace, 所以相对应用程序容器来说具有不同的文件系统视图。因此,它们能够具有访问Secret 的权限,而应用程序容器则不能。
(5)它们必须在应用程序 容器启动之前运行完成, 而应用程序容器是并行运行的, 所以Init容器能够提供了-种简单的阻塞或延迟应用容器的启动的方法,直到满足了一组先决条件。
测试:
## 编辑Pod资源清单
vim initc.yaml
...
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
version: v1
spec:
containers:
- name: myapp-container
image: busybox:v1
command: ['sh','-c','echo The app is running! && sleep 3600']
imagePullPolicy: IfNotPresent
initContainers:
- name: init-myapp
image: busybox:v1
command: ['sh','-c','until cat /root/myapp;do echo /root/myapp no such file or directory!;sleep 2;done']
imagePullPolicy: IfNotPresent
- name: init-mydb
image: busybox:v1
command: ['sh','-c','until cat /root/mydb;do echo /root/mydb no such file or directory!;sleep 2;done']
imagePullPolicy: IfNotPresent
... ## 以initc.yaml创建Pod
[root@Centos8 ~]# kubectl create -f initc.yaml
pod/myapp-pod created [root@Centos8 ~]# kubectl get pod #查看发现,STATUS为init未完成
NAME READY STATUS RESTARTS AGE
myapp-pod 0/1 Init:0/2 0 3m26s ## 查看Pod描述
[root@Centos8 ~]# kubectl describe pod myapp-pod ## 查看init C的Pod日志,可以看到init C没有执行成功,myservice无法解析
[root@Centos8 k8sYaml]# kubectl log myapp-pod -c init-myapp
log is DEPRECATED and will be removed in a future version. Use logs instead.
cat: can't open '/root/myapp': No such file or directory
/root/myapp no such file or directory!
/root/myapp no such file or directory!
cat: can't open '/root/myapp': No such file or directory
cat: can't open '/root/myapp': No such file or directory
/root/myapp no such file or directory!
cat: can't open '/root/myapp': No such file or directory
/root/myapp no such file or directory! ## 创建 myapp 文件,创建完毕后可发现,Init已经成功了一个
[root@Centos8 k8sYaml]# kubectl exec -it myapp-pod -c init-myapp -- touch /root/myapp
[root@Centos8 k8sYaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-pod 0/1 Init:1/2 0 5m19s ## 创建 mydb 文件,两个init全部完成,Pod正常运行
[root@Centos8 k8sYaml]# kubectl exec -it myapp-pod -c init-mydb -- touch /root/mydb
[root@Centos8 k8sYaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-pod 1/1 Running 0 7m50s ## 只要Iint C初始化完毕,此容器立刻就会消失
Init C特殊说明
如果Pod重启,所有的Init C将会重新执行
在Pod启动过程中,Init C会按顺序在网络和数据卷(pause容器)初始化之后启动,每个容器必须在下一个容器启动之前退出
如果由于运行时或失败退出,将导致容器启动失败,它会根据Pod的restartPolicy指定的策略进行重试,然而,如果Pod的restartPolicy设置为Always,Init 容器失败时会使用RestartPolicy策略
在所有的Init C没有成功之前,Pod将不会变成Ready状态,Init C的端口将不会再service中进行聚集。正在初始化中的Pod处于Pending状态,但应该会将Initializing状态设置为true
对Init C中spec的修改被限制在容器image字段,修改其他字段不会生效,更改image字段等同于重启该Pod
Kubernetes-6:Pod生命周期介绍(init Container)的更多相关文章
- 【三】Kubernetes学习笔记-Pod 生命周期与 Init C 介绍
一.容器生命周期 Init C(初始化容器)只是用于 Pod 初始化的,不会一直随着 Pod 生命周期存在,Init C 在初始化完成之后就会死亡. 一个 Pod 可以有多个 Init C,也可以不需 ...
- kubernetes之pod生命周期,pod重启策略, 镜像拉取策略
pod声明周期(状态):pending , running, succeeded, failed, unknown 挂起(Pending):Pod 已被 Kubernetes 系统接受,但有一个或者多 ...
- Kubernetes Pod 生命周期
一. Pod Hook Kubernetes 为我们提供了生命周期钩子,就是我们所说的Pod Hook,Pod Hook是由kubelet发起的,当容器中的进程启动前或者容器中的进程终止之前运行.这是 ...
- Kubernetes1.3:POD生命周期管理
转:http://blog.csdn.net/horsefoot/article/details/52324830 (一) 核心概念 Pod是kubernetes中的核心概念,kubernetes对 ...
- 06 . Kubernetes之Pod控制器详细介绍及应用
Pod API属性详解 Pod是k8s集群中的最小编排单位.将这个设计落实到API对象上,容器就成了Pod属性里一个普通的字段.那么到底哪些属性属于Pod对象,哪些属性属于容器的呢?先看下面的一段描述 ...
- pod生命周期
Pod生命周期 我们一般将pod对象从创建至终这段时间范围成为pod的生命周期,它主要包含以下的过程: pod创建过程 运行初始化容器(init container)过程 运行主容器(main con ...
- 2.k8s.Pod生命周期,健康检查
#Pod生命周期,健康检查 pod创建过程 Init容器 就绪探测 存活探测 生命周期钩子 #Pod创建过程 master节点:kubectl -> kube-api -> kubenle ...
- k8s学习-pod生命周期
4.2.pod生命周期 创建一个pod的时候过程如下: 1.容器环境初始化: 2.pause执行网络.容器卷等初始化工作: 3.所有的InitC按顺序执行,每个InitC执行完后才能执行下一个,且必须 ...
- Pod生命周期和健康检查
Pod生命周期和健康检查 Pod的生命周期涵盖了前面所说的PostStart 和 PreStop在内 Pod phase Pod的status定义在 PodStatus对象中,其中有一个phase字段 ...
- 容器编排系统之Pod生命周期、健康/就绪状态探测以及资源限制
前文我们了解了在k8s上的资源标签.标签选择器以及资源注解相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14141080.html:今天我们来聊下k8 ...
随机推荐
- NXP i.MX 8M Mini开发板规格书(四核ARM Cortex-A53 + 单核ARM Cortex-M4,主频1.6GHz)
1 评估板简介 创龙科技TLIMX8-EVM是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高性能评估板,由核心板和 ...
- Node.js - fs.path模块
首先我有话说,是谁说的学完ajax就可以去vue了,太天真了我,学会js钻出来个ajax,学完ajax钻出来个node.js这一步步的,当然node不会学到太深入把表面的认识一下就可以了,这之后可能更 ...
- Spring的三种依赖注入的方式
1.什么是依赖注入 依赖注入(Dependency Injection,简称DI),是IOC的一种别称,用来减少对象间的依赖关系. 提起依赖注入,就少不了IOC. IOC(Inversion of C ...
- MSSQL慢查询查询与统计
查询MSSQL慢查询: SELECT TOP 20 TEXT AS 'SQL Statement',last_execution_time AS 'Last Execution Time' ,(tot ...
- 使用urllib3实现http请求
Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3. 1.发送请求 import urllib3 # 创建实例 http ...
- Pluto 轻松构建云应用:开发指南
开发者只需在代码中定义一些变量,Pluto 就能基于这些变量自动创建与管理必要的云资源组件,达到简化部署和管理云基础设施的目的,让开发者更容易使用云. 这里的云资源并非指 IaaS,而是指 BaaS. ...
- 部分解决 | ocrmypdf对中文pdf进行ocr识别后存在多余空格
1.问题 ocrmypdf安装采用的是在windows安装方法具体看 https://media.readthedocs.org/pdf/ocrmypdf/latest/ocrmypdf.pdf 由于 ...
- Spring Cloud微服务下如何配置I8n
什么是I8n 国际化(I18n)指的是设计和开发产品的过程,使得它们能够适应多种语言和文化环境,而不需要进行大量的代码更改.这通常涉及到创建一个基础版本的产品,然后通过配置和资源文件来添加对不同语言和 ...
- Day 10 - 动态规划与树状数组
动态规划基础 主要介绍动态规划的基本思想,以及动态规划中状态及状态转移方程的设计思路,帮助各位初学者对动态规划有一个初步的了解. 引入 [IOI1994] 数字三角形. 给定一个 \(r\) 行的数字 ...
- CF479C 题解
洛谷链接&CF 链接 题目简述 一个人想要安排期末考试的时间. 有 \(n\) 场考试,每场考试有两个时间 \(x_i,y_i\),一个是老师规定的时间,另外一个是他与老师商量好的考试时间. ...