K8S(八)—— Kubernetes Pod 资源限制 + 探针(Probe)解析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • [一、Pod 进阶配置](#一、Pod 进阶配置)
    • [1.1 Pod 资源限制](#1.1 Pod 资源限制)
      • [1.1.1 核心概念](#1.1.1 核心概念)
      • [1.1.2 资源单位](#1.1.2 资源单位)
    • [1.2 Pod 资源限制案例](#1.2 Pod 资源限制案例)
    • [1.3 健康检查(探针 Probe)](#1.3 健康检查(探针 Probe))
  • [二、Kubernetes 探针(Probe)实践](#二、Kubernetes 探针(Probe)实践)
    • [2.1 存活探针(Liveness Probe)实践](#2.1 存活探针(Liveness Probe)实践)
      • [示例1:Exec 方式核心配置](#示例1:Exec 方式核心配置)
      • [案例1:Exec 方式实操配置与结果](#案例1:Exec 方式实操配置与结果)
  • 总结

前言


一、Pod 进阶配置

1.1 Pod 资源限制

为避免容器过度占用集群资源,K8s 支持为容器的 CPU 和内存资源设置资源请求(requests)和限制(limits)。这些设置确保了容器的资源分配和限制,避免资源争用和过度使用。

1.1.1 核心概念

请求(requests):容器启动时所需的最小资源,K8s 调度器根据此值选择有足够资源的节点;

限制(limits):容器运行时允许使用的最大资源,超出则会被限制(CPU 节流、内存 OOM 杀死)

1.1.2 资源单位

  • CPU:以"毫核(m)"为单位,1 CPU = 1000m(如 500m 表示 0.5 核);
  • 内存:支持二进制单位(Gi、Mi、Ki,1Gi=1024Mi)和十进制单位(GB、MB,1GB=1000MB),推荐使用二进制单位(如 64Mi、1Gi)。

1.2 Pod 资源限制案例

以下是两个常见的 Kubernetes Pod 配置示例,展示了如何为容器指定资源请求和限制:

1.3 健康检查(探针 Probe)

K8s 通过 探针 定期诊断容器状态,确保应用健康运行。探针由 kubelet 执行,分为三类:

1.3.1 探针类型(重点)

  • ivenessProbe(存活探针):用于检测容器是否正常运行,若探测失败则根据重启策略重启容器。若容器未配置存活探针,默认状态为Success;
  • readinessProbe(就绪探针):用于检测容器是否准备好接收请求,若探测失败则将该Pod的IP从匹配Service的endpoints中移除。在初始延迟期前,默认就绪状态为Failure。若容器未配置就绪探针,默认状态为Success;
  • startupProbe(启动探针,1.17+):用于检测应用是否完成启动。若配置了启动探针,在该探针成功前其他探针均不生效(适用于启动较慢的应用)。若启动探针失败,kubelet将终止容器并根据restartPolicy进行重启。若容器未配置启动探针,默认状态为Success。

1.3.2 检查方法

  • exec:在容器内执行指定命令,返回状态码 0 表示成功;
  • tcpSocket:对容器 IP 地址的指定端口执行 TCP 握手检查,端口连通即判定为成功;
  • httpGet:向容器 IP 地址的指定端口和路径发送 HTTP GET 请求,响应状态码在 200 至 399 范围内即视为成功。

1.3.3每次探测都将获得以下三种结果之一:

成功:容器通过了诊断。

失败:容器未通过诊断。

未知:诊断失败,因此不会采取任何行动

二、Kubernetes 探针(Probe)实践

2.1 存活探针(Liveness Probe)实践

存活探针用于检测容器是否运行正常,若探测失败,kubelet会杀死容器并根据重启策略重启容器。以下是三种常见的存活探针实现方式。

示例1:Exec 方式核心配置

java 复制代码
apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-exec
spec:
  containers:
  - name: liveness
    image: k8s.gcr.io/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
  • 核心逻辑:容器启动后先创建/tmp/healthy文件,30秒后删除该文件;
    探针每5秒执行cat /tmp/healthy命令,文件存在则探测成功,文件删除后探测失败,触发容器重启。
  • 关键参数说明:
    initialDelaySeconds:容器启动后等待5秒再执行第一次探测(默认0秒,最小值0)。
    periodSeconds:每5秒执行一次探测(默认10秒,最小值1)。
    failureThreshold:探测失败1次后即触发容器重启(默认3次,最小值1)。
    timeoutSeconds:探测超时时间(默认1秒,最小值1;1.20版本前exec探针忽略此参数)

案例1:Exec 方式实操配置与结果

bash 复制代码
vim exec.yaml
apiVersion: v1
kind: Pod
metadata:
  name: liveness-exec
  namespace: default
spec:
  containers:
  - name: liveness-exec-container
    image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh","-c","touch /tmp/live ; sleep 10; rm -rf /tmp/live; sleep 3600"]
    livenessProbe:
      exec:
        command: ["test","-e","/tmp/live"]
      initialDelaySeconds: 1
      periodSeconds: 3

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

相关推荐
张忠琳3 小时前
【NVIDIA】 NVIDIA Container Toolkit v1.19.1 — OCI 模块超深度分析之三
云原生·容器·架构·kubernetes·nvidia
阿里云云原生4 小时前
让 AI Agent 看见正在发生的业务,阿里云 EventHouse 正式商业化
云原生
Elastic 中国社区官方博客5 小时前
将你的 Grafana Kubernetes 仪表板迁移到 Elastic Observability:相同的 PromQL,30 倍更快的查询
大数据·人工智能·elasticsearch·搜索引擎·容器·kubernetes·grafana
AOwhisky6 小时前
Python 学习笔记(第十五期)——运维自动化(下·后篇):堡垒机实战——paramiko高阶篇
运维·python·学习·云原生·自动化·运维开发
风曦Kisaki7 小时前
#企业级docker私有仓库构建:harbor仓库与阿里云镜像仓库
阿里云·docker·容器
期待着20138 小时前
docker 安装 ,在centos7.9
运维·docker·容器
微三云 - 廖会灵 (私域系统开发)8 小时前
电商系统从单体到微服务拆分实践:拆什么、怎么拆、拆完后怎么办
微服务·云原生·架构
骑上单车去旅行10 小时前
Docker Compose 命令完全指南:从构建到运维
docker·容器·eureka
前端Baymax11 小时前
K8s PodCrashLoopBackOff假阳性排查
云原生·容器·kubernetes
spider_xcxc11 小时前
K8s 部署学习笔记
docker·容器·kubernetes·云计算·k8s