10.pod资源限制和健康检查

news2024/12/28 6:43:57

文章目录

  • 资源限制
  • 探针(健康检查)
  • 启动、退出动作
  • 总结

资源限制

  • 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小,以及其他类型的资源。
  • 当为 pod 中的容器指定了 request 资源时,代表容器运行所需的最小资源量,调度器就使用该信息来决定将 pod 调度到哪个节点上。
  • 当还为容器指定了 limit资源时,kubelet就会确保运行的容器不会使用超出所设的 limit资源。kubelet 还会为容器预留所设的 request资源量, 供该容器使用。
  • 如果 Pod 运行所在的节点具有足够的可用资源,容器可以使用超出所设置的 request资源量。不过,容器不可以使用超出所设置的 limit资源量。
  • 如果给容器设置了内存的 limit值,但未设置内存的 request值,kubernetes会自动为其设置与内存 limit相匹配的 request值。
  • 类似的,如果给容器设置了CPU的 limit 值但未设置 CPU 的 request 值,则 Kubernetes 自动为其设置 CPU 的 request值 并使之与 CPU的 limit值配。
  • 官网示例:
    https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
##Pod 和 容器 的资源请求和限制:
spec.containers[].resources.requests.cpu		//定义创建容器时预分配的CPU资源
spec.containers[].resources.requests.memory		//定义创建容器时预分配的内存资源
spec.containers[].resources.limits.cpu			//定义 cpu 的资源上限 
spec.containers[].resources.limits.memory		//定义内存的资源上限
  • CPU 资源单位
    • CPU 资源的 request 和 limit 以 cpu 为单位。
    • Kubernetes 中的一个 cpu 相当于1个 vCPU(1个超线程)。
    • Kubernetes 也支持带小数 CPU 的请求。
    • spec.containers[].resources.requests.cpu 为 0.5 的容器能够获得一个 cpu 的一半 CPU 资源(类似于Cgroup对CPU资源的时间分片)。
    • 表达式 0.1 等价于表达式 100m(毫核),表示每 1000 毫秒内容器可以使用的 CPU 时间总量为 0.1*1000 毫秒。
    • Kubernetes 不允许设置精度小于 1m 的 CPU 资源。
  • 内存 资源单位
    • 内存的 request 和 limit 以字节为单位。
    • 可以以整数表示,或者以10为底数的指数的单位(E、P、T、G、M、K)来表示, 或者以2为底数的指数的单位(Ei、Pi、Ti、Gi、Mi、Ki)来表示。
    • 如:1KB=103=1000,1MB=106=1000000=1000KB,1GB=10^9=1000000000=1000MB
    • 1KiB=210=1024,1MiB=220=1048576=1024KiB
apiVersion: v1
kind: Pod
metadata:
  labels:
  name: test01
spec:
  containers:
  - name: test01
    image: nginx:1.14
    resources:
      requests:
        memory: "64Mi"
        cpu: "250m"
      limits:
        memory: "128Mi"
        cpu: "500m"

  restartPolicy: Always
###查看创建的pods
kubectl get pods

在这里插入图片描述

##查看pod的详细信息
kubectl describe pod test01

在这里插入图片描述

##根据创建的pod所在的node节点,查看node 的详细信息
kubectl describe nodes node02

在这里插入图片描述

##实时监控pod的创建过程
kubectl get pods -o wide -w

在这里插入图片描述

在这里插入图片描述

