十五、Kubernetes中Pod生命周期详解、实例

news2024/9/24 3:25:53

1、概述

我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期,它主要包含下面的过程:

  • pod创建过程

  • 运行初始化容器(init container)过程

  • 运行主容器(main container)

    • 容器启动后钩子(post start)、容器终止前钩子(pre stop)

    • 容器的存活性探测(liveness probe)、就绪性探测(readiness probe)

  • pod终止过程

在整个生命周期中,Pod会出现5种状态相位),分别如下:

  • 挂起(Pending):apiserver已经创建了pod资源对象,但它尚未被调度完成或者仍处于下载镜像的过程中

  • 运行中(Running):pod已经被调度至某节点,并且所有容器都已经被kubelet创建完成

  • 成功(Succeeded):pod中的所有容器都已经成功终止并且不会被重启

  • 失败(Failed):所有容器都已经终止,但至少有一个容器终止失败,即容器返回了非0值的退出状态

  • 未知(Unknown):apiserver无法正常获取到pod对象的状态信息,通常由网络通信失败所导致

2、 Pod创建过程

  • (1)用户通过kubectl或其他api客户端提交需要创建的pod信息给apiServer

  • (2)apiServer开始生成pod对象的信息,并将信息存入etcd,然后返回确认信息至客户端

  • (3)apiServer开始反映etcd中的pod对象的变化,其它组件使用watch机制来跟踪检查apiServer上的变动

  • (4)scheduler发现有新的pod对象要创建,开始为Pod分配主机并将结果信息更新至apiServer

  • (5)node节点上的kubelet发现有pod调度过来,尝试调用docker启动容器,并将结果回送至apiServer

  • (6)apiServer将接收到的pod状态信息存入etcd中

3、Pod终止过程

  • (1)用户向apiServer发送删除pod对象的命令

  • (2)apiServcer中的pod对象信息会随着时间的推移而更新,在宽限期内(默认30s),pod被视为dead

  • (3)将pod标记为terminating状态

  • (4)kubelet在监控到pod对象转为terminating状态的同时启动pod关闭过程

  • (5)端点控制器监控到pod对象的关闭行为时将其从所有匹配到此端点的service资源的端点列表中移除

  • (6)如果当前pod对象定义了preStop钩子处理器,则在其标记为terminating后即会以同步的方式启动执行

  • (7)pod对象中的容器进程收到停止信号

  • (8)宽限期结束后,若pod中还存在仍在运行的进程,那么pod对象会收到立即终止的信号

  • (9)kubelet请求apiServer将此pod资源的宽限期设置为0从而完成删除操作,此时pod对于用户已不可见

4、初始化容器

初始化容器是在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

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

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

相关文章

对于负载均衡服务器一致性哈希算法一些简单的想法

文章目录一致性哈希负载均衡的介绍一致性哈希负载均衡的介绍 负载均衡这个概念可以抽象为:从n个候选服务器中选择一个进行通信。 负载均衡算法有:随机,轮询,最小连接数等。今天的“猪脚”是一致性哈希负载均衡算法; 一…

Java语法:枚举

