您现在的位置是:首页 > 正文

kubernetes Pod详解-生命周期-初始化容器

2024-02-29 12:33:40阅读 0

初始化容器

初始化容器是在pod的主容器启动之前要运行的容器,主要是做一些主容器的前置工作,它具有两大特征:

  1. 初始化容器必须运行完成直至结束,若某初始化容器运行失败,那么kubernetes需要重启它直到成功完成
  2. 初始化容器必须按照定义的顺序执行,当且仅当前一个成功之后,后面的一个才能运行

初始化容器有很多的应用场景,下面列出的是最常见的几个:

  • 提供主容器镜像中不具备的工具程序或自定义代码
  • 初始化容器要先于应用容器串行启动并运行完成,因此可用于延后应用容器的启动直至其依赖的条件得到满足

接下来做一个案例,模拟下面这个需求:

假设要以主容器来运行nginx,但是要求在运行nginx之前先要能够连接上mysql和redis所在服务器

为了简化测试,事先规定好mysql(192.168.90.14)和redis(192.168.90.15)服务器的地址

创建pod-initcontainer.yaml,内容如下:

apiVersion: v1
kind: Pod
metadata:
  name: pod-initcontainer
  namespace: dev
spec:
  containers:
  - name: main-container
    image: nginx:1.17.1
    ports: 
    - name: nginx-port
      containerPort: 80
  initContainers:
  - name: test-mysql
    image: busybox:1.30
    command: ['sh', '-c', 'until ping 192.168.90.14 -c 1 ; do echo waiting for mysql...; sleep 2; done;']
  - name: test-redis
    image: busybox:1.30
    command: ['sh', '-c', 'until ping 192.168.90.15 -c 1 ; do echo waiting for reids...; sleep 2; done;']
# 创建pod
[root@k8s-master01 ~]# kubectl create -f pod-initcontainer.yaml
pod/pod-initcontainer created

# 查看pod状态
# 发现pod卡在启动第一个初始化容器过程中,后面的容器不会运行
root@k8s-master01 ~]# kubectl describe pod  pod-initcontainer -n dev
........
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  49s   default-scheduler  Successfully assigned dev/pod-initcontainer to node1
  Normal  Pulled     48s   kubelet, node1     Container image "busybox:1.30" already present on machine
  Normal  Created    48s   kubelet, node1     Created container test-mysql
  Normal  Started    48s   kubelet, node1     Started container test-mysql

# 动态查看pod
[root@k8s-master01 ~]# kubectl get pods pod-initcontainer -n dev -w
NAME                             READY   STATUS     RESTARTS   AGE
pod-initcontainer                0/1     Init:0/2   0          15s
pod-initcontainer                0/1     Init:1/2   0          52s
pod-initcontainer                0/1     Init:1/2   0          53s
pod-initcontainer                0/1     PodInitializing   0          89s
pod-initcontainer                1/1     Running           0          90s

# 接下来新开一个shell,为当前服务器新增两个ip,观察pod的变化
[root@k8s-master01 ~]# ifconfig ens33:1 192.168.90.14 netmask 255.255.255.0 up
[root@k8s-master01 ~]# ifconfig ens33:2 192.168.90.15 netmask 255.255.255.0 up

网站文章

  • java设计springboot基于vue的校园台球厅人员与设备管理系统

    java设计springboot基于vue的校园台球厅人员与设备管理系统

    校园台球厅人员与设备管理系统采用java技术,基于springboot框架,mysql数据库进行开发,实现了首页、个人中心、用户管理、会员账号管理、会员充值管理、球桌信息管理、会员预约管理、普通预约管...

    2024-02-29 12:33:32
  • 指向函数指针数组的指针

    简单来了解指向函数指针数组的指针

    2024-02-29 12:33:26
  • Python+opencv学习记录17:Canny边缘提取

    Python+opencv学习记录17:Canny边缘提取

    文章目录1.Canny算法的介绍2.Canny算法流程完整代码 1.Canny算法的介绍 Canny算法是一种边缘检测算法,它是由John Canny在1986年提出的。 Canny边缘检测是从不同视...

    2024-02-29 12:32:57
  • Android应用资源全面分析之三:Drawable资源

    Android应用资源全面分析之三:Drawable资源

    <level-list>LevelListDrawableLevels用于定义管理大量备选可绘制对象的可绘制对象,每个可绘制对象都分配有最大的备选数量<level-list    x...

    2024-02-29 12:32:51
  • 服务器:连接云服务器的端口是什么?

    连接云服务器端口是什么?端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535, 一般连接 Linux 云服务器要放通22号端口,连接 Windows 服务器需要开放3389端口。3389...

    2024-02-29 12:32:44
  • html中怎么让字自动变颜色,html如何设置单个字体颜色

    html中怎么让字自动变颜色,html如何设置单个字体颜色

    HTML里怎么设置字体颜色输入html代码 ①用记事本打开index.html文件,输入以下代码; html修改字体颜色的几种方式 字体颜色的不同设置方法 ②怎么设置HTML代码里的字体颜色编写htm...

    2024-02-29 12:32:38
  • webpack成长指北第6章---webpack的图片引入

    webpack成长指北第6章---webpack的图片引入

    webpack成长指北第5章---webpack的图片引入案例项目目录代码打包loaderurl-loader安装url-loader配置webpackurl-loader的limit 案例 我们先尝试一下直接引入图片然后打包项目,看看是什么情景 项目目录 代码 index.html

    2024-02-29 12:32:08
  • 阻止form表单提交,和提交时产生的问题总结

    一、首先总结 阻止 form 表单提交的几种方法 提交时,type默认为submit,阻止提交将type改为button,即 type="button" 提交时,将type改为button,即 type="button" &

    2024-02-29 12:31:59
  • Python基础——变量及字符串简介

    Python基础——变量及字符串简介

    变量 当把一个值赋给一个名字时,它就会存储在内存中,我们把这块内存称为变量(variable)。 在大多数语言中,都把这种行为称为"给变量赋值"或"把值存储在变量中&qu...

    2024-02-29 12:31:53
  • eclipse中根据表自动生成注解实体类

    eclipse中根据表自动生成注解实体类

    现在hibernate在项目中的应用是越来过广泛了。我是从hibernate开始支持注释语法后才开始研究它的。说实在的,原来的hibernate生成的一堆堆的XML文件看着就头晕,还不如自己写的SQL语句来的舒服,所以一直听朋友和同事介绍,可自己一直不屑用之。 可是现在有福了hibernate是JPA最常用的实现之一,而且hiberante自身也对注释语法进行了支持。现在再不用去看...

    2024-02-29 12:31:26