Kubernetes-容器的生命周期(init容器、健康检查探针、钩子)

news2024/11/25 2:20:11

目录

一、概述

二、init容器

1.概述

2.init容器作用

3.InitC容器示例

三、容器探针

1.概述

2.探针类型

3.readinessProbe-就绪检测示例

4.livenessProbe-存活检测示例

5.livenessProbe-tcp--检测端口模板

四、钩子

1.概述

2.yaml模板

3.示例


一、概述

1.当一个pod被创建的时候,会启动第一个容器pause。

         作用:挂载可能存在的存储卷,初始化网络栈,后来僵尸进程的杀死。维护。

2.pause容器启动后,就会启动另一个部分, 不是mainC,而是initC(初始化容器,initC>=0)

  initC初始化容器的特性:

  1. 线性启动:

    • 阻塞特性,前一个initC-1必须退出,后面的initC-2才会运行。执行退出命令的返回码为0,代表成功退出。如果initC启动过程中失败,出现错误,那么pause会重新开始创建initC-1,initC-2,initC-3等等。只有所有initC全部成功启动退出,才会继续往下运行。
  2. 独立于应用容器:

    • Init 容器可以有自己的独立镜像,这与应用容器使用的镜像可以完全不同。因此,它们具有其特殊的依赖和工具,不会影响应用容器的镜像构成。
  3. 运行到完成:

    • Init 容器必须在终止前运行到完成。它们不是用来启动长期运行的进程的。一旦它们成功执行了启动命令,它们就会终止。
  4. 重新启动策略:

    • 如果 Init 容器失败,Kubernetes 默认的重新启动策略是 'Always',它会一直重试直到容器成功为止。这与应用容器的启动失败策略是独立的。
  5. 资源限制:

    • 与应用容器一样,可以对 Init 容器设置资源请求和限制。
  6. 与应用容器共享卷:

    • Init 容器可以访问与应用容器相同的数据卷。这意味着它们可以用来准备或修改数据,这些数据后续将由应用容器使用。
  7. 运行环境隔离:

    • Init 容器和应用容器可以有不同的运行环境和根文件系统。它们甚至可以在不同的命名空间下执行,从而提供额外的安全隔离。

二、init容器

1.概述

       Pod 能够具有多个容器,应用运行在容器里面,但是它也可能有一个或多个先于应用容器启动的 Init 容器。

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

        1. Init 容器总是运行到成功完成为止

        2. 每个 Init 容器都必须在下一个 Init 容器启动之前成功完成

       如果 Pod 的 Init 容器失败,Kubernetes 会不断地重启该 Pod,直到 Init 容器成功为止。然而,如果 Pod 对应的 restartPolicy 为 Never,它不会重新启动。

2.init容器作用

       因为 Init 容器具有与应用程序容器分离的单独镜像,所以它们的启动相关代码具有如下优势:

       1. 可以包含并运行实用工具,但是出于安全考虑,是不建议在应用程序容器镜像中包含这些实用工具的。

       2. 应用程序镜像可以分离出创建和部署的角色,而没有必要联合它们构建一个单独的镜像。

       3. Init 容器使用 Linux Namespace,所以相对应用程序容器来说具有不同的文件系统视图。因此,它们能够具有访问 Secret 的权限,而应用程序容器则不能。        

       4. 它们必须在应用程序容器启动之前运行完成,而应用程序容器是并行运行的,所以 Init 容器能够提供了一种简单的阻塞或延迟应用容器的启动的方法,直到满足了一组先决条件。

3.InitC容器示例

vim initC-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.35.0
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.35.0
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox:1.35.0
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

kubectl apply -f initC-pod.yaml

kubectl get pod

kubectl describe pod myapp-pod

kubectl logs myapp-pod -c init-myservice
    #因为这里无法解析myservice的dns地址,所以才会报错

 

kubectl create svc clusterip myservice --tcp=80:80

kubectl get svc

kubectl get pod
    #这里只加载好一个是因为,只解析了myservice的DNS,找不到mydb的DNS,所以无法加载

kubectl create svc clusterip mydb --tcp=80:80

#稍等一会再次查看,就会加载完成
kubectl get pod

三、容器探针

