k8s---Pod的生命周期
Pod是什么?
pod是k8s中最小的资源管理组件。
pod也是最小化运行容器化应用的资源管理对象。
pod是一个抽象的概念,可以理解为一个或者多个容器化应用的集合
在一个pod当中运行一个容器是最常用的方式
在一个pod当中可以同时运行多个容器,一个pod当中可以同时封装几个需要耦合的互相协作的容器。这些容器是共享资源的,也可以互相协作组成一个service单位。
不论运行一个容器还是多个容器,k8s管理的都是pod而不是容器。
一个pod内的多个容器必须都运行在同一个node节点上
基于现代容器技术的要求。最常用的就是1个pod运行1个容器,1个容器只运行一个进程目的是为了横向扩展方便扩缩容和解耦。这样管理方便,简单直观。
1个pod内运行多个容器,耦合度太高。一旦一个进程失败,整个pod将全部失败。实现解耦,基于pod可以创建多个副本,实现高可用和负载均衡。
pause容器
pod内的容器共享资源。
共享机制:pause底层基础容器来提供共享资源的机制。
pause是基础容器,也可以称为父容器。管理pod内容器的共享操作。
pause还可以管理容器的生命周期。
k8s提供了pause容器两大核心功能:
-
为pod内的所有容器提供一个的命名空间。只有都在同一个命名空间内才可以共享资源。
-
启动容器的pid(进程号)命名空间,每个pod中都作为pid为1的进程(init进程),回收僵尸进程。
-
当创建pod时会先创建1个pause容器,然后再拉取镜像生成容器
pause会在每个pod中创建一个pid为1的进程来管理pod中的进程。包括回收僵尸进程。
kubelet管理node节点
pause管理pod内的容器
1、 master节点发出指令,pod使用的镜像nginx,pod的副本数
2、 kube-scheduler来分配执行的node节点
3、 node节点的kubelet收到master指令,先拉pause再拉nginx镜像
4、 pause容器先启动,提供命名空间,进程管理pid1。来为pod内的容器提供共享服务以及容器的进程管理。
pause容器共享两种资源:网络资源、存储资源
网络资源:每个pod都会被分配一个集群内部的唯一IP地址。pod内的容器共享网络。pod在集群内部的IP地址和端口。
pod内部的容器可以使用localhost互相通信。pod中的容器与外部通信时,从共享的资源当中进行分配,宿主机的端口映射。
pod可以指定多个共享的volume。pod内的容器共享这些vloume。volume可以实现数据的持久化。可以防止pod重新构建后文件丢失。
总结
每个pod都有1个pause基础容器
pause容器对应的镜像属于k8s集群的一部分。创建集群就会有pause这个基础镜像。
pod里面包含了一个或者多个相关的容器(应用)
pod外设置一个基础镜像:
1、 pod内部有一组容器挂了一个,就算pod失效了吗?
引入pause禁止,代表整个容器的组状态。可以解决对pod内部容器整体状态的判断
2、 pod内容器共享IP共享volume挂在卷,解决了容器内网络通信的问题。解决了容器内文件共享的问题。
pod的分类
自主式pod:这个pod不会自我修复。如果pod内容器的进程终止或者被删除或者缺少资源被驱逐。这个pod没有办法自愈。
只要不是基于deployment、daemanset资源控制器创建的都是自主式pod
控制器管理pod:滚动升级,可以自愈(可以自动重启)可以管理pod的数量,以及pod的扩缩容
pod的生命周期状态
1、 pending---挂起:表示pod已被创建,但是尚未被分配到运行的node节点。
可能有几种情况导致:
-
节点上资源不够
-
需要等待其他pod的调度等
2、 running---运行中:pod已经被分配到了node节点。pod内部的所有容器都已经启动。运行状态良好正常稳定。
3、 complete/successded:表示容器内部的进程运行完毕后正常退出。没有发生错误。
4、 faild:表示pod中的容器非正常退出。发生了错误。需要通过查看详情和日志来定位问题。
5、 UNknown:表示由于某些原因,k8s集群无法获取pod的状态。一般是APIserver出现问题。
6、 terminating:表示终止中。表示pod正在被删除,内部容器正在终止。终止过程中涉及到资源回收,垃圾清理以及终止过程中需要执行的命令。所以需要时间终止。
Pod生命周期图:
1、 先有pause基础容器才会创建初始化init容器
2、 初始化容器运行完毕而且是成功运行完毕后才会创建pod的主业务容器
在容器的生命周期中还伴随着2个容器钩子:
3、 容器钩子:
poststart:表示容器运行时执行的第一个命令
prestop:容器结束时执行的最后一个命令
容器生命周期中还有2个探针:
探针:用于检测容器状态是否正常。
livenessProbe:存活探针
readinessProbe:流量探针
启动探针
存活探针和流量探针会伴随整个pod的生命周期
会不停的检测内部主业务容器的情况。只要主业务容器出现问题,整个pod将不再式ready状态。
但是启动探针除外
创建pod的容器分类
1、 基础容器:pause
2、 init容器(初始化容器):init c
3、 业务容器
先启动pause基础容器 > init初始化容器 > pod业务主容器
在pause基础容器和init初始化容器的过程中。pod状态:init 1/3---2/3---3/3
当所有init初始化都启动完毕才会创建业务容器
实验验证:
vim init.yamlapiVersion: v1
kind: Pod
metadata:name: nginx-init
spec:containers:- name: nginx1image: nginx:1.22
#定义的业务容器initContainers:- name: init-centos1image: centos:7command: ["echo", "hello,world"]- name: init-contos2image: centos:7command: ["echo", "I am ready"]
#这里定义业务容器和两个init初始化容器
#会先创建完pause初始化容器后
#才会先执行init-centos1输出hello,world。
#再执行init-centos2输出I am ready
#最后才会拉起nginx容器
init容器的作用
1、 环境变量:可以在创建的过程中为业务容器定制好相关的代码和工具。
2、 init容器独立于业务容器。是单独构建的镜像。对业务容器不产生任何安全影响。
3、 init容器能以不同于pod内应用容器的文件系统视图运行,secrets的权限。应用容器无法访问secerts的权限。
总结
init容器提供了应用容器运行之前的先决条件,提供了一种阻塞或者延迟机制来控制应用容器的启动。只有前置条件满足,才会创建pod内的应用容器。属于k8s的一种机制。
1、 在pod的启动过程中,容器时按照初始化容器先启动,每个容器都必须在下一个容器启动之前成功退出
2、 如果运行失败会按照容器的重启策略进行指定动作。restartPolicy:Always/Never/onFailure(非正常退出才会重启)
3、 所有的init容器没有成功之前,pod是不会进入ready状态的。
init容器与service无关,不能对外提供访问,也不会在service暴露端口。
4、 如果重启pod,所有init容器一定会重新执行。
5、 如果修改init容器的spec(参数)只限制于image。修改的修改字段都不生效。前提基于deployment
6、 每个容器的名称都要唯一且不能重复。
pod的重启策略
实验举例:
apiVersion: v1
kind: Pod
metadata:name: centos
spec:restartPolicy: OnFailure
#k8s中pod的重启策略,基于容器的状态进行pod的重启
#Always:总是重启。只要容器退出,无论容器的状态码是正常还是不正常。默认策略可以不加
#Never:永不重启。只要容器退出,无论容器是否正常都不重启
#OnFailure:只有容器的状态码非0时候才会重启。正常退出不会重启。
#一般情况下都使用默认Always,只有特殊情况下会使用Never
#在deployment的yaml文件当中,重启的策略只能是Always也是默认策略。所以可以不加。containers:- name: centosimage: centos:7command: ["echo", "I am ready"]
在deployment的yaml文件当中,重启的策略只能是Always也是默认策略。所以可以不加
实验举例:
apiVersion: apps/v1
kind: Deployment
metadata:name: centos2labels:zyg: test
spec:replicas: 1selector:matchLabels:zyg: testtemplate:metadata:labels:zyg: testspec:restartPolicy: Nevercontainers:- name: centos2image: centos:7command: ["echo", "123"]
总结
pause容器:是底层容器/基础容器。提供pod内容器的网络和存储共享以及pod内容器退出之后的资源回收。
init容器:不是不一定要存在的。是人为设定的。是业务容器启动之前的必要条件。
pod的生命周期
-
pause基础容器
-
init容器-----全部成功退出----才会到主业务容器
-
容器钩子:poststart启动时第一条命令、prestop推出时第一条命令
-
探针:探测容器的健康状态,伴随pod的整个生命周期。除了启动探针。
总的来说:
pod就是用来封装容器的。业务时容器,服务也是容器,端口也是容器。
相关文章:
k8s---Pod的生命周期
Pod是什么? pod是k8s中最小的资源管理组件。 pod也是最小化运行容器化应用的资源管理对象。 pod是一个抽象的概念,可以理解为一个或者多个容器化应用的集合 在一个pod当中运行一个容器是最常用的方式 在一个pod当中可以同时运行多个容器,…...
CSS animation动画和关键帧实现轮播图效果HTML
CSS animation动画和关键帧实现轮播图效果HTML 这轮播图效果使用h5和css3实现效果,不需要js控制,但是其中的缺点就是不能使用鼠标进行切换效果。 具有代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset&quo…...
Unity之键盘鼠标的监控
小编最近在玩大表哥2,通过 W、A、S、D 来移动亚瑟,鼠标左键来不吃牛肉 我们都知道玩家通过按键鼠标来控制游戏人物做出相应的行为动作,那在Unity引擎里是怎么知道玩家是如何操作的呢?本篇来介绍Unity是怎样监控键盘和鼠标的。 首先…...
C# windows服务程序开机自启动exe程序
我们使用传统的Process.Start(".exe")启动进程会遇到无法打开UI界面的问题,尤其是我们需要进行开启自启动程序设置时出现诸多问题,于是我们就想到采用windows服务开机自启动来创建启动一个新的exe程序,并且是显式运行。 首先是打开…...
【SpringMVC】常用注解
什么是MVC? MVC是一种程序分层开发模式,分别是Model(模型),View(视图)以及Controller(控制器)。这样做可以将程序的用户界面和业务逻辑分离,使得代码具有良好…...
关于曲率、曲率半径和曲率圆,看这几篇文章就够啦
关于曲率、曲率半径和曲率圆的内容,是考研数学数学一和数学二大纲中明确要求掌握的内容,但这部分内容在很多教材教辅以及练习题中较少涉及。在本文中,荒原之梦考研数学网就为大家整理了曲率、曲率半径和曲率圆方程相关的概念、基础知识以及练…...
java面试题-Spring常见的异常类有哪些?
远离八股文,面试大白话,通俗且易懂 看完后试着用自己的话复述出来。有问题请指出,有需要帮助理解的或者遇到的真实面试题不知道怎么总结的也请评论中写出来,大家一起解决。 java面试题汇总-目录-持续更新中 NullPointerException&…...
数据库选择题 (期末复习)
数据库第一章 概论简答题 数据库第二章 关系数据库简答题 数据库第三章 SQL简答题 数据库第四第五章 安全性和完整性简答题 数据库第七章 数据库设计简答题 数据库第九章 查询处理和优化简答题 数据库第十第十一章 恢复和并发简答题 2015期末 1、在数据库中,下列说…...
WeNet语音识别+Qwen-72B-Chat Bot+Sambert-Hifigan语音合成
WeNet语音识别Qwen-72B-Chat Bot👾Sambert-Hifigan语音合成 简介 利用 WeNet 进行语音识别,使用户能够通过语音输入与系统进行交互。接着,Qwen-72B-Chat Bot作为聊天机器人接收用户的语音输入或文本输入,提供响应并与用户进行对话…...
是否需要跟上鸿蒙(OpenHarmony)开发岗位热潮?
前言 自打华为2019年发布鸿蒙操作系统以来,网上各种声音百家争鸣。尤其是2023年发布会公布的鸿蒙4.0宣称不再支持Android,更激烈的讨论随之而来。 本文没有宏大的叙事,只有基于现实的考量。 通过本文,你将了解到: Har…...
【Golang】Json 无法表示 float64 类型的 NaN 以及 Inf 导致的 panic
【Golang】Json 无法表示 float64 类型的 NaN 以及 Inf 导致的 panic 原因 golang 服务出现了 panic,根据 panic 打印出的堆栈找到了问题代码,看上去原因是:json 序列化时,遇到了无法序列化的内容 [panic]: json: unsupported …...
bootstrap5实现宠物商店网站 Cat-Master
一、需求分析 宠物商店网站是指专门为宠物商店或宠物用品商家而建立的在线平台。这种网站的功能通常旨在提供以下服务: 产品展示:宠物商店网站通常会展示宠物食品、玩具、床上用品、健康护理产品等各种宠物用品的图片和详细信息。这样,潜在的…...
基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建并初始化TcpServer实例 以及 启动
对于一个TcpServer来说,它的灵魂是什么?就是需要提供一个事件循环EventLop(EventLoop),不停地去检测有没有客户端的连接到达,有没有客户端给服务器发送数据,描述的这些动作,反应堆模型能够胜任。当服务器和…...
边缘计算设备是什么意思。
问题描述:边缘计算设备是什么意思。 问题解答: 边缘计算(Edge Computing)是一种计算模型,其主要思想是在距离数据产生源头更近的地方进行数据处理和计算,而不是将所有数据传输到远程云服务器进行处理。边…...
使用ChatGPT midjourney 等AI智能工具,能为视觉营销做些什么?
使用ChatGPT、Midjourney等AI智能工具,可以极大地提升视觉营销的效率和创意水平。以下是这些工具在视觉营销中的一些具体应用: 内容创作与文案撰写(ChatGPT) 广告文案生成:根据产品特点和目标受众,生成吸…...
图像分割实战-系列教程4:unet医学细胞分割实战2(医学数据集、图像分割、语义分割、unet网络、代码逐行解读)
🍁🍁🍁图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 unet医学细胞分割实战1 unet医学细胞分割实战2 unet医学细胞分割实战3 unet医学细胞分割实战4 unet…...
防火墙未开端口导致zookeeper集群异常,kafka起不来
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 问题描述: 主机信息: IPhostname10.0.0.10host1010.0.0.12host1210.0.0.13host13 在这三台主机上部署…...
React-hook-form-mui(二):表单数据处理
前言 在上一篇文章中,我们介绍了react-hook-form-mui的基础用法。本文将着表单数据处理。 react-hook-form-mui提供了丰富的表单数据处理功能,可以通过watch属性来获取表单数据。 Demo 下面是一个使用watch属性的例子: import React from…...
java网络文件地址url的转换为MultipartFile文件流
废话不多说,直接上代码 一、异常捕捉类 public class BusinessException extends RuntimeException {public BusinessException(String msg){super(msg);} }二、转换类 package com.example.answer_system.utils;import org.springframework.mock.web.MockMultipa…...
JS实现/封装节流函数
封装节流函数 节流原理:在一定时间内,只能触发一次 let timer, flag; /*** 节流原理:在一定时间内,只能触发一次* * param {Function} func 要执行的回调函数 * param {Number} wait 延时的时间* param {Boolean} immediate 是否立…...
ENVI 各版本安装指南
ENVI下载链接 https://pan.baidu.com/s/1APpjHHSsrXMaCcJUQGmFBA?pwd0531 1.鼠标右击【ENVI 5.6(64bit)】压缩包(win11及以上系统需先点击“显示更多选项”)选择【解压到 ENVI 5.6(64bit)】。 2.打开解压后的文件夹,…...
60天零基础干翻C++————初识C++
初识c 命名空间命名空间的定义命名空间的使用 输入输出流缺省参数引用引用定义常量的引用引用的使用场景做函数参数引用做返回值 命名空间 命名空间的定义 在c语言中会有下面问题 上述代码中,全局变量rand 可能会命名冲突,如下图 此时编译失败&…...
考研复试英语口语问答举例第二弹
考研复试英语口语问答举例第二弹 文章目录 考研复试英语口语问答举例第二弹Question :介绍你的读研兴趣与动机Answer11:(自动化控制方向)Answer12:(集成电路方向)Answer13:ÿ…...
MyBatis-Plus实现自定义SQL语句的分页查询
正常开发的时候,有时候要写一个多表查询,然后多表查询之后还需要分页,MyBatis-Plus的分页插件功能挺不错的,可以很简单实现自定义SQL的分页查询。 分页插件配置 import com.baomidou.mybatisplus.annotation.DbType; import com…...
vue3 里的 ts 类型工具函数
目录 前言一、PropType\<T>二、MaybeRef\<T>三、MaybeRefOrGetter\<T>四、ExtractPropTypes\<T>五、ExtractPublicPropTypes\<T>六、ComponentCustomProperties七、ComponentCustomOptions八、ComponentCustomProps九、CSSProperties 前言 相关 …...
【SpringCloud】之远程消费(进阶使用)
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringCloud开发之远程消费》。🎯&a…...
自然语言处理24-T5模型的介绍与训练过程,利用简单构造数据训练微调该模型,体验整个过程
大家好,我是微学AI,今天给大家介绍一下自然语言处理24-T5模型的介绍与训练过程,利用简单构造数据训练微调该模型,体验整个过程。在大模型ChatGPT发布之前,NLP领域是BERT,T5模型为主导,T5(Text-to-Text Transfer Transformer)是一种由Google Brain团队在2019年提出的自然…...
CISSP 第5章 保护资产的安全
1、资产识别和分类 1.1 敏感数据 1.1.1 定义 敏感数据是任何非公开或非机密的信息,包括机密的、专有的、受保护的或因其对组织的价值或按照现有的法律和法规而需要组织保护的任何其他类型的数据。 1.1.2 个人身份信息PII 个人身份信息(PII)…...
docker安装-在linux下的安装步骤
#切换到root用户 su yum安装jcc相关 yum -y install gcc yum -y install gcc-c 安装yum-utils sudo yum install -y yum-utils 设置stable镜像仓库 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 更新yum软件包索…...
在Uniapp中使用Echarts创建可视化图表
在uniapp中可以引入echarts创建数据可视化图表。 1. 安装Echarts 使用npm安装echarts插件,命令如下: npm install echarts --save2. 引入Eharts 在需要使用Echarts的页面引入: import *as echarts from echarts3. 创建实例 创建画布元素…...
wordpress logy/阿里云免费建站
一、闭包闭包从形式上来说是在外部函数中定义内部函数,并且内部函数引用了外部函数的变量,此变量叫做自由变量。或者说是将组成函数的语句和这些语句的执行环境打包在一起。闭包满足的条件:必须有一个内嵌函数内嵌函数必须使用外部函数的变量…...
做电影采集网站用什么vps/免费ip地址网站
2019独角兽企业重金招聘Python工程师标准>>> 1.打开eclipse,创建一个java project 2.创建lib文件夹,放入mybatis jar包和ojdbc jar包,并添加到buildpath 3.创建generatorConfig.xml文件,位置如上图中所示,内…...
自己做网站卖阀门/网络推广怎么做
利用回溯法解决全排列问题。 题目: 给定一个没有重复数字的序列,返回其所有可能的全排列。示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]思路: 代码: class Solution { pub…...
线上报名小程序怎么做/湖南seo优化价格
https://blog.csdn.net/bazhidao0031/article/details/81450815 转载于:https://www.cnblogs.com/guochen/p/10340837.html...
企业做网站电话约见客户的对话/seo排名计费系统
ES除了实现前几课的基本查询,也可以实现类似关系型数据库的聚合查询,如平均值sum、最小值min、最大值max等等我们就用上一课的数据作为参考来举例聚合查询sum聚合sum是一个求累加值的聚合,其作用与关系型数据库中相同。GET /lib4/items/_sear…...
厦门正规网站建设公司/百度官网优化
在WEB项目用GridReport报表的时候,有时候会出现这个问题: 检索 COM 类工厂中 CLSID 为 {13C28AD0-F195-4319-B7D7-A1BDAA329FB8} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))…...