探针(健康检查)

  • 探针的三种规则:

    • livenessProbe :判断容器是否正在运行。如果探测失败,则kubelet会杀死容器,并且容器将根据 restartPolicy 来设置 Pod 状态。 如果容器不提供存活探针,则默认状态为Success。
    • readinessProbe :判断容器是否准备好接受请求。如果探测失败,端点控制器将从与 Pod 匹配的所有 service endpoints 中剔除删除该Pod的IP地址。 初始延迟之前的就绪状态默认为Failure。如果容器不提供就绪探针,则默认状态为Success。
    • startupProbe(这个1.17版本增加的):判断容器内的应用程序是否已启动,主要针对于不能确定具体启动时间的应用。如果配置了 startupProbe 探测,则在 startupProbe 状态为 Success 之前,其他所有探针都处于无效状态,直到它成功后其他探针才起作用。 如果 startupProbe 失败,kubelet 将杀死容器,容器将根据 restartPolicy 来重启。如果容器没有配置 startupProbe, 则默认状态为 Success。
  • Probe支持三种检查方法:

    • exec :在容器内执行指定命令。如果命令退出时返回码为0则认为诊断成功。
    • tcpSocket :对指定端口上的容器的IP地址进行TCP检查(三次握手)。如果端口打开,则诊断被认为是成功的。
    • httpGet :对指定的端口和uri路径上的容器的IP地址执行HTTPGet请求。如果响应的状态码大于等于200且小于400,则诊断被认为是成功的
  • 每次探测都将获得以下三种结果之一:

    • 成功(Success):表示容器通过了检测。
    • 失败(Failure):表示容器未通过检测。
    • 未知(Unknown):表示检测没有正常进行。
  • 官网示例:
    https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: busybox
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 60
    livenessProbe:
      exec:
        command:
        - cat
        - /tmp/healthy
      failureThreshold: 1
      initialDelaySeconds: 5
      periodSeconds: 5
  restartPolicy: Never

在这里插入图片描述

在这里插入图片描述

  • initialDelaySeconds:指定 kubelet 在执行第一次探测前应该等待5秒,即第一次探测是在容器启动后的第6秒才开始执行。默认是 0 秒,最小值是 0。
  • periodSeconds:指定了 kubelet 应该每 5 秒执行一次存活探测。默认是 10 秒。最小值是 1。
  • failureThreshold: 当探测失败时,Kubernetes 将在放弃之前重试的次数。 存活探测情况下的放弃就意味着重新启动容器。就绪探测情况下的放弃 Pod 会被打上未就绪的标签。默认值是 3。最小值是 1。
  • timeoutSeconds:探测的超时后等待多少秒。默认值是 1 秒。最小值是 1。(在 Kubernetes 1.20 版本之前,exec 探针会忽略 timeoutSeconds 探针会无限期地 持续运行,甚至可能超过所配置的限期,直到返回结果为止。)
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: test01
  name: test01
spec:
  replicas: 2
  selector:
    matchLabels:
      app: test01
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: test01
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80
        readinessProbe:
          httpGet:
            port: 80
            path: /index.html
          initialDelaySeconds: 5
          periodSeconds: 5
          timeoutSeconds: 10

##创建pod容器和service资源
kubectl create deployment test01 --image=nginx --port=80 --replicas=2

kubectl expose deployment test01 --name=evc-test01 --port=8080 --target-port=80 --type=NodePort

在这里插入图片描述

在这里插入图片描述

apiVersion: v1
kind: Pod
metadata:
  name: http
  namespace: default
spec:
  containers:
  - name: http
    image: nginx
    imagePullPolicy: IfNotPresent
    ports:
    - name: http
      containerPort: 80
    readinessProbe:
      httpGet:
        port: 80
        path: /index.html
      initialDelaySeconds: 1
      periodSeconds: 3
    livenessProbe:
      httpGet:
        port: http
        path: /index1.html
      initialDelaySeconds: 1
      periodSeconds: 3
      timeoutSeconds: 10
    startupProbe:
      tcpSocket:
        port: 8080
      initialDelaySeconds: 1
      periodSeconds: 3

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

启动、退出动作

apiVersion: v1
kind: Pod
metadata:
  name: lifecycle-demo
