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提供了大量能使我们快速便捷地处理数据的函数和方法。

相关推荐
ICT董老师2 小时前
通过kubernetes部署nginx + php网站环境
运维·nginx·云原生·容器·kubernetes·php
zxnbmk2 小时前
【7】Kubernetes存储(本章知识密度较高,仅浅浅了解后续详解)
linux·云原生·容器·kubernetes
叫致寒吧2 小时前
pod详解
云原生·kubernetes
水上冰石2 小时前
查看k8s下Jenkins的插件在宿主机的路径
容器·kubernetes·jenkins
孤岛悬城2 小时前
58 k8s之pod
云原生·容器·kubernetes
可爱又迷人的反派角色“yang”2 小时前
k8s(五)
linux·运维·docker·云原生·容器·kubernetes
oMcLin2 小时前
如何在Ubuntu 22.10上通过配置K3s轻量级Kubernetes集群,提升边缘计算环境的资源管理能力?
ubuntu·kubernetes·边缘计算
optimistic_chen3 小时前
【Docker入门】容器技术
linux·运维·服务器·docker·容器
小明_GLC3 小时前
理解Docker、镜像Images、容器Container
docker·容器