1.概述

       探针是由 kubelet 对容器执行的定期诊断。要执行诊断,kubelet 调用由容器实现的 Handler。有三种类型的处理程序:

         (1)ExecAction:在容器内执行指定命令。如果命令退出时返回码为 0 则认为诊断成功。

         (2)TCPSocketAction:对指定端口上的容器的 IP 地址进行 TCP 检查。如果端口打开,则诊断被认为是成功的。

         (3)HTTPGetAction:对指定的端口和路径上的容器的 IP 地址执行 HTTP Get 请求。如果响应的状态码大于等于200 且小于 400,则诊断被认为是成功的

2.探针类型

       livenessProbe:指示容器是否正在运行。如果存活探测失败,则 kubelet 会杀死容器,并且容器将受到其 重启策略 的影响。如果容器不提供存活探针,则默认状态为 Success

       readinessProbe:指示容器是否准备好服务请求。如果就绪探测失败,端点控制器将从与 Pod 匹配的所有 Service 的端点中删除该 Pod 的 IP 地址。初始延迟之前的就绪状态默认为 Failure。如果容器不提供就绪探针,则默认状态为 Success

         存活探测:

                  探测失败:根据重启策略进行重载

                  探测成功:静默,等待下一次的存活探测

                  探测未知:静默,等待下一次探测

         就绪探测:如果mainC 不添加就绪探测,默认就绪,如果添加就绪探测,必须就绪通过后才标记就绪

                  探测失败:静默,等待下一次的探测

                  探测成功:将当前的未就绪状态,改为就绪

                  探测未知:静默,等待下一次探测

3.readinessProbe-就绪检测示例

vim readiness-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: readiness-httpget-pod
  namespace: default
  labels:
    app: myapp
    env: test
spec:
  containers:
  - name: readiness-httpget-container
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    readinessProbe:
      httpGet:
        port: 80
        path: /index1.html
      initialDelaySeconds: 1	#延迟的间隔是一秒
      periodSeconds: 3		#检测的间隔时间是3秒	
      timeoutSeconds: 3		#超时时间是3秒
kubectl create -f readiness-pod.yaml

kubectl get pod
    #未就绪状态,因为请求不到index1.html文件

kubectl exec -it readiness-httpget-pod -- /bin/sh
#pod中添加index1.html文件
cd /usr/share/nginx/html/

echo "123" > index1.html

exit

#就绪状态,可以正常对外提供访问
kubectl get pod

4.livenessProbe-存活检测示例

vim livenessProbe-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: liveness-exec-pod
  namespace: default
spec:
  restartPolicy: Never
  containers:
  - name: liveness-exec-container
    image: busybox:1.35.0
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","touch /tmp/live ; sleep 60; rm -rf /tmp/live; sleep 3600"]
    livenessProbe:
      exec:
        command: ["test","-e","/tmp/live"]	
      initialDelaySeconds: 1	#延迟的间隔是一秒
      periodSeconds: 3		#检测的间隔时间是3秒	
      timeoutSeconds: 3		#超时时间是3秒
kubectl apply -f livenessProbe-pod.yaml

kubectl get pod

kubectl get pod
    #再次查看,已处于error状态。
    #文件被删除,存活探测失败。

5.livenessProbe-tcp--检测端口模板

apiVersion: v1
kind: Pod
metadata:
  name: probe-tcp
spec:
  containers:
  - name: nginx
    image: nginx:latest
    livenessProbe:		#存活探测
      initialDelaySeconds: 5	#初始化间隔时间时5秒
      timeoutSeconds: 1		#超时时间是1秒
      periodSeconds: 3		#检测间隔是3秒
      tcpSocket:
        port: 80			#检测的端口是80

 说明:这种方式不太好,检测端口是否存在,不代表服务能正常响应。

四、钩子

1.概述

       Pod hook(钩子)是由 Kubernetes 管理的 kubelet 发起的,当容器中的进程启动前或者容器中的进程终止之前运行,这是包含在容器的生命周期之中。可以同时为 Pod 中的所有容器都配置 hook。

Hook 的类型包括两种:

         exec:执行一段命令

         HTTP:发送 HTTP 请求

启动后钩子可以编译软件,挂载存储。

关闭前钩子可以保存文件,解除存储。

2.yaml模板

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx:latest
    lifecycle:
      postStart:		#启动后
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
      preStop:			#关闭前
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the preStop handler > /usr/share/message"]

3.示例

vim lifecycle-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx:latest
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
      preStop:
        exec:
          command: ["/bin/sh", "-c", "echo Hello from the preStop handler > /usr/share/message"]