spec:
  containers:
  - name: lifecycle-demo-container
    image: nginx
    lifecycle:   
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo 123 >> /var/log/nginx/message"]      
      preStop:
        exec:
          command: ["/bin/sh", "-c", "echo 456 >> /var/log/nginx/message"]
    volumeMounts:
    - name: message-log
      mountPath: /var/log/nginx/
      readOnly: false
  initContainers:
  - name: init-myservice
    image: nginx
    command: ["/bin/sh", "-c", "echo '789'   >> /var/log/nginx/message"]
    volumeMounts:
    - name: message-log
      mountPath: /var/log/nginx/
      readOnly: false
  volumes:
  - name: message-log
    hostPath:
      path: /data/volumes/nginx/log/
      type: DirectoryOrCreate

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结

  • Pod 容器的 3 种探针(健康检查)
    • 存活探针(livenessProbe):探测是否正常运行。如果探测失败则kubelet杀掉容器(Pod容器会根据重启策略决定是否重启)
    • 就绪探针(readinessProbe):探测Pod是否进入就绪状态(ready状态栏1/1),并做好接收service请求的准备。如果探测失败则Pod会变成未就绪状态(ready状态栏0/1),service资源会删除所关联的端点(endpoints),并不再转发请求给就绪探测失败的Pod
    • 启动探针(startupProbe):探测容器内的应用是否启动成功。在启动探针探测成功之前,存活探针和就绪探针都会暂时处于禁用状态,直到启动探针探测成功
  • 探针的 3 种探测方式:
    • exec:在command字段中指定在容器内执行的Linux命令来进行探测,如果命令返回码为0则认为探测成功,如果返回码为非0则认为探测失败
    • tcpSocket:向指定的Pod容器端口发送tcp连接请求,如果端口正确且tcp连接成功则认为探测成功,如果tcp连接失败则认为探测失败
    • httpGet:向指定的Pod容器端口和URL路径发送http get请求,如果http响应状态码为2XX 3XX则认为探测成功,如果响应状态码为4XX 5XX则认为探测失败
  • 探针参数:
    • initialDelaySeconds:指定容器启动后延迟几秒开始探测
    • periodSeconds:每天探测的间隔时间(秒数)
    • failureThreshold:探测连续失败几次后判断探测失败
    • timeoutSeconds:指定探测超时等待时间(秒数)
  • Pod 应用容器生命周期的启动动作和退出动作
    • spec.containers.lifecycle.postStart 配置子字段 exec.command 设置 Pod 容器启动时额外的命令操作
      请求,如果http响应状态码为2XX 3XX则认为探测成功,如果响应状态码为4XX 5XX则认为探测失败
  • 探针参数:
    • initialDelaySeconds:指定容器启动后延迟几秒开始探测
    • periodSeconds:每天探测的间隔时间(秒数)
    • failureThreshold:探测连续失败几次后判断探测失败
    • timeoutSeconds:指定探测超时等待时间(秒数)
  • Pod 应用容器生命周期的启动动作和退出动作
    • spec.containers.lifecycle.postStart 配置子字段 exec.command 设置 Pod 容器启动时额外的命令操作
    • spec.containers.lifecycle.preStop 配置子字段 exec.command 设置 Pod 容器运行中被kubelet杀掉退出时所执行的命令操作(不包含容器自行退出的情况)

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

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

相关文章

5. vue-element-admin 二次开发攻略指南

vue-element-admin一站式后端 UI框架二次开发攻略指南 1.1 前言1.2 修改 Logo 名称和图标1.3 控制设置齿轮是否显示或隐藏1.4 框架安装依赖优化脚本1.5 定义多环境配置文件1.6 优化打包流程1.7 优化打包流程输出文件路径配置1.8 nginx 配置1.9 docker file 配置 2. 代码地址 1.…

计算机网络-专业术语

计算机网络-专业术语 实体 实体:任何可发送或接收信息的硬件或软件进程 对等实体:收发双方相同层次中的实体 协议 控制两个对等实体进行逻辑通信的规则的集合 协议三要素 语法 定义所交换的信息的格式 是用户数据与控制信息的结构和格式 语义 定义收发双方所需要完成的操作…

STM32CubeMX之freeRTOS信号量

队列可以传输数据,任务之间和任务和中断之间,消息队列用来传数据,占用时间也长 但哦我们有时候只需要传递状态,只需要一个数值表示 如果我们屏幕按固定刷新,就会很消耗资源,如果我们数据变化了&#xff0…

Hadoop+Python+Django+Mysql热门旅游景点数据分析系统的设计与实现(包含设计报告)

系统阐述的是使用热门旅游景点数据分析系统的设计与实现,对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计,描述,实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体…

人工智能讲师AIGC讲师叶梓:大模型这么火,我们在使用时应该关注些什么?-2

以下为叶老师讲义分享: P6-P9 一些考验大模型的经典问题: 1、鲁迅与周树人是同一个人吗?2、圆周率的最后一位3、蓝牙耳机坏了4、最新的:奶奶的睡前故事 关于事实的问答结果: 知识的时效性: 未完,下一章继续……

java程序打包成exe在无java环境执行

最近写了个小工具,但是java写的,给朋友用的时候不能直接用,因此学习了一下java打包成exe。 众所周知,java需要jvm环境,所以打包的时候需要把稍微轻一点的jre打包进去。接下来是详细步骤。 java程序打包成jar 这个在…

