当前位置: 首页 > news >正文

18、Kubernetes核心技术 - InitContainer(初始化容器)

目录

一、概述

二、使用InitContainer


一、概述

InitContainer即初始化容器,是 K8S官方为我们提供的一个可以用来判断环境是否已经满足运行 Pod 应用前所需要的条件

比如我们有一个应用,需要部署到Tomcat环境,那么在部署这个应用Pod之前,我们需要检查Tomcat环境是否已经准备好,InitContainer就可以用来做这个事情,我们可以让InitContainer运行 until 命令进行判断,判断是否满足我们应用运行的要求,如果满足运行要求,执行成功后便会退出,否则将会一直进行循环操作,直到条件成功。

使用InitContainer的一些优势:

  • 1、InitContainer能以不同于 Pod 内应用容器的文件系统视图运行。因此,InitContainer可以访问 应用容器不能访问的 [Secret]的权限
  • 2、由于InitContainer必须在应用容器启动之前运行完成,因此InitContainer提供了一种机制来阻塞或延迟应用容器的启动,直到满足了一组先决条件。 一旦前置条件满足,Pod 内的所有的应用容器会并行启动。

二、使用InitContainer

创建 Pod 的资源清单文件: vim init-container-demo.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:initContainers: # 支持配置多个初始化容器,当前面的初始化容器运行成功后,便会进行退出操作,紧接着启动下一个容器。- name: my-init-containerimage: busybox:1.28# 通过until命令判断是否已经存在了名称为tomcat的Service,只有存在了tomcat,nginx这个Pod才能够启动成功command: [ 'sh', '-c', 'until nslookup tomcat;do echo Waiting for Tomcat Service started...;sleep 60;done;' ]containers:- name: nginximage: nginx

如上,我们通过在spec.initContainers指定了初始化容器,并且通过" until nslookup tomcat" 去检查当前是否已经存在名称为tomcat的service,只有存在tomcat service,初始化容器才会退出。如果 Pod 的InitContainer执行失败,kubelet 会不断地重启该InitContainer直到该容器成功为止。但是,如果 Pod 对应的 restartPolicy 值为 "Never",并且 Pod 的InitContainer失败, 则 Kubernetes 会将整个 Pod 状态设置为失败。

创建并查看Pod: 

$ kubectl apply -f init-container-demo.yaml 
deployment.apps/nginx created# nginx pod一直处于Init:0/1,因为此时在执行initContainer的判断
$ kubectl get pod
NAME                     READY   STATUS     RESTARTS   AGE
nginx-7597c5f657-xfsvt   0/1     Init:0/1   0          4s# 当前不存在tomcat service
$ kubectl get svc tomcat
Error from server (NotFound): services "tomcat" not found# 查看my-init-container容器日志, 输出"Waiting for Tomcat Service started..."
$ kubectl logs nginx-7597c5f657-xfsvt -c my-init-container 
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.localWaiting for Tomcat Service started...
nslookup: can't resolve 'tomcat'

下面我们创建一个tomcat的service:

$ kubectl create service clusterip tomcat --tcp=8080
service/tomcat created$ kubectl get svc tomcat
NAME     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
tomcat   ClusterIP   10.104.182.210   <none>        8080/TCP   3s$ kubectl get pod 
NAME                     READY   STATUS    RESTARTS   AGE
nginx-7597c5f657-xfsvt   1/1     Running   0          2m6s

可以看到,当创建完tomcat service后,InitContainer将会等待至发现名称为tomcat的Service,判断成功后,退出初始化容器,然后nginx这个Pod就运行成功了。

当然,我们可以为一个 Pod 指定了多个InitContainer,这些容器会按顺序逐个运行。 每个InitContainer必须运行成功,下一个才能够运行。当所有的InitContainer运行完成时, Kubernetes才会为Pod 初始化应用容器,然后运行起来。配置大体如下: 

spec:containers:- name: myapp-containerimage: busybox:1.28command: ['sh', '-c', 'echo The app is running! && sleep 3600']initContainers:   # Init容器将会等待至发现名称为 mydb 和 myservice 的 Service- name: init-myserviceimage: busybox:1.28command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]- name: init-mydbimage: busybox:1.28command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]

 

