【K8S 云原生】Pod资源限制、Pod容器健康检查(探针)

目录

一、docker的重启方式和K8S重启方式

1、Pod的重启方式:

2、docker的重启策略:

二、yaml文件快速生成:

三、pod的状态:

四、Pod的资源限制

1、限制的方式和种类

2、CPU的限制的格式:

五、K8S拉取镜像的策略:

六、pod内的容器的健康检查—探针:

1、探针:probe

2、探针种类:

1.1、存活探针:livenessProbe

1.2、就绪探针

1.3、启动探针

3、probe的检查方法:

3.1、exec:

3.2、httpGet:

3.3、tcpSocket:

4、诊断结果:

5、设置探测条件:

七、livenessProbe存活探针健康监测实例:

1、存活探针的exec检查方式:

2、存活探针的httpGet检查方式:

3、存活探针的tcpSocket检查方式:


一、docker的重启方式和K8S重启方式

1、Pod的重启方式:

Always:无论正常退出还是非正常退出都重启

        deployment的yaml文件只能是Always

        pod的yaml三种模式都可以

OnFailure:只有状态码非0才会重启。正常退出是不重启的

Never:正常退出和非正常退出都不重启

容器退出了,pod才会重启

pod可以有多个容器

pod可以有多个容器,只要有一个容器退出,整个pod都是重启,pod内的所有都会重启

2、docker的重启策略:

Never:docker的默认策略,正常退出和非正常退出都不重启

on-Failure:非正常退出时才会重启容器

Always:只要容器退出都是重启

unless-stoped:只要容器退出就会重启,docker守护进程启动时已经停止的容器,不再重启

意思是docker运行时,退出会重启,docker关闭,一并关闭的容器不会重启

单机部署:docker足够了

集群化部署:K8S

二、yaml文件快速生成:

#快速生成pod创建yaml
kubectl create deployment nginx --image=nginx1.22 --replicas=3 --dry-run=client -o yaml > /opt/demo1.yaml#快速生成service的yaml
kubectl expose deployment nginx --port=80 --target-port=80 --type=NodePort --dry-run=client -o yaml > /opt/demo2.yaml--dry-run=client:只调用api命令,不创建

三、pod的状态:

pending挂起状态:pod已被创建,但是尚未分配到运行他的node节点(1、节点上资源不够  2、节点上资源不够)
Running运行中:pod已经被分配到了node节点,pod内部的所用容器都已经启动,运行状态正常
competed/successded:容器内部的进程运行完毕正常退出,没有发生错误
failed:pod中的容器非正常退出。发生了错误,需要通过查看详情或者日志定位问题
UNkown:由于某些原因,K8S集群无法获取pod的状态。apiserver出了问题
terminating:终止中,pod正在被删除,里面的容器正在终止。终止过程中,涉及资源回收、垃圾清理、终止过程中需要执行的命令
crashloopbackoff:pod当中的容器退出,kubelet正在重启
imagepullbackoff:正在重试拉取镜像
errimagepull:拉取镜像出错了(1、网速太慢 2、镜像名写错了 3、镜像仓库挂了)
Evicte:pod被驱赶了(node节点的资源不够部署pod,或者是资源不足,kubelet自动选择一个pod驱逐)
InvalidImageName:无法解析镜像名称
ImageInspectError:无法校验镜像
ErrImageNeverPull:策略禁止拉取镜像
RegistryUnavailable: 连接不到镜像中心
CreateContainerConfigError:不能创建kubelet使用的容器配置
CreateContainerError: 创建容器失败
m.internalLifecycle.PreStartContainer 执行hook报错
RunContainerError:启动容器失败
PostStartHookError:执行hook报错
ContainersNotInitialized: 容器没有初始化完毕
ContainersNotReady:容器没有准备完毕
ContainerCreating:容器创建中
PodInitializing:pod初始化中
DockerDaemonNotReady:docker还没有完全启动
NetworkPluginNotReady: 网络插件还没有完全启动
Evicte: pod被驱赶

四、Pod的资源限制

1、限制的方式和种类

对pod内的容器使用节点资源的限制:

1、request:pod内容器需要的资源

2、limit:最高能占用系统多少资源

一般在工作中,只做一个limit,需要多少,最多也只能占这么多

两个限制:CPU和内存限制

2、CPU的限制的格式:

①、数字加小数点:1、2、0.5、0.3、0.2、0.1

要么是整数数,要么小数点后只能跟一位

1:占用一个cpu
2:占两个cpu
0.5:半个cpu
0.2:只能使用一个cpu的1/5
0.1:最小的单位,只占用1/10

②、m来表示cpu:millicores。1000m、2000m、100m

cpu时间分片原理:通过周期性的轮流分配cpu时间给各个进程。多个进程可以在cpu上交替执行。在K8S中就表示占用cpu的比率

