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

k8s-init容器学习

Init容器学习

  • 1. 什么是Init容器
  • 2. Init容器和普通容器有什么区别
  • 3. 同时存在Init和业务容器Pod资源如何申请
  • 4. 创建Init容器

1. 什么是Init容器

Init容器会在业务容器启动之前运行一些初始化动作,Pod可以包含一个或者多个Init容器,只有所有的Init容器运行成功后,业务容器才会运行,如果期间有Init容器运行失败,kubelet 会不断地重启该 Init 容器直到该容器成功为止,如果Pod 对应的 restartPolicy 值为 “Never”,并且 Pod 的 Init 容器失败, 则 Kubernetes 会将整个 Pod 状态设置为失败。

在这里插入图片描述

2. Init容器和普通容器有什么区别

Init容器不支持lifecyclelivenessProbestartupProbereadinessProbe这些粗活就绪探针,因为Init容器完成任务就退出了。

3. 同时存在Init和业务容器Pod资源如何申请

如下场景,下面只包含内存一种资源

spec:# Init容器:按顺序执行,全部完成后才启动业务容器initContainers:- name: init-container-aimage: busybox:1.35command: ["/bin/sh", "-c", "echo 'Init Container A running'; sleep 10"]  # 模拟初始化操作resources:requests:memory: "20M"  # 申请20M内存limits:memory: "100M"  # 限制最大使用100M内存- name: init-container-bimage: busybox:1.35command: ["/bin/sh", "-c", "echo 'Init Container B running'; sleep 15"]  # 模拟初始化操作resources:requests:memory: "100M"  # 申请100M内存limits:memory: "200M"  # 限制最大使用200M内存# 业务容器:并行启动containers:- name: app-container-aimage: nginx:alpineports:- containerPort: 80resources:requests:memory: "2G"  # 申请2G内存limits:memory: "8G"  # 限制最大使用8G内存- name: app-container-bimage: redis:alpineports:- containerPort: 6379resources:requests:memory: "1G"  # 申请1G内存limits:memory: "2G"  # 限制最大使用2G内存# 重启策略:默认Always,Init容器失败会自动重启restartPolicy: Always

资源申请如下:

init-container-a: 
request.memory: 20M
limits.memory: 100Minit-container-b:
request.memory: 100M
limits.memory: 200Mapp-container-a:
request.memory: 2G
limits.memory: 8Gapp-container-b:
request.memory: 1G
limits.memory: 2G

Pod申请资源原理:取Init或者业务容器limit 或 request 的最大值,下面计算一下:

Init是串行,所以资源不需要累加:
request.memory: 100M
limits.memory: 200M
如上是Init所需的最大request和limits

业务容器是并行的,所以资源需要累加:
request.memory: 3G
limits.memory: 10G

Pod在申请资源时一定要保证Init容器可以正常运行,所以Init和业务容器谁的request,limits大就按照谁的资源申请配置取申请资源。

4. 创建Init容器

下面将创建一个卷,使用Init容器将业务容器nginx的index文件修改掉
在这里插入图片描述

nginx-po.yaml:

apiVersion: v1
kind: Pod
metadata:name: nginx
spec:containers:- name: nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80volumeMounts:- name: htmlmountPath: /usr/share/nginx/htmlresources:requests:cpu: "50M"memory: "64Mi"limits:cpu: "100m"memory: "128Mi"# 通过initContainers创建Init容器,和普通容器创建一样,Init容器名和业务容器名必须唯一。initContainers:- name: installimage: busybox:1.28imagePullPolicy: IfNotPresentcommand:- /bin/sh- -c- |echo "This is an experimental test of the Init container." > /usr/share/nginx/html/index.htmlvolumeMounts:- name: htmlmountPath: "/usr/share/nginx/html"resources:requests:cpu: "10m"memory: "16Mi"limits:cpu: "20m"memory: "32Mi"volumes:- name: htmlemptyDir: {}
kubectl apply -f nginx-po.yaml

查看Pod状态:

kubectl get pod
NAME    READY   STATUS     RESTARTS   AGE
nginx   0/1     Init:0/1   0          29s

可以看出有一个Init容器正在执行,查看一下事件:

kubectl describe pod nginx
Events:Type    Reason     Age    From               Message----    ------     ----   ----               -------Normal  Scheduled  2m58s  default-scheduler  Successfully assigned default/nginx to k8s-node01Normal  Pulling    2m23s  kubelet            Pulling image "busybox:1.28"Normal  Pulled     99s    kubelet            Successfully pulled image "busybox:1.28" in 44.089s (44.089s including waiting). Image size: 1146369 bytes.Normal  Created    99s    kubelet            Created container: installNormal  Started    99s    kubelet            Started container installNormal  Pulling    98s    kubelet            Pulling image "nginx"Normal  Pulled     95s    kubelet            Successfully pulled image "nginx" in 2.763s (2.763s including waiting). Image size: 192385289 bytes.Normal  Created    95s    kubelet            Created container: nginxNormal  Started    95s    kubelet            Started container nginx