1.枚举是什么? 枚举是Java中的一种特殊类型。 2.枚举的作用 是为了做信息的标志和分类。 3.枚举的语法 定义语法: 修饰符 enum 枚举名称 {第一行都是罗列枚举类实例的名称。 } /*** 枚举类*/ public enum Season {//枚举的第一行必须罗列枚举类的…

流量劫持的危害及应对方法

流量劫持总体来说属于中间人攻击的一种,本质上攻击者在通信两端之间对通信内容进行嗅探和篡改,以达到插入数据和获取关键信息的目的。目前互联网上发生的流量劫持基本是两种手段来实现的: 域名劫持:通过劫持掉域名的DNS解析结果,…

那些年,我们crush的爆款小游戏大盘点

小游戏,即小程序游戏,是小程序的一个子类目,其最大的特点就是“即点即玩”,具备出色的用户体验。如今大家的生活逐渐向快节奏发展,在各种压力下,人们更倾向于方便快捷的娱乐方式,而这正推动了小…

一年时间,拿到了人生中的第一个20万

目录一、2021年度博客之星评选第二名二、博客新星导师三、哪吒社区四、粉丝群五、付费专栏六、Java学习路线总结,搬砖工逆袭Java架构师七、关于读书八、你好2023一、2021年度博客之星评选第二名 2022年,是哪吒收获的一年,收获了人生中的第一…

Java虚拟机(JVM)面试专题 下(初级程序员P6)

Java虚拟机(JVM)面试专题 下(初级程序员P6) 六、四种引用 1. 强引用 普通变量赋值即为强引用,如 A a new A(); 通过 GC Root 的引用链,如果强引用不到该对象,该对象才能被回收 2. 软引用&a…

Redis架构 - Cluster集群模式

简介 Redis Cluster是Redis数据库的分布式解决方案,它能够将数据分布在多个Redis节点之间,从而提高数据的存储和访问能力。 Redis Cluster使用哈希槽(hash slot)机制来将数据分布在多个节点之间。每个节点都负责存储一定数量的哈…

LabVIEW NI Switch Executive是什么

LabVIEW NI Switch Executive是什么NI Switch Executive是一款智能开关管理与路由应用程序。它掀起了自动化测试设备(ATE)系统开关软件的新革命。借助NI Switch Executive,以交互方式配置和命名开关模块、外部连接和信号路由,从而提高开发效率。此外&…

Python笔记 -- 字符串和数字

文章目录1、print2、字符串2.1、改变大小写2.2、字符串拼接2.3、转义符2.4、移除空白3、数字3.1、运算3.2、下划线,多变量赋值python中定义变量时不需要指定数据类型 1、print print(1, 2, 3, 4, sep, end) print(10) print(1,2,3,4) #没写 sep 和 end 相当于 sep…

【开源代码】首个利用神经网络能够明确推断VIO中 IMU bias演化的方法

以下内容来自从零开始机器人SLAM知识星球 每日更新内容 点击领取学习资料 → 机器人SLAM学习资料大礼包 #论文##开源代码# Deep IMU Bias Inference for Robust Visual-Inertial Odometry with Factor Graphs 论文地址:https://arxiv.org/abs/2211.04517 作者单…

【尚医通】微信扫码登录和手机号登录冲突问题解决思路

【尚医通】微信扫码登录和手机号登录冲突问题解决思路 问题描述 最近做尚医通遇到一个问题,微信扫码登录和手机号登录在 特殊情况 下会发生冲突,导致无法登录的问题。下面就描述一下几种情况。 正常情况:用户第一次一上来就使用微信扫码登…

一碗云南米线,加剧速食食品赛道“内卷”?

说起云南,人们的印象往往是藏在苍山洱海、玉龙雪山里的风花雪月。然而,生活中最常见的“滇味”,却是一碗鲜香美味、软中带劲的米线。近年来,从广西的螺蛳粉到河南的酸辣粉,越来越多带着地域特色的主食被装进小小纸桶&a…

[ Azure - Subscriptions ] 解决办法:此订阅未在 Microsoft.Insights 资源提供程序中注册

问题描述 在使用新的 Azure 订阅中某个服务的时候出现错误,错误信息为:“此订阅未在 Microsoft.Insights 资源提供程序中注册。” 本文发生的示例是在使用 Azure Monitor 时,出现了该错误。 英文的错误提示: To run this query…

日本知名汽车零部件公司巡礼系列之株式会社141

株式会社141 业务内容: (发动机系、燃料系、排气管系)・A机器零件(打印机用零件) 搬运设备部件(导轨部件)・小型马达用部件(轴类、壳体类、辅助部件) 公司简介&#x…

如何外网访问登录员工管理系统平台

员工管理系统平台网站是企业常用办公工具之一,为了安全性和稳定性,一般都部署在公司内部内网web服务器上,在办公室内通过内网IP端口进行登录访问。那么,如何实现在外网或者在家也能访问公司内网的管理网站呢? 今天给大…

Spring Data JPA @DomainEvents 发布领域事件以及遇到的坑。

文章目录发布领域事件监听领域事件遇到的问题发布领域事件 通过repositories管理的实体是聚合根。在领域驱动设计(DDD)的应用中,这些聚合根通常会发布领域事件。Spring Data提供了一个名为DomainEvents的注解,可以在聚合根的一个方法上使用该注解&#…

JD青龙面板任务代理池部署与使用教程

JD脚本中一些任务会黑ip 导致没法跑或者跑不出东西 比如联盟跑出来全是劵 这时候就需要代理池 本文为3步 1.购买设置代理 2.部署代理池 3.脚本配置代理池 使用效果展示 1.设置代理 代理推荐购买星空 点我查看星空代理 按下图购买及生成API API填入部署的配置中(下文有说)…

ThinkPHP 之 SQLI审计分析(三)

说明 该文章来源于徒弟lu2ker转载至此处,更多文章可参考:https://github.com/lu2ker/ 文章目录说明0x00 测试代码做了什么0x01 分析调用链0x03 总结Time:9-23影响版本:ThinkPHP5.1.22 Payload: /public/index.php/i…

万物皆可集成系列:低代码对接微信小程序

近年来,微信小程序的开发如火如荼,很多移动端应用为了更方便被大家所使用的,都步入了小程序的行列 那么对于低代码平台开发的移动端应用是否可以和小程序集成呢?这里我以微信小程序为例。为大家介绍如何在 首先,众所…

ELF格式学习

ELF格式学习 一、简介 ELF的英文全称是Executable and Linking Format,最初是由UNIX系统实验室开发、发布的ABI(Application Binary Interface)接口的一部分,也是Linux的主要可执行文件格式。 ELF文件种类: 可执行文件(.out&a…