2000m:2个cpu
1000m:1个cpu
500m:半个cpu
100m:最小单位1/10个cpu

2、内存的限制:
单位:大写的开头+小写的i

Ki、Mi、Gi、Ti

apiVersion: apps/v1
kind: Deployment
metadata:labels:
app: centosname: centos
spec:replicas: 1selector:
matchLabels:app: centosstrategy:template:
metadata:labels:
app: centos
spec:containers:- image: centos:7
name: centos
command: ["/bin/bash", "-c", "sleep 3600"]
resources:requests:
memory: "256Mi"
cpu: "0.5"limits:
memory: "1Gi"
cpu: "1"
#在创建pod时,一定要给容器做资源限制。可以直接只做limit限制

stress压力测试工具

超过资源限制,进程会被立即杀死

五、K8S拉取镜像的策略:

ifNotPresent:默认策略,如果本地镜像有,就不在拉取,本地没有就去镜像仓库拉取

Always:无论镜像是否存在,创建时(包括重启时)都会重新拉取镜像

Never:仅仅使用本地镜像

如果没有特殊需求,默认即可,不用配置

都还是本地部署,用Never即可

如果涉及到外部部署,默认策略即可(事前要把docker的镜像导入到目标主机)

Always:一般不用

六、pod内的容器的健康检查—探针:

1、探针:probe

是K8S对容器执行的定期检查诊断

探针都是对容器进行操作

所有的探针策略伴随整个pod的生命周期。除了启动探针。

2、探针种类:

1.1、存活探针:livenessProbe

探测容器是否正常运行,如果发现探测失败,会杀掉容器,容器会根据重启策略来决定是否重启。不是杀掉pod,只是对容器操作。特点就是杀死容器,重启

1.2、就绪探针

探测容器是否进入ready状态,并且做好接收请求的准备。

探测失败 进入READY 0/1状态,无法接受请求,没有进入ready状态。service会把这个资源对象的端点endpoints从当中剔除,service也不会把请求转发到这个pod

1.3、启动探针

只是在容器的启动后开始检测,容器内的应用是否启动成功。在启动探测成功之前,所有的其他探针都会处于禁用状态,一旦启动探针结束,后续的操作不再受启动探针的影响

在一个容器中可以有多个探针,也可以只有一个探针

3、probe的检查方法:

以上三种探针都能用下面的检查方式

3.1、exec:

在容器内部执行命令,如果命令的返回码是0,表示成功

适用于需要在容器内自定义命令来检查容器的健康状态的情况

3.2、httpGet:

对指定ip+端口的容器发送一个httpget的请求。响应状态码在200-400

内都是成功 200<= X <400 之间都算成功

适用于检查容器能否响应http的请求,web容器(nginx、Tomcat等)

3.3、tcpSocket:

检查端口,对指定端口上的容器的IP地址进行tcp检查(三次握手),端口打开,认为探测成功。否则都是失败

用于检查特定容器的端口监听状态

类似于telnet 192.168.233.30 80 检查80端口是否正常

4、诊断结果:

1、成功:容器通过了,正常运行

2、失败:失败了只有存活探针会重启

3、未知:诊断失败

5、设置探测条件:

initialDelaySeconds: 3
#表示容器启动之后多少秒来进行探测,时间不要设置的太短,否则容器没启动就开始探测,无效探测
periodSeconds: 2
#表示探针探测的间隔时间。每隔多少秒进行一次检查。范围是看应用的延迟敏感度。非常重要的核心组件,间隔设置小一点
failureThreshold: 2
#如果探测失败,失败几次之后,把容器标记为不健康。
successThreshold: 1
#只要成功一次就标记为就绪、健康、ready。这里的值只能是1,所以这项可以不加
timeoutSeconds: 1
#表示每次探测的超时时间,这个时间要比间隔时间小,意思是在1秒内要完成探测

delay=3s:启动3s后开始检测
timeout=1s:每次检测时间不能超过1s
period=2s:检测的间隔2s
success=1:只要检测成功1次,视为检测成功
failure=2:连续检测失败两次,视为检测失败

七、livenessProbe存活探针健康监测实例:

1、存活探针的exec检查方式:

apiVersion: apps/v1
kind: Deployment
metadata:labels:
app: centosname: centos
spec:replicas: 1selector:
matchLabels:app: centosstrategy:template:
metadata:labels:
app: centos
spec:containers:- image: centos:7
name: centos
command: ["/bin/bash", "-c", "touch /opt/123.txt ; sleep 3600"]livenessProbe:exec:
command: ["/usr/bin/test" , "-e", "/opt/123.txt"]
#检测/opt/123.txt文件是否存在,存在则检测成功initialDelaySeconds: 3
#表示容器启动之后多少秒来进行探测,时间不要设置的太短,否则容器没启动就开始探测,无效探测periodSeconds: 2
#表示探针探测的间隔时间。每隔多少秒进行一次检查。范围是看应用的延迟敏感度。非常重要的核心组件,间>
隔设置小一点failureThreshold: 2
#如果探测失败,失败几次之后,把容器标记为不健康。successThreshold: 1
#只要成功一次就标记为就绪、健康、ready。这里的值只能是1,所以这项可以不加timeoutSeconds: 1
#表示每次探测的超时时间,这个时间要比间隔时间小,意思是在1秒内要完成探测

删除文件,模拟探针检测失效

kubectl exec -it centos-797bc57596-dcvzh -- rm -rf /opt/123.txt

这里重新拉取容器之后,因为command,/opt/123.txt会自动生成,所以拉取一次,容器又Running了

2、存活探针的httpGet检查方式:

apiVersion: v1
kind: Pod
metadata:name: nginxspec:containers:- image: nginx:1.22
name: nginxlivenessProbe:httpGet:
scheme: HTTP
port: 80initialDelaySeconds: 4periodSeconds: 2

用Tomcat测试:

apiVersion: v1
kind: Pod
metadata:name: tomcatspec:containers:- image: tomcat:8.0.52
name: tomcatlivenessProbe:httpGet:
scheme: HTTP
port: 8080
path: /index.htmlinitialDelaySeconds: 4periodSeconds: 2
#相当于访问http://ip/index.html

将path改成 index.jsp

3、存活探针的tcpSocket检查方式:

kind: Pod
metadata:name: tcp-tomcatspec:containers:- image: tomcat:8.0.52
name: tcp-tomcat
livenessProbe:tcpSocket:
port: 8080initialDelaySeconds: 4periodSeconds: 2

检测端口8080,端口打开表示检测成功:

将端口改成8081:

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

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

相关文章

Day17- 二叉树part06

一、最大二叉树 题目一&#xff1a;654.最大二叉树 654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最…

一文讲透使用SPSS统计分析软件如何处理缺失值?

推荐采用《SPSS统计分析入门与应用精解&#xff08;视频教学版&#xff09;》 杨维忠、张甜 清华大学出版社“1.9 缺失值处理” 的解答。 本节内容选自《SPSS统计分析入门与应用精解&#xff08;视频教学版&#xff09;》 杨维忠、张甜 清华大学出版社“1.9 缺失值处理”&#…

C++完成使用map Update数据 非二进制

1、在LXMysql.h和LXMysql.cpp分别定义和编写关于pin语句的代码 //获取更新数据的sql语句 where语句中用户要包含where 更新std::string GetUpdatesql(XDATA kv, std::string table, std::string where); std::string LXMysql::GetUpdatesql(XDATA kv, std::string table, std…

数据结构与算法教程,数据结构C语言版教程!(第二部分、线性表详解:数据结构线性表10分钟入门)七

第二部分、线性表详解&#xff1a;数据结构线性表10分钟入门 线性表&#xff0c;数据结构中最简单的一种存储结构&#xff0c;专门用于存储逻辑关系为"一对一"的数据。 线性表&#xff0c;基于数据在实际物理空间中的存储状态&#xff0c;又可细分为顺序表&#xff…

类和对象及其关系

类 类概述&#xff1a; 类是对现实生活中一类具有共同属性和行为事物的抽象类特点&#xff1a; 1、类是对象的数据类型 2、类是具有相同属性和行为的一组对象的集合// 类是对象的数据类型 class Student{}class Test{public static void main(String[] args){// int a 20; 类…

量子计算需要解决哪些复杂问题?

量子计算原理基于量子力学的基本概念和原理&#xff0c;与经典计算在根本上有所不同。以下是量子计算的一些核心原则&#xff1a; 1. 量子比特&#xff08;Qubit&#xff09;&#xff1a;量子计算的基本信息单位是量子比特&#xff0c;或称qubit。不同于经典计算中的比特&…

leetcode贪心(单调递增的数字、监控二叉树)

738.单调递增的数字 给定一个非负整数 N&#xff0c;找出小于或等于 N 的最大的整数&#xff0c;同时这个整数需要满足其各个位数上的数字是单调递增。 &#xff08;当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。&#xff…

Oracle导出CSV文件

利用spool spool基本格式&#xff1a; spool 路径文件名 select col1||,||col2||,||col3||,||col4 from tablename; spool off spool常用的设置&#xff1a; set colsep ;    //域输出分隔符 set echo off;    //显示start启动的脚本中的每个sql命令&#xff0c;缺…

Jvm之垃圾收集器(个人见解仅供参考)