kubectl apply -f lifecycle-pod.yaml

kubectl get pod

kubectl exec -it lifecycle-demo -- /bin/sh
#pod中执行
while 2>1;do cat /usr/share/message;done
#再开一个终端删除pod,然后观察原终端的返回信息
kubectl delete pod --all

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GO+树莓派+E53_IA1智慧农业模块

简介 之前手头上有小熊派的开发板, 有一个E53_IA1模块, 刚好用到树莓派上, 使用GO进行控制,实现智慧农业模块功能。 模块介绍 模块电路介绍 按硬件分成五块, 其中四块在本次用上了, 分别是 1. 补光模块&…

C语言 | Leetcode C语言题解之第80题删除有序数组中的重复项II

题目&#xff1a; 题解&#xff1a; int removeDuplicates(int* nums, int numsSize) {if (numsSize < 2) {return numsSize;}int slow 2, fast 2;while (fast < numsSize) {if (nums[slow - 2] ! nums[fast]) {nums[slow] nums[fast];slow;}fast;}return slow; }

如何利用代理IP高效采集全球热点,赋能短视频创作?

如何利用代理IP高效采集全球热点&#xff0c;赋能短视频创作&#xff1f; 一、摘要二、代理IP1. 什么是代理IP&#xff1f;2. 代理IP的分类3. 代理的重要性 三、如何选择可靠的代理IP服务商&#xff1f;四、IPIDEA代理IP简介1.IPIDEA简介2.IPIDEA的优势 五、获取代理IP1. 注册平…

【数据结构】折半查找/二分查找 查找判定树+效率分析+完整代码

2.2 折半查找 算法思想 定义&#xff1a; 折半查找&#xff0c;又称二分查找&#xff0c;仅用于有序的顺序表。 实现思路&#xff1a; 1.设置low和high指针&#xff0c;分别在序列首尾&#xff1b; 2.取中间位置mid(lowhigh)/2&#xff1b; 3.若mid所指元素大&#xff0c;则去…

乡村振兴的乡村社会治理创新:创新社会治理模式,提升社会治理能力,构建乡村社会治理新格局,建设和谐美丽乡村

一、引言 乡村振兴是我国现代化进程中的重要战略&#xff0c;而乡村社会治理创新则是乡村振兴的关键环节。随着社会的不断发展和进步&#xff0c;传统的乡村社会治理模式已难以满足当前乡村发展的需要。因此&#xff0c;创新社会治理模式、提升社会治理能力、构建乡村社会治理…

04 贝尔曼最优公式

贝尔曼最优公式 前言1、Motivating examples2、Definition of optimal policy3、Bellman optimality equation(BOE)&#xff1a;Introduction4、 BOE&#xff1a;Maximization on the right-hand side5、BOE&#xff1a;Rewrite as v f(v)6、Contraction mapping theorem7、BO…

最新微信智能电子名片源码 全开源可二开 智能名片系统开发

在数字化日益深入人心的今天&#xff0c;名片已不再是简单的纸质交换工具&#xff0c;而是成为了一个展示个人或企业形象、促进商务交流的重要窗口。分享一款全新的微信智能电子名片系统&#xff0c;源码开源、可二次开发的灵活性&#xff0c;更在功能上进行了全面升级和优化&a…

MySQL软件安装基于压缩包

打开mysql官网网址 MySQL :: Download MySQL Community Server 本次针对版本8的安装包方式进行安装&#xff0c;下载成功后接下来对MySQL进行安装 下载后有一个以zip后缀结尾的压缩包文件 对于安装包方式安装&#xff0c;比起可视化安装省去了许多安装步骤&#xff0c;这里直接…

数据结构的二叉树(c语言版)

一.二叉树的概念 1.二叉树的基本概念 二叉树是一种常见的树状数据结构&#xff0c;它由若干个节点组成&#xff0c;这些节点通过边连接起来。每个节点最多可以有两个子节点&#xff0c;分别称为左子节点和右子节点。 二叉树的特点是每个节点最多有两个子节点&#xff0c;而且…

如何根据列值选择DataFrame中的行?

在Python的数据分析库Pandas中&#xff0c;DataFrame是一种非常强大的数据结构&#xff0c;用于存储和操作表格数据。有时&#xff0c;我们可能需要根据某些列的特定值选择DataFrame中的行。本文将介绍如何使用Pandas进行此类操作&#xff0c;并提供一些实用的示例。 基本原理…