C#随机法 双峰函数 求极值 避免落入局部最优解

避免落入局部最优解,只要让步长够长即可。 x1 resultX1 random1.NextDouble()*100; 如果后面不乘以100,则很大概率落入负数的最大值 Random random1 new Random(DateTime.Now.Millisecond);double x1 0, resultX10,max-999999,maxTemp0;for (int i …

【学会动态规划】买卖股票的最佳时机 III(17)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

骨传导耳机对人体有什么危害,骨传导耳机优缺点是什么?

骨传导耳机对人体有没有伤害? 骨传导耳机的专属挂耳式佩戴方式,不需要将耳机塞入耳朵或者是住整个耳朵,开放双耳的全新佩戴体验,在听音乐的同时不会屏蔽我们的耳朵提取其它信息,能让我们及时听到周围环境音&#xff0c…

tensorRT_Pro 项目实践

参考:https://github.com/shouxieai/tensorRT_Pro/blob/main/tutorial/README.zh-cn.md 前提: https://www.cnblogs.com/odesey/p/17619218.html https://www.cnblogs.com/odesey/p/17619240.html ubuntu20.04opencv4.2cuda11.8cuDNN v8.9.0 (July 1…

【Python】背景及环境搭建

文章目录 了解计算机一、Python背景知识一、Python环境搭建 努力经营当下 直至未来明朗 了解计算机 示例:使用电脑访问B站 1) 本地的计算机会给B站服务器发送一个网络请求(如:谁,想看哪个视频) 2&#xf…

WPS Office 代码执行漏洞(QVD-2023-17241)

目录 本地利用弹计算器(自娱自乐) 原理分析 msf的利用 1.修改win11中的hosts文件 2.MSF生成一个C#后门 3.shellcode替换 4.在创建html的目录,用python打开http服务来捕获请求 5.开启监听 6.在win11中点击poc文档,可以看到k…

0001nginx简介、相关模型与原理

文章目录 一. 什么是Nginx二. ngnix的一些模型1、nginx的进程模型2、worker的抢占(锁)机制模型3. nginx事件处理模型 三. nginx加载静态资源的过程 一. 什么是Nginx Nginx是一个高性能HTTP反向代理服务器,以下是nginx的相关能力 反向代理&am…

通过matlab对比music,mvdr以及tdoa三种定位算法的性能

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 MUSIC(Multiple Signal Classification) 4.2 MVDR(Minimum Variance Distortionless Response) 4.3 TDOA(Time Difference o…

使用宝塔面板轻松部署云服务器

作者 : SYFStrive 博客首页 : HomePage 📜: 宝塔面版 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f449…

LeetCode[164]最大间距

难度:Hard 题目: 给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2,则返回 0 。 您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。 示例 1: 输入: …

docsify gitee 搭建个人博客

docsify & gitee 搭建个人博客 文章目录 docsify & gitee 搭建个人博客1.npm 安装1.1 在Windows上安装npm:1.2 在macOS上安装npm:1.3 linux 安装npm 2. docsify2.1 安装docsify2.2 自定义配置2.2.1 通过修改index.html,定制化开发页面…

如何创造千亿项目?合法合规的绿色消费增值积分,或许能冲出赛道

电商行业的竞争越来越激烈,大部分的电商平台都面临着这三大难题:如何吸引用户、如何留存用户以及如何让用户为平台带来更多的效益。为了解决这三大问题,我们提出了创造千亿项目的商业模式——绿色消费增值积分系统,帮助企业冲出赛…

git 给仓库添加新分支并上传代码,git 克隆指定分支

git 克隆指定分支 git clone -b 分支名 仓库地址 例如: git clone -b dev https://gitee.com/UserGuan/spring-boot-demo.git git 给仓库添加新分支并上传代码 1、初始化仓库 git init 2、创建分支并命名 git checkout -b 分支名 例如: git che…

分布式应用:Zabbix监控Nginx

目录 一、理论 1.Zabbix监控Nginx 二、实验 1.Zabbix监控Nginx部署 三、问题 1.重启zabbix客户端失败 2.zabbix服务端测试客户端nginx状态失败 3.nginx启动失败 4.权限不够 一、理论 1.Zabbix监控Nginx (1)环境 zabbix服务端:192.1…