前言

环境: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--初始化容器相关推荐

  1. Kubernetes(k8s)四、Pod生命周期(初始化容器的应用,探针liveness、readliness应用,)

    Pod生命周期 学习目标:初始化容器的应用及两个探针的应用 探针 是由 kubelet 对容器执行的定期诊断: Kubelet 可以选择是否执行在容器上运行的三种探针执行和做出反应: liveness ...

  2. k8s pod生命周期、初始化容器、钩子函数、容器探测、重启策略

    pod结构 Pause容器 Pause容器是每个Pod都会有的一个根容器,它的作用有两个 可以以它为根据,评估整个pod的健康状态 可以在根容器上设置IP地址,其他容器都以此IP(Pod IP),以实 ...

  3. Kubernetes的初始化容器initContainers

    initContainers是一种专用的容器,在应用程序容器启动之前运行,可以包括一些应用程序镜像中不存在的实用工具和安装脚本,可以完成应用的必要数据初始化等工作.总的来说就是在正式的容器启动之前做一 ...

  4. CC00204.CloudKubernetes——|KuberNetes高级调度.V07|——|初始化容器|InitContainer操作|

    一.InitContainer概述 ### --- InitContainer概述~~~ # InitContainer: ~~~ 初始化容器:预处理.预判断.与执行命令操作:在我应用容器启动之前做的 ...

  5. 查看k8s中Pod里容器的数量和名称

    查看Pod里容器的名称 初始化一个包含两个容器的Pod(tomcat和nginx),其中文件名为ini-pod.yaml apiVersion: v1 kind: Pod metadata:name: ...

  6. k8s 重启策略、健康检查、环境变量、初始化容器

    深入理解Pod对象:基本管理 Pod基本概念 Pod存在意义 Pod资源共享实现机制 Pod管理命令 重启策略 健康检查 环境变量 init Container(初始化容器) 先简单的做出两个运行ht ...

  7. kubernetes之初始化容器

    参考:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ 初始化容器是什么? 在kubernetes中,一个pod可 ...

  8. C++列表初始化容器

    initializer_list是一个模板类,可能你已经用过它了但不知道而已,比如下面的代码就用了 #include <iostream> #include <vector>i ...

  9. spring读取配置文件初始化容器操作总结

    Spring初始化容器.三种经常用到的实现: 一.ClassPathXmlApplicationContext:从类路径中加载. 二.FileSystemXmlApplicationContext:从 ...

  10. 理解 Pod 和容器设计模式

    本节课程要点 为什么需要 Pod: Pod 的实现机制: 详解容器设计模式. 为什么需要 Pod 容器的基本概念 现在来看第一个问题:为什么需要 Pod?我们知道 Pod 是 Kubernetes 项 ...

最新文章

  1. OpenAI开放GPT-3微调功能,一行命令就能实现!正确率最高提升4倍
  2. 2021年软考考试时间公布
  3. MySql遇到字段中有空格
  4. oracle服务未启动失败,windows服务未启动导致 ORA-12560和RMAN-00554错误 | 信春哥,系统稳,闭眼上线不回滚!...
  5. 每次跳槽,总得面对这摊事
  6. MySQL的JOIN用法
  7. 【BZOJ3152】组合子逻辑,贪心+堆
  8. sklearn 3.随机森林(菜菜课程)
  9. 将CSV文件写入到MySQL中(用Pandas库实现MySQL数据库的读写)
  10. Android Xfermode 实战 实现圆形、圆角图片
  11. 巩固有私有VLAN和VLAN访问控制列表的网络
  12. word中插入代码_如何在Word中优雅的插入公式
  13. directx修复工具win7_[Win] DirectX修复工具 v3.8 增强版
  14. PC式硬盘录像机常见故障剖析,监控卡常见问题(一)
  15. 锐捷——DCHP动态分配IP地址
  16. ipv4地址怎么设置 手机_手机ip地址怎么设置 手机WIFI静态IP设置方法
  17. 微信公众号自定义菜单创建
  18. java.lang.IllegalArgumentException: Not an managed type
  19. linux下PNG、JEPG、JPG、Webp图片格式互转
  20. 主打“极致性价比”的酷玩7,能否让酷派再现辉煌?

热门文章

  1. android mvp模式到底好,Android中MVP设计模式
  2. mac 安装appium
  3. windows窗口添加菜单[SDK]
  4. RMAN Crosscheck 和 Delete 命令的2个实例
  5. jdbc、PreparedStatement预编译原理
  6. 【Java必备技能三】自定义注解
  7. 【Hoxton.SR1版本】Spring Cloud Eureka服务注册中心集群搭建
  8. 并发编程学习之线程8锁
  9. mysql的架构及查询sql的执行流程(二)
  10. Spring依赖注入@Autowired原理解析(一)之寻找需要注入的属性