查看Init容器状态

kubectl describe pod nginx
Init Containers:install:Container ID:  docker://0f6b2f03b7820a7c7358d64f97bf8e3ae018cb993f21868cddff57515a1f0527Image:         busybox:1.28Image ID:      docker-pullable://busybox@sha256:141c253bc4c3fd0a201d32dc1f493bcf3fff003b6df416dea4f41046e0f37d47Port:          <none>Host Port:     <none>Command:/bin/sh-cecho "This is an experimental test of the Init container." > /usr/share/nginx/html/index.htmlState:          TerminatedReason:       CompletedExit Code:    0Started:      Fri, 12 Sep 2025 09:10:40 +0800Finished:     Fri, 12 Sep 2025 09:10:41 +0800Ready:          TrueRestart Count:  0Limits:cpu:     20mmemory:  32MiRequests:cpu:        10mmemory:     16MiEnvironment:  <none>Mounts:/usr/share/nginx/html from html (rw)/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-4lzl2 (ro)

通过字段State下的ReasonExit Code可以看出Init容器已经完成退出了,且返回值为0。


文章转载自:

http://DgNIA6Kt.mdpcz.cn
http://xESvj3ow.mdpcz.cn
http://uB3choPD.mdpcz.cn
http://MRv9CWSK.mdpcz.cn
http://ivsrVilI.mdpcz.cn
http://V7MtdmfY.mdpcz.cn
http://V23hcrfn.mdpcz.cn
http://9f3Kj8i5.mdpcz.cn
http://UoKFT4vo.mdpcz.cn
http://g4GaFulX.mdpcz.cn
http://ZTd2lGWE.mdpcz.cn
http://bAGDZwuj.mdpcz.cn
http://24bIO9VZ.mdpcz.cn
http://etrswmum.mdpcz.cn
http://UJH8QUUc.mdpcz.cn
http://UJ034MwQ.mdpcz.cn
http://kig2deVK.mdpcz.cn
http://XXdLKiMI.mdpcz.cn
http://m8whXo7z.mdpcz.cn
http://R46xD2WC.mdpcz.cn
http://74dJk8Rs.mdpcz.cn
http://sCK0EdFt.mdpcz.cn
http://PHsPN9LT.mdpcz.cn
http://Z14mskTd.mdpcz.cn
http://dbO5ztbs.mdpcz.cn
http://vXkRbhMp.mdpcz.cn
http://nU5DoD9q.mdpcz.cn
http://fyEaqTm6.mdpcz.cn
http://V1NuvKFs.mdpcz.cn
http://zT7nQFoT.mdpcz.cn
http://www.dtcms.com/a/379890.html

相关文章:

  • 【算法磨剑:用 C++ 思考的艺术・Dijkstra 实战】弱化版 vs 标准版模板,洛谷 P3371/P4779 双题精讲
  • Java大厂面试实录:产业互联网大数据与AI服务场景下的微服务与智能搜索(含详细解读)
  • 苍穹外卖项目笔记day08
  • 智能逗猫球方案MCU控制方案浅析-智能宠物玩具,宠物解闷神器
  • Unity键盘控制角色运动
  • 大数据毕业设计-基于Spark的全国高速公路实时路况融合与拥堵预测系统(高分计算机毕业设计选题·定制开发·真正大数据)
  • zmq源码分析之session
  • Xcode 上传 ipa 全流程详解 App Store 上架流程、uni-app 生成 ipa 文件上传与审核指南
  • Java 泛型详解:从基础到高级应用
  • 第6.2节 Android Agent开发<二>
  • ubuntu挂载新硬盘的方法
  • Kubernetes Ingress:使用 Apache APISIX 进行外部流量路由
  • 初学者如何选择适合的云平台进行AIGC训练?
  • Docker存储卷(Volume)完全指南:从入门到精通
  • STM32-FreeRTOS操作系统-二值信号量与计数信号量
  • 蒸面器/蒸脸仪方案开发,蒸面器/蒸脸仪MCU控制方案分析
  • 容器技术崛起:从PaaS到Docker的变革探问
  • 如何定位Mysql慢查询和短而频的查询
  • 机器学习的基本流程:从数据到模型
  • springboot rabbitmq 消息队列入门与实战
  • 使用vllm部署neo4j的text2cypher-gemma-2-9b-it-finetuned-2024v1模型
  • 栈-844.比较含退格的字符串-力扣(LeetCode)
  • [Dify] HTTP 请求节点详解:如何在 Dify 中配置与调用第三方 API
  • SQL优化简单思路
  • 构建AI智能体:三十一、AI医疗场景实践:医学知识精准问答+临床智能辅助决策CDSS
  • HTTP的Web服务测试在Python中的实现
  • 华为HCIE-云计算培训课程有哪些?
  • 绕过 FlashAttention-2 限制:在 Turing 架构上使用 PyTorch 实现 FlashAttention
  • 美食分享|基于Springboot和vue的地方美食分享网站系统设计与实现(源码+数据库+文档)
  • 华为HICE云计算的含金量高吗?