Pod--初始化容器
前言
环境:centos7.9 docker-ce-20.10.9 kubernetes-version v1.22.6
什么是pod的初始化容器
在pod中,为了能实现在业务容器启动之间做一些检查,k8s 提供了一种叫做初始化容器的机制来实现。
初始化容器是在pod的业务容器启动之前要运行的容器,主要是做一些业务容器的前置工作,它具有两大特征:
1、初始化容器必须运行完成直至结束,若某初始化容器运行失败,那么kubernetes需要重启它直到成功完成;
2、初始化容器必须按照定义的顺序执行,当且仅当前一个初始化容器成功之后,后面的一个初始化容器才能运行;
初始化容器有很多的应用场景,下面列出的是最常见的几个:
1、提供业务容器镜像中不具备的工具程序或自定义代码;
2、初始化容器要先于应用容器串行启动并运行完成,因此可用于延后应用容器的启动直至其依赖的条件得到满足,比如nginx容器,要求redis、mysql等容器先启动后才能启动nginx容器,这时候就需要做两个初始化容器探测mysql、redis容器是否在运行。
初始化容器案例
模拟下面这个需求来讲解初始化容器的使用:
假设要以业务容器来运行nginx,但是要求在运行nginx之前先要能够连接上mysql和redis服务器
为了简化测试,模拟定义2个初始化容器,这2个初始容器主要做的事就是ping mysql服务器的ip地址192.168.118.100和redis服务器的IP地址192.168.118.101。(这两个ip地址是不存在的)
创建pod-initcontainer.yaml,内容如下:
[root@master ~]# cat pod-initContainer.yaml
apiVersion: v1
kind: Pod
metadata: name: pod-initcontainerlabels: env: devnamespace: default
spec:containers:- image: nginx:1.7.9name: nginx-containerports:- name: nginx-portcontainerPort: 80initContainers: #创建了2个初始化容器,这2个初始化容器所做的事就是pingmysql和redis数据库服务器的ip地址- name: test-mysqlimage: busybox:latestcommand: ['sh', '-c', 'until ping 192.168.118.100 -c 1 ; do echo waiting for mysql...; sleep 2; done;']- name: test-redisimage: busybox:latestcommand: ['sh', '-c', 'until ping 192.168.118.101 -c 1 ; do echo waiting for reids...; sleep 2; done;']
[root@master ~]# #由于这两个ip地址是不存在的,所以我们看到pod的状态一致处于Init状态
[root@master ~]# kubectl get pod pod-initcontainer -n default
NAME READY STATUS RESTARTS AGE
pod-initcontainer 0/1 Init:0/2 0 47s#下面我们使用-w参数持续追踪pod的变化
[root@master ~]# kubectl get pod pod-initcontainer -n default -w #然后我们再开一个虚拟机,为虚拟机添加mysql和redis的ip地址,继续观察pod的状态变化
[root@mysql ~]# ifconfig ens33:1 192.168.118.100 netmask 255.255.255.0 up #模拟添加mysql的ip,让pod的初始化容器ping的通
[root@mysql ~]# ifconfig ens33:1 192.168.118.101 netmask 255.255.255.0 up #模拟添加redis的ip,让pod的初始化容器ping的通[root@master ~]# kubectl get pod pod-initcontainer -n default -w
NAME READY STATUS RESTARTS AGE
pod-initcontainer 0/1 Init:0/2 0 47spod-initcontainer 0/1 Init:1/2 0 9m55s
pod-initcontainer 0/1 Init:1/2 0 10m
pod-initcontainer 0/1 PodInitializing 0 10m
pod-initcontainer 1/1 Running 0 10m#由此,我们发现,pod的状态从最初的Init:0/2-->Init:1/2-->PodInitializing-->Running,说明,如果定义了初始化容器,那么初始化容器必须按照定义的顺序串形执行,当且仅当前一个初始化容器成功之后,后面的一个初始化容器才能运行,当全部的初始后容器都执行成功后,业务容器才真正开始运行。
#注意:初始化容器并不是真正意义上的业务容器,所以无法通过kubectl exec命令进入初始化容器。
Pod--初始化容器相关推荐
- Kubernetes(k8s)四、Pod生命周期(初始化容器的应用,探针liveness、readliness应用,)
Pod生命周期 学习目标:初始化容器的应用及两个探针的应用 探针 是由 kubelet 对容器执行的定期诊断: Kubelet 可以选择是否执行在容器上运行的三种探针执行和做出反应: liveness ...
- k8s pod生命周期、初始化容器、钩子函数、容器探测、重启策略
pod结构 Pause容器 Pause容器是每个Pod都会有的一个根容器,它的作用有两个 可以以它为根据,评估整个pod的健康状态 可以在根容器上设置IP地址,其他容器都以此IP(Pod IP),以实 ...
- Kubernetes的初始化容器initContainers
initContainers是一种专用的容器,在应用程序容器启动之前运行,可以包括一些应用程序镜像中不存在的实用工具和安装脚本,可以完成应用的必要数据初始化等工作.总的来说就是在正式的容器启动之前做一 ...
- CC00204.CloudKubernetes——|KuberNetes高级调度.V07|——|初始化容器|InitContainer操作|
一.InitContainer概述 ### --- InitContainer概述~~~ # InitContainer: ~~~ 初始化容器:预处理.预判断.与执行命令操作:在我应用容器启动之前做的 ...
- 查看k8s中Pod里容器的数量和名称
查看Pod里容器的名称 初始化一个包含两个容器的Pod(tomcat和nginx),其中文件名为ini-pod.yaml apiVersion: v1 kind: Pod metadata:name: ...
- k8s 重启策略、健康检查、环境变量、初始化容器
深入理解Pod对象:基本管理 Pod基本概念 Pod存在意义 Pod资源共享实现机制 Pod管理命令 重启策略 健康检查 环境变量 init Container(初始化容器) 先简单的做出两个运行ht ...
- kubernetes之初始化容器
参考:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ 初始化容器是什么? 在kubernetes中,一个pod可 ...
- C++列表初始化容器
initializer_list是一个模板类,可能你已经用过它了但不知道而已,比如下面的代码就用了 #include <iostream> #include <vector>i ...
- spring读取配置文件初始化容器操作总结
Spring初始化容器.三种经常用到的实现: 一.ClassPathXmlApplicationContext:从类路径中加载. 二.FileSystemXmlApplicationContext:从 ...
- 理解 Pod 和容器设计模式
本节课程要点 为什么需要 Pod: Pod 的实现机制: 详解容器设计模式. 为什么需要 Pod 容器的基本概念 现在来看第一个问题:为什么需要 Pod?我们知道 Pod 是 Kubernetes 项 ...
最新文章
- OpenAI开放GPT-3微调功能,一行命令就能实现!正确率最高提升4倍
- 2021年软考考试时间公布
- MySql遇到字段中有空格
- oracle服务未启动失败,windows服务未启动导致 ORA-12560和RMAN-00554错误 | 信春哥,系统稳,闭眼上线不回滚!...
- 每次跳槽,总得面对这摊事
- MySQL的JOIN用法
- 【BZOJ3152】组合子逻辑,贪心+堆
- sklearn 3.随机森林(菜菜课程)
- 将CSV文件写入到MySQL中(用Pandas库实现MySQL数据库的读写)
- Android Xfermode 实战 实现圆形、圆角图片
- 巩固有私有VLAN和VLAN访问控制列表的网络
- word中插入代码_如何在Word中优雅的插入公式
- directx修复工具win7_[Win] DirectX修复工具 v3.8 增强版
- PC式硬盘录像机常见故障剖析,监控卡常见问题(一)
- 锐捷——DCHP动态分配IP地址
- ipv4地址怎么设置 手机_手机ip地址怎么设置 手机WIFI静态IP设置方法
- 微信公众号自定义菜单创建
- java.lang.IllegalArgumentException: Not an managed type
- linux下PNG、JEPG、JPG、Webp图片格式互转
- 主打“极致性价比”的酷玩7,能否让酷派再现辉煌?
热门文章
- android mvp模式到底好,Android中MVP设计模式
- mac 安装appium
- windows窗口添加菜单[SDK]
- RMAN Crosscheck 和 Delete 命令的2个实例
- jdbc、PreparedStatement预编译原理
- 【Java必备技能三】自定义注解
- 【Hoxton.SR1版本】Spring Cloud Eureka服务注册中心集群搭建
- 并发编程学习之线程8锁
- mysql的架构及查询sql的执行流程(二)
- Spring依赖注入@Autowired原理解析(一)之寻找需要注入的属性