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 ...
随机推荐
- 【Grafana】Grafana模板自定义-1-创建选择框
如何创建选择框 第一步:编辑模板 第二步:配置变量 配置说明: General: [Name]变量名,后面模板中如果要按条件筛选,会用到这个变量名. [Type]类型,目前没仔细研究,使用默认的Que ...
- MySQL执行过程及执行顺序
一.MySQL执行过程 简单概括: 1.我们在客户端发起一个SQL的查询: 2.连接器判断用户登录以及用户权限: 3.缓存命中,走缓存,直接返回查询结果: 3.缓存没命中,到达分析器,对SQL语句进行 ...
- B+树要点梳理
B+树重要操作 中间节点 中间节点的key,与其对应的指针的原则是,小于key的元素在其指针指向的节点中 中间节点的key可以看成是右斜着排放的,即小于等于key的节点由key对应的指针指定,最有一个 ...
- vscode添加python文件头模板
pycharm可以自动生成python的文件头模板,但是vscode目前还不可以(不支持python,c的似乎有插件支持了).琢磨了一下,可以通过用户代码片段来实现. 1. 什么是用户代码片段 参考文 ...
- JSR303统一校验使用
JSR303也称为bean validation,定义了一套bean验证规范.通过注解的方式关联属性与规则 使用方式 1.引入依赖 <dependency> <groupId> ...
- 解决cnpm syscall: ‘rename‘
1.删了cnpm npm uninstall -g cnpm 2.指定版本下载cnpm npm install cnpm@7.1.0 -g
- 18B20的CRC8校验分析
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定. CRC校验可以简单地描述为:例如我们要 ...
- 统计平台广告推送工具支持百度、51拉、CNZZ 用法详解
此软件用于伪造站长统计的搜素关键词,可以模拟百度.360.搜狗等搜索引擎来路 支持自定义刷词次数.多线程支持自定义线程数,速度更快 支持指定网址推广,带来更精确的网站IP来路 一键导入几十万个网站,支 ...
- 【DataBase】MySQL 02 MySQL的配置详细
参考至视频:P8 - P11部分 https://www.bilibili.com/video/BV1xW411u7ax 配置文件的介绍 最基本的只需要这三项就行了,演示的其他配置在新版都不支持了貌似 ...
- 手把手使用 SVG + CSS 实现渐变进度环效果
效果 轨道 使用 svg 画个轨道 <svg viewBox="0 0 100 100"> <circle cx="50" cy=" ...