问&#xff1a;什么是垃圾收集算法中的分代收集理论&#xff1f; 答&#xff1a;分代收集理论是垃圾收集算法的一种思想&#xff0c;根据对象存活周期的不同将内存分为几块&#xff0c;一般将java堆分为新生代和老年代。这种理论使得我们可以根据各个年代的特点选择合适的垃圾收…

14.9-时序和组合的混合逻辑——使用非阻塞赋值

时序和组合的混合逻辑——使用非阻塞赋值 1&#xff0c;在一个always块中同时实现组合逻辑和时序逻辑2&#xff0c;将组合和时序逻辑分别写入两个always块中 原则4&#xff1a;在同一个always块中描述时序和组合逻辑混合电路时&#xff0c;用非阻塞赋值。 1&#xff0c;在一个…

Python 可视化 web 神器 streamlit

官网&#xff1a;https://streamlit.io/ github&#xff1a;https://github.com/streamlit/streamlit API 参考&#xff1a;https://docs.streamlit.io/library/api-reference 1、streamlit 简介 streamlit 简介 Streamlit 是Python可视化 web 神器 &#xff0c;是一个开箱即…

Nginx(十六) 配置文件详解 - server stream服务流

本篇文章主要讲 ngx_stream_core_module 模块下各指令的使用方法&#xff0c;Nginx默认未配置该模块&#xff0c;需要用“--with-stream”配置参数重新编译Nginx。 worker_processes auto;error_log /var/log/nginx/error.log info;events {worker_connections 1024; }stream…

宇宙最快最高级且开源的密码破解利器 —— Hashcat

目录 一. 前言 二. Hashcat 安装 2.1. Hashcat 官网下载 2.2. hash 类型识别工具 HashIdentifier 2.3. John The Ripper 三. Hashcat 全部参数 3.1. Hashcat 的攻击模式&#xff08;-a 参数&#xff09; 3.2. 输出格式&#xff08;--outfile-format 参数&#xff09; …

【算法专题】回溯算法

回溯 回溯算法1. 全排列2. 子集3. 找出所有子集的异或总和再求和4. 全排列Ⅱ5. 电话号码的字母组合6. 括号生成7. 组合8. 目标和9. 组合总和10. 字母大小写全排列11. 优美的排列12. N皇后13. 有效的数独14. 解数独15. 单词搜索16. 黄金矿工17. 不同路径III 回溯算法 什么是回溯…

Unity 使用 Plastic 同步后,正常工程出现错误

class Newtonsoft.Json.Linq.JToken e CS0433:类型"JToken"同时存在于"Newtonsoft.Json.Net20,Version3.5.0.0,Cultureneutral,,PublicKeyToken30ad4fe6b2a6aeed"和"Newtonsoft.Json, Version12.0.0.0,Cultureneutral,PublicKeyToken30ad4fe6b2a6aeed…

Rust-使用Serde对json数据进行反序列化

引言 JSON作为目前流行的数据格式之一&#xff0c;被大家广泛使用。在日常的开发实践中&#xff0c;将JSON数据反序列化为对应的类型具有以下几个重要的意义&#xff1a; 1. 访问和操作数据 将JSON数据反序列化为对应的类型&#xff0c;可以更方便地访问和操作数据&#xff0c…

初始Java

目录 前言&#xff1a; 配置环境变量&#xff1a; Java程序的执行&#xff1a; JDK、JRE、JVM之间的关系&#xff1a; 一些概念&#xff1a; 基础语法&#xff1a; main方法&#xff1a; 快捷方法&#xff1a; 注释方法&#xff1a; 符号&#xff1a; 编码格式&am…

打包与解包:Go 中 archive 库的实战应用

打包与解包&#xff1a;Go 中 archive 库的实战应用 引言archive 库概览支持的文件格式archive 库与其他 Go 标准库的协同 使用 archive/tar 打包与解包打包文件到 Tar 归档从 Tar 归档解包文件 使用 archive/zip 进行压缩与解压缩创建 Zip 压缩文件从 Zip 归档解压文件 总结与…

C++ 具名要求-基本概念-指定该对象可以析构

此页面中列出的具名要求&#xff0c;是 C 标准的规范性文本中使用的具名要求&#xff0c;用于定义标准库的期待。 某些具名要求在 C20 中正在以概念语言特性进行形式化。在那之前&#xff0c;确保以满足这些要求的模板实参实例化标准库模板是程序员的重担。若不这么做&#xf…

PythonStudio=vb7国人写的python可视化窗体设计器IDE,可以替代pyqt designer等设计器了

【免费】PythonStudio-1.1.5-x86最新版国人开发的python界面ide&#xff0c;可以制作窗体资源-CSDN文库https://download.csdn.net/download/xiaoyao961/88688447 【免费】PythonStudio-1.1.5-x64-Setup.exe国人开发的python界面ide&#xff0c;可以制作窗体资源-CSDN文库https…