相关文章:

18、Kubernetes核心技术 - InitContainer(初始化容器)

目录 一、概述 二、使用InitContainer 一、概述 InitContainer即初始化容器&#xff0c;是 K8S官方为我们提供的一个可以用来判断环境是否已经满足运行 Pod 应用前所需要的条件。 比如我们有一个应用&#xff0c;需要部署到Tomcat环境&#xff0c;那么在部署这个应用Pod之前…...

electron进程通信之预加载脚本和渲染进程对主进程通信

主进程和预加载脚本通信 主进程 mian,js 和预加载脚本preload.js,在主进程中创建预加载脚本, const createWindow () > {// Create the browser window.const mainWindow new BrowserWindow({width: 300,height: 300,// 指定预加载脚本webPreferences: {preload: path.j…...

如何有效使用 .gitignore 文件

在任何使用 Git 的软件项目中&#xff0c;.gitignore 文件都是一个必不可少的工具。它帮助开发者定义哪些文件和目录应该被 Git 忽略&#xff0c;从而保持代码库的整洁和管理的简便性。 什么是 .gitignore&#xff1f; .gitignore 文件是一个文本文件&#xff0c;您可以在其中指…...

大数据毕设分享 flink大数据淘宝用户行为数据实时分析与可视化

文章目录 0 前言1、环境准备1.1 flink 下载相关 jar 包1.2 生成 kafka 数据1.3 开发前的三个小 tip 2、flink-sql 客户端编写运行 sql2.1 创建 kafka 数据源表2.2 指标统计&#xff1a;每小时成交量2.2.1 创建 es 结果表&#xff0c; 存放每小时的成交量2.2.2 执行 sql &#x…...

大语言模型训练数据集

大语言模型的数据集有很多&#xff0c;以下是一些常用的&#xff1a; - 中文维基百科&#xff1a;这是一个包含大量中文文本的数据集&#xff0c;可用于训练中文语言模型。 - 英文维基百科&#xff1a;这是一个包含大量英文文本的数据集&#xff0c;可用于训练英文语言模型。 …...

python的课后练习总结4(while循环)

for循环用于针对序列中的每个元素的一个代码块。 while循环是不断的运行&#xff0c;直到指定的条件不满足为止。 while 条件&#xff1a; 条件成立重复执行的代码1 条件成立重复执行的代码2 …….. i 1while i < 5:print(i)i i 11、使用wh…...

Flink Connector 开发

Flink Streaming Connector Flink是新一代流批统一的计算引擎&#xff0c;它需要从不同的第三方存储引擎中把数据读过来&#xff0c;进行处理&#xff0c;然后再写出到另外的存储引擎中。Connector的作用就相当于一个连接器&#xff0c;连接Flink计算引擎跟外界存储系统。Flin…...

Golang leetcode707 设计链表 (链表大成)

文章目录 设计链表 Leetcode707不使用头节点使用头节点 推荐** 设计链表 Leetcode707 题目要求我们通过实现几个方法来完成对链表的各个操作 由于在go语言中都为值传递&#xff0c;&#xff08;注意这里与值类型、引用类型的而区别&#xff09;&#xff0c;所以即使我们直接在…...

Django和Vue项目运行过程中遇到的问题及解决办法

这是我从CSDN上边买来的一个系统的资源&#xff0c;准备在此基础上改成自己的系统&#xff0c;但是在运行项目这一步上都把自己难为了好几天&#xff0c;经过不断的摸索&#xff0c;终于完成了第一步&#xff01;&#xff01;&#xff01; 如果大家也遇到同样的问题&#xff0…...

Single-Image Crowd Counting via Multi-Column Convolutional Neural Network

Single-Image Crowd Counting via Multi-Column Convolutional Neural Network 论文背景人群密度方法过去的发展历史早期方法基于轨迹聚类的方法基于特征回归的方法基于图像的方法 Multi-column CNN用于人群计数基于密度图的人群计数通过几何自适应核生成密度图密度图估计的多列…...

el-cascader隐藏某一级的勾选框及vue报错Error in callback for watcher “options“的解决办法

今天用到饿了么的级联选择器时出现了这个报错Error in callback for watcher “options“: “TypeError: Cannot read propertie ‘level‘ of null,因为需求是在不同类型 el-cascader多选的时候默认是可以勾选所有级的选项的,如下图: 包含级联cascader的options、select的…...

2024美赛数学建模思路A题B题C题D题E题F题思路汇总 选题分析

文章目录 1 赛题思路2 美赛比赛日期和时间3 赛题类型4 美赛常见数模问题5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 美赛比赛日期和时间 比赛开始时间&#xff1a;北京时间2024年2月2日&#xff08;周五&#xff…...

C++ 常用设计模式

一、工厂模式 from&#xff1a;C开发常用的设计模式及其实现详解 - 知乎 摘抄&#xff1a; 简单工厂、工厂、抽象工厂&#xff1a; 简单工厂需要工厂内部判断&#xff0c;而工厂模式不需要修改工厂类&#xff1a; 抽象工厂&#xff1a; 接上图&#xff1a; 未完待续.........

高性价比的高速吹风机/高速风筒解决方案,基于普冉单片机开发

高速吹风机是近些年非常火的一款产品&#xff0c;快速崛起并颠覆了传统吹风机&#xff0c;高速吹风机也成为了传统吹风机替代的一个大趋势。高速吹风机是利用高转速产生的大风量来快速吹干头发&#xff0c;由于其精巧的外观设计、超低的噪声、出色的干发效果&#xff0c;高速吹…...

toRefs的用法

文章目录 toRefs是什么toRefs的作用以及为什么要用它&#xff1f; toRefs是什么 toRefs 是 Vue 3 Composition API 中的一个函数&#xff0c;它用于将响应式对象转换为普通对象&#xff0c;其中对象的每个属性都是 ref 对象。这是因为在 Vue 3 中&#xff0c;reactive 创建的对…...

MySQL基础篇(三)约束

一、概述 概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。 目的&#xff1a;保证数据库中数据的正确、有效性和完整性。 分类&#xff1a; 注意&#xff1a;约束是作用于表中字段上的&#xff0c;可以在创建表/修改表的时候添加约束。 二…...

Java进阶 1-2 枚举

目录 常量特定方法 职责链模式的枚举实现 状态机模式的枚举实现 多路分发 1、使用枚举类型实现分发 2、使用常量特定方法实现分发 3、使用EnumMap实现分发 4、使用二维数组实现分发 本笔记参考自&#xff1a; 《On Java 中文版》 常量特定方法 在Java中&#xff0c;我们…...

一个人最大的内驱力是什么?

1、不因为孤独或外界压力而降低「生活标准“」的能力。 ”因为寂寞去约炮“、“因为家里催婚匆忙结婚“、”因为没谈过恋爱随便找个人交往。 “你的每一次选择都是在为自己想要的世界而投的票&#xff0c;往后余生是幸福还是悲剧&#xff0c;就是在这一次次 的将就与坚持死磕中…...

解决方法:公众号的API上传素材报错40005

公众号的API上传素材报错40005 Error uploading file : {"errcode":40005,"errmsg":"invalid file type hint: [YOkxGA0122w487] rid: 223442-323247e7bd5-5d75322d88"}上传错误原因分析&#xff1a; 之前成功的示例&#xff0c;文件名为"…...

音量控制软件sound control mac功能亮点

sound control mac可以帮助用户控制某个独立应用程序的音量&#xff0c;通过每应用音量&#xff0c;均衡器&#xff0c;平衡和音频路由独立控制每个应用的音频&#xff0c;还有整个系统的音量。 sound control mac功能亮点 每个应用程序的音量控制 独立控制应用的数量。 键盘音…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

9-Oracle 23 ai Vector Search 特性 知识准备

很多小伙伴是不是参加了 免费认证课程&#xff08;限时至2025/5/15&#xff09; Oracle AI Vector Search 1Z0-184-25考试&#xff0c;都顺利拿到certified了没。 各行各业的AI 大模型的到来&#xff0c;传统的数据库中的SQL还能不能打&#xff0c;结构化和非结构的话数据如何和…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...