商场学习之微服务

前言 寒假前在新电脑上配置了java环境&#xff0c;maven仓库&#xff0c;node,js&#xff0c;navicat&#xff0c;MySQL&#xff0c;linux&#xff0c;vmware等环境&#xff0c;创建了6个mysql数据库&#xff0c;77张表。 如此多的表&#xff0c;字段&#xff0c;去手写基础…

常用网口操作

目录 网卡闪烁识别 查看光口或者电口 电口查看链接 如何去掉ip地址 网卡闪烁识别 装好系统后&#xff0c;不知道哪个名称对应哪个网卡&#xff0c;可以执行下面的命令。此时物理网卡会一闪一闪&#xff0c;按住ctrc&#xff0c;停止闪烁。这样就不担心找错网卡啦。也不用一…

【计算机网络篇】数据链路层(8)共享式以太网的退避算法和信道利用率

文章目录 &#x1f6f8;共享式以太网的退避算法&#x1f95a;截断二进制指数算法 &#x1f354;共享式以太网的信道利用率 &#x1f6f8;共享式以太网的退避算法 在使用CSMA/CD协议的共享总线以太网中&#xff0c;正在发送帧的站点一边发送帧一边检测碰撞&#xff0c;当检测到…

宝塔面板怎么解决nginx跨域问题

1.找到宝塔的nginx配置文件 宝塔有一点不同&#xff0c;nginx配置文件不在nginx的安装目录中&#xff0c;应当去/www/server/panel/vhost/nginx找到 2.添加你要跨域的地址 location /api {proxy_pass http://localhost:8080;proxy_set_header Host $host;proxy_set_header X-…

故障电弧产生的原因以及相关设备介绍-安科瑞 蒋静

1故障电弧的危害 故障电弧是指由于电气线路或设备中绝缘老化破损、电气连接松动、空气潮湿、电压电流急剧升高等原因引起空气击穿所导致的气体游离放电现象。故障电弧发生时&#xff0c;其中心温度可高达3000 ℃左右&#xff0c;并伴随有金属喷溅物&#xff0c;足以引燃任何可…

消息队列——Kafka

1、什么是消息队列&#xff0c;什么是Kafka&#xff1f; 我们通常说的消息队列&#xff0c;简称MQ&#xff08;Message Queue&#xff09;&#xff0c;它其实就指消息中间件&#xff0c;比较流行的开源消息中间件有&#xff1a;Kafka、RabbitMQ、RocketMQ等。今天我们要介绍的…

用balenaEtcher烧录ubuntu的iso文件都失败,所以选用了另一种烧录的软件Rufus,然后烧录成功了+安装ubuntu的坑

https://releases.ubuntu.com/bionic/进入网页下载ubuntu 选择烧录软件将下载的Ubuntu烧录到U盘中 之前用这个U盘烧录过一次&#xff0c;成功了&#xff0c;后来应该是U盘受损或者是什么其他原因使得用这个U盘总是烧录失败 换思路&#xff1a;由于一直使用balenaEtcher烧录ubu…

FileZilla一款免费开源的FTP软件,中文正式版 v3.67.0

01 软件介绍 FileZilla 客户端是一个高效且可信的跨平台应用程序&#xff0c;支持 FTP、 FTPS 和 SFTP 协议&#xff0c;其设计宗旨在于为用户提供一个功能丰富且直观的图形界面。此客户端的核心特性包括一个站点管理器&#xff0c;该管理器能有效地存储和管理用户连接详情及登…

Penpad 品牌升级为Pencils Protocol,提供用户“一鱼多吃”

Penpad是Scroll生态中最大综合平台之一&#xff0c;目前其得到了Scroll官方以及社区的支持&#xff0c;是Scroll包括成就系统、忠诚度积分等系列计划的首批合作伙伴&#xff0c;同时其也得到了OKX Wallet在内的行业伙伴的长期支持。 目前Penpad正在开启生态通证的Launch活动&am…

centos7同步银河麒麟服务器SP系列外网yum源包同步不完整问题

centos7同步银河麒麟服务器SP系列外网yum源包同步不完整问题 一 问题描述二 解决方法三 外网源配置步骤 一 问题描述 Red 7.7 x86架构同步银河麒麟服务器SP arm架构外网源的yum包不完整问题&#xff0c;yum repolist查看源里面有15000左右的包&#xff0c;使用reposync命令同步…