Kubernetes之Pod初始化容器

news/2024/3/29 10:26:12/文章来源:https://blog.csdn.net/qq_29860591/article/details/128096399

Kubernetes之Pod初始化容器

概述

​ 初始化是很多编程语言普遍关注的问题,甚至有些编程语言直接支持模式构造来生成初始化程序,这些用于进行初始化的程序结构称为初始化器或初始化列表。初始化代码要首先运行,且只能运行一次,它们常用于验证前提条件、基于默认值或传入的参数初始化对象实例的字段等。Pod中的初始化容器(Init Container)功能与此类似,它们为那些有先决条件的应用容器完成必要的初始设置,例如设置特殊权限、生成必要的iptables规则、设置数据库模式,以及获取最新的必要数据等。

​ 有很多场景都需要在应用容器启动之前进行部分初始化操作,例如等待其他关联组件服务可用、基于环境变量或配置模板为应用程序生成配置文件、从配置中心获取配置等。初始化容器的典型应用需求有如下几种。

  • 用于运行需要管理权限的工具程序,例如iptables命令等,出于安全等方面的原因,应用容器不适合拥有运行这类程序的权限。
  • 提供主容器镜像中不具备的工具程序或自定义代码。
  • 为容器镜像的构建和部署人员提供了分离、独立工作的途径,部署人员使用专用的初始化容器完成特殊的部署逻辑,从而使得他们不必协同起来制作单个镜像文件。
  • 初始化容器和应用容器处于不同的文件系统视图中,因此可分别安全地使用敏感数据,例如Secrets资源等。
  • 初始化容器要先于应用容器串行启动并运行完成,因此可用于延后应用容器的启动直至其依赖的条件得以满足。

​ Pod对象中的所有初始化容器必须按定义的顺序串行运行,直到它们全部成功结束才能启动应用容器,因而初始化容器通常很小,以便它们能够以轻量的方式快速运行。某初始化容器运行失败将会导致整个Pod重新启动(重启策略为Never时例外),初始化容器也必将再次运行,因此需要确保所有初始化容器的操作具有幂等性,以避免无法预知的副作用。

​ Init 容器与普通的容器非常像,除了如下两点:

  • 它们总是运行到完成,即它的本身是有周期的,并不是像nginx,tomcat那样一直堵塞在那里。
  • 每个都必须在下一个启动之前成功完成,即在真正容器启动之前,初始化容器都要成功跑完。

应用

下面这个pod,会先在初始化容器中往挂载的路径的index.html写入12222222,然后nginx的挂载静态文件下,读取index.html

apiVersion: v1
kind: Pod
metadata:name: "pod-life"labels:app: "pod-life"
spec:volumes:- name: content-volemptyDir: {}initContainers:  ## Pod在启动containers之前,先要【运行完】initContainers的所有容器,所以这些容器必须有终结,不能一直运行- name: init-c-01image: alpine  ### 必须有终结的那个时刻,一般不要用一直启动的镜像command: ["/bin/sh","-c","echo 12222222 > /app/index.html;sleep 30;echo success;"]volumeMounts: - name: content-volmountPath: /appcontainers:### docker run alpine 没有在后台一直启动的程序- name: pod-life-01image: "nginx" #默认的启动命令是启动nginx。nginx启动在后台一直有了volumeMounts: - name: content-volmountPath: /usr/share/nginx/html- name: pod-life-02image: "alpine"  #pod里面的containers都必须能启动起来,Pod会不断的重启这个容器command: ["/bin/sh","-c","sleep 30"]

应用后,查看日志

[root@k8s-01 ~]# kubectl logs -f --tail 200 pod-life -c init-c-01
success
[root@k8s-01 ~]#

查看pod,发现请求nginx的首页已经变成12222222

[root@k8s-01 ~]# kubectl get pods -o wide
NAME                                      READY   STATUS    RESTARTS        AGE    IP               NODE     NOMINATED NODE   READINESS GATES
counter                                   1/1     Running   0               35h    10.244.165.198   k8s-03   <none>           <none>
nfs-client-provisioner-69b76b8dc6-ms4xg   1/1     Running   1 (6d18h ago)   18d    10.244.179.21    k8s-02   <none>           <none>
nginx-5759cb8dcc-t4sdn                    1/1     Running   0               32m    10.244.179.50    k8s-02   <none>           <none>
pod-life                                  2/2     Running   0               117s   10.244.179.52    k8s-02   <none>           <none>
[root@k8s-01 ~]# curl 10.244.179.52
12222222
[root@k8s-01 ~]#

如果这个时候将yaml的命令改错

image-20220620113326173

那么初始化容器就会一直报错,重试,真正的容器也不会运行

Every 1.0s: kubectl get pods                                                                                                  Mon Jun 20 11:34:12 2022NAME                                      READY   STATUS                  RESTARTS        AGE
counter                                   1/1     Running                 0               36h
nfs-client-provisioner-69b76b8dc6-ms4xg   1/1     Running                 1 (6d19h ago)   18d
nginx-5759cb8dcc-t4sdn                    1/1     Running                 0               47m
pod-life                                  0/2     Init:CrashLoopBackOff   3 (18s ago)     104s

实际应用

下面为kong的官方提供的yaml,就有一段初始化容器

initContainers:- command:- /bin/sh- -c- while true; do kong migrations list; if [[ 0 -eq $? ]]; then exit 0; fi;sleep 2;  done;env:- name: KONG_PG_HOSTvalue: postgres- name: KONG_PG_PASSWORDvalue: kongimage: kong:2.8name: wait-for-migrations

主要是查看是否对数据库进行初始化数据,外面嵌套一层循环,一直等待初始化完成,则退出循环,再启动kong,把命令拿出来到源码安装环境下执行:

[root@localhost ~]#  kong migrations list
2022/06/20 11:48:08 [warn] ulimit is currently set to "1024". For better performance set it to at least "4096" using "ulimit -n"
Executed migrations:core: 000_base, 003_100_to_110, 004_110_to_120, 005_120_to_130, 006_130_to_140, 007_140_to_150, 008_150_to_200, 009_200_to_210, 010_210_to_211, 011_212_to_213, 012_213_to_220, 013_220_to_230, 014_230_to_260, 015_260_to_270, 016_270_to_280acl: 000_base_acl, 002_130_to_140, 003_200_to_210, 004_212_to_213acme: 000_base_acmebasic-auth: 000_base_basic_auth, 002_130_to_140, 003_200_to_210bot-detection: 001_200_to_210canary: 001_200_to_210degraphql: 000_basegraphql-rate-limiting-advanced: 000_base_gql_rate_limitinghmac-auth: 000_base_hmac_auth, 002_130_to_140, 003_200_to_210ip-restriction: 001_200_to_210jwt: 000_base_jwt, 002_130_to_140, 003_200_to_210jwt-signer: 000_base_jwt_signer, 001_200_to_210key-auth: 000_base_key_auth, 002_130_to_140, 003_200_to_210key-auth-enc: 000_base_key_auth_enc, 001_200_to_210mtls-auth: 000_base_mtls_auth, 001_200_to_210, 002_2200_to_2300oauth2: 000_base_oauth2, 003_130_to_140, 004_200_to_210, 005_210_to_211openid-connect: 000_base_openid_connect, 001_14_to_15, 002_200_to_210proxy-cache-advanced: 001_035_to_050rate-limiting: 000_base_rate_limiting, 003_10_to_112, 004_200_to_210response-ratelimiting: 000_base_response_rate_limitingsession: 000_base_session, 001_add_ttl_indexvault-auth: 000_base_vault_authenterprise: 000_base, 006_1301_to_1500, 006_1301_to_1302, 010_1500_to_2100, 007_1500_to_1504, 008_1504_to_1505, 007_1500_to_2100, 009_1506_to_1507, 009_2100_to_2200, 010_2200_to_2211, 010_2200_to_2300, 010_2200_to_2300_1, 011_2300_to_2600, 012_2600_to_2700, 012_2600_to_2700_1, 013_2700_to_2800enterprise.acl: 001_1500_to_2100enterprise.basic-auth: 001_1500_to_2100enterprise.hmac-auth: 001_1500_to_2100enterprise.jwt: 001_1500_to_2100enterprise.key-auth: 001_1500_to_2100enterprise.key-auth-enc: 001_1500_to_2100enterprise.mtls-auth: 001_1500_to_2100, 002_2200_to_2300enterprise.oauth2: 001_1500_to_2100, 002_2200_to_2211enterprise.request-transformer-advanced: 001_1500_to_2100
enterprise.response-transformer-advanced: 001_1500_to_2100
[root@localhost ~]# echo  $?
0
[root@localhost ~]#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_38998.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAPM资产定价模型

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 CAPM(Capital Asset Pricing Model)资产定价模型 这个模型在金融界的影响就是beta这个词的使用。CAPM模型用两个部分的回报之和来解释一个资产的回报。其中一个部分是指市场&#xff08;称为market)…

时间序列:时间序列模型---自回归过程(AutoRegressive Process)

本文是Quantitative Methods and Analysis: Pairs Trading此书的读书笔记。 这次我们构造一个由无限的白噪声实现&#xff08;white noise realization) 组成的时间序列&#xff0c;即。这个由无限数目的项组成的值却是一个有限的值&#xff0c;比如时刻的值为&#xff0c; 而…

Magic Leap 2设计和开发幕后花絮

Magic Leap今年发布新款AR头显Magic Leap 2&#xff0c;相比于上一代Magic Leap 1&#xff0c;新品更专注于B端场景&#xff0c;自公布以来&#xff0c;Magic Leap不仅对公司策略、理念更加透明&#xff0c;也不断公开ML2产品设计背后的思考。相比于ML1&#xff0c;ML2的设计有…

粒子群算法查找函数最小值

实现 函数 F01、F06 的优化测试 以下内容是现有算法的运行结果、调参分析、及代码实现&#xff0c;用于给其他人提供参考&#xff0c;懒得改了hh 1. 运行结果 参数 w 0.5 &#xff08;可更改&#xff09; c1 2.0 &#xff08;可更改&#xff09; c2 2.0 &#xff08;可更改&…

Echart 柱状图,X轴斜着展示

option { color: [‘#3398DB’], tooltip: { trigger: ‘axis’, axisPointer: { // 坐标轴指示器&#xff0c;坐标轴触发有效 type: ‘shadow’ // 默认为直线&#xff0c;可选为&#xff1a;‘line’ | ‘shadow’ } }, grid: { left: ‘3%’, right: ‘4%’, bottom: ‘3%’…

iPhone升级iOS 16后出现提示“面容ID不可用”怎么办?

最近&#xff0c;很多用户在苹果社区反馈&#xff0c;iPhone升级iOS 16后Face ID不能用了&#xff0c;尝试重置Face ID时&#xff0c;系统会弹窗提示“面容ID不可用&#xff0c;稍后尝试设置面容ID。” 如果你的iPhone在没有摔落手机或是手机进水的情况下出现这个弹窗&#xff…

【uniapp小程序】路由跳转navigator传参封装

文章目录&#x1f34d;前言&#x1f34b;正文1、看官网1.1 navigator API 介绍1.2、路由跳转参数传递1.3、五种常见的跳转方式1.3.1 uni.navigateTo(OBJECT)1.3.2 uni.redirectTo(OBJECT)1.3.3 uni.reLaunch(OBJECT)1.3.4 uni.switchTab(OBJECT)1.3.5 uni.navigateBack(OBJECT)…

图的初识·基本概念

文章目录基本概念图有两种基本形式无向图的表示有向图的表示基本概念 图结构也是数据结构的一部分。而且还有一点小难。图是由多个结点链接而成的&#xff0c;但是一个结点可以同时连接多个其他结点&#xff0c;多个节点也可以同时指向一个节点。【多对多的关系】 图结构是任意…

如何从报表控件FastReport .NET中连接到 PostgreSQL 数据库?

FastReport.NET官方版下载 Fastreport是目前世界上主流的图表控件&#xff0c;具有超高性价比&#xff0c;以更具成本优势的价格&#xff0c;便能提供功能齐全的报表解决方案&#xff0c;连续三年蝉联全球文档创建组件和库的“ Top 50 Publishers”奖。 慧都科技是Fast Repor…

mysql索引类别和失效场景

首先&#xff0c;我们为什么要使用索引&#xff0c;索引有什么作用呢&#xff1f; 索引可以用来快速查询数据表中有某一特定值的记录&#xff0c;大大加快数据的查询速度&#xff1b;在列上创建了索引之后&#xff0c;查找数据时可以直接根据该列上的索引找到对应记录行的位置…

YOLO X 改进详解

YOLO X 主要改进&#xff1a; Anchor-Free: FCOSDecoupled detection headAdvanced label assigning strategy Network structure improvement Decoupled detection head 对比于YOLO V5, YOLO X 在detection head上有了改进。YOLO V5中&#xff0c;检测头是通过卷积同时预…

视频编解码 - RTP 与 RTCP

目录 RTP 实时传输协议 RTCP协议 将H264 RTP打包 RTP 实时传输协议 音视频数据传输&#xff0c;先将原始数据经过编码压缩后&#xff0c;将码流打包成一个个RTP包&#xff0c;再将码流传输到接收端。 打包的作用 接收端要正确地使用这些音视频编码数据&#xff0c;不仅仅需…

JaVers:自动化数据审计

在开发应用程序时&#xff0c;我们经常需要存储有关数据如何随时间变化的信息。此信息可用于更轻松地调试应用程序并满足设计要求。在本文中&#xff0c;我们将讨论 JaVers 工具&#xff0c;该工具允许您通过记录数据库实体状态的更改来自动执行此过程。 Javers如何工作&#x…

vue Router

Vue项目各文件含义 1.src文件夹 是我们真正敲代码的文件夹&#xff0c; 2.assets放静态资源 3.components放组件 4.App.vue主组件 5.main.js项目的入口文件 Vue Router 在router/index.js路由文件中配置路由&#xff0c;设置路由跳转规则 import Vue from vue import Vu…

android Framework 中用到了哪些跨进程通信方式?

文章目录Linux 有哪些跨进程的通信方式&#xff1f;管道本地 Socket共享内存信号Linux 有哪些跨进程的通信方式&#xff1f; Binder 机制是Android基于Linux的一种独特的IPC机制。我们常用的AMS&#xff0c;PMS 等都是通过Binder机制来完成跨进程通信的&#xff0c;那么除了Bin…

【并发】深入理解Java线程的底层原理

线程基础知识 线程与进程 进程 操作系统会以进程为单位&#xff0c;分配系统资源&#xff08;CPU时间片、内存等资源&#xff09;&#xff0c;进程是资源分配的最小单位。 当一个程序被运行&#xff0c;从磁盘加载这个程序的代码至内存&#xff0c;这时就开启了一个进程。 线…

使用 Mason 创建自己的 Flutter brick

使用 Mason 创建自己的 Flutter brick 原文 https://medium.com/gytworkz/create-your-own-flutter-brick-using-mason-7abc70d0324e 前言 谁不喜欢用最少的努力完成大部分事情呢&#xff1f;我当然知道! &#xff01;Mason 帮我完成了几个简单的步骤。 在本文中&#xff0c;我…

Redis——》数据类型:List(列表)

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Redis——》数据类型&#xff1a;List&#xff08;列表&#xff09;一、简介…

复现黑客在后门中藏匿后门

PHP实现在后门中藏匿后门 在攻击渗透的时候会传入shell后门方便进行远控。其中的后门包括多种类型&#xff0c;大马是功能最全的直接提供了可视化的界面方便攻击者进行提权、扫描、上传等一系列的操作。 但有很多hacker不讲武德&#xff0c;在写好的大马中藏入自己的后门&…

VBA Regex 正则表达式应用介绍

. VBA正则表达式介绍 正则表达式或 RegEx 用于在字符串中查找特定的字符。 本文将展示一个 VBA RegEx 示例,并演示为什么在 VBA 中使用正则表达式如此强大。 正则表达式是一个比较大的话题,关于这方面的书很多。 同时也是一个让许多人感到害怕的话题,因为它的语法比较神秘和…