首页 > 其他分享 >k8s列出所有未配置探针的deployment

k8s列出所有未配置探针的deployment

时间:2025-01-11 17:54:44浏览次数:1  
标签:null 配置 deployment 探针 jq Deployment k8s spec

在 Kubernetes 中,探针(Probes)用于检测容器的健康状态,主要包括以下三种:

  1. Liveness Probe(存活探针):检测容器是否正在运行。
  2. Readiness Probe(就绪探针):检测容器是否准备好接收流量。
  3. Startup Probe(启动探针):检测容器是否已完成启动。

如果 Deployment 未配置这些探针,可能会导致容器在异常状态下继续运行或接收流量。因此,列出所有未配置探针的 Deployment 是一个常见的运维需求。


列出所有未配置探针的 Deployment

以下是一个 Shell 脚本,用于列出 Kubernetes 集群中所有未配置探针的 Deployment:

#!/bin/bash

# 设置命名空间(默认为所有命名空间)
NAMESPACE="${1:-}"

# 获取所有 Deployment
if [[ -z "$NAMESPACE" ]]; then
  DEPLOYMENTS=$(kubectl get deployments --all-namespaces -o json)
else
  DEPLOYMENTS=$(kubectl get deployments -n "$NAMESPACE" -o json)
fi

# 解析 Deployment
echo "$DEPLOYMENTS" | jq -r '
  .items[] | 
  select(
    (.spec.template.spec.containers[]? | 
      (.livenessProbe? == null) and 
      (.readinessProbe? == null) and 
      (.startupProbe? == null)
    )
  ) | 
  "Namespace: \(.metadata.namespace) | Deployment: \(.metadata.name)"
'

脚本说明

  1. 参数说明

    • NAMESPACE:可选参数,指定要检查的命名空间。如果不指定,则检查所有命名空间。
  2. 获取 Deployment

    • 使用 kubectl get deployments 获取所有 Deployment 的 JSON 格式数据。
  3. 过滤未配置探针的 Deployment

    • 使用 jq 解析 JSON 数据,筛选出未配置 livenessProbereadinessProbestartupProbe 的 Deployment。
  4. 输出结果

    • 输出未配置探针的 Deployment 的命名空间和名称。

使用方法

  1. 安装依赖

    • 确保已安装 kubectljq

    • 安装 jq

      # Ubuntu/Debian
      sudo apt-get install jq
      
      # CentOS/RHEL
      sudo yum install jq
      
      # macOS
      brew install jq
      
  2. 运行脚本

    • 检查所有命名空间:

      ./check-probes.sh
      
    • 检查指定命名空间(如 default):

      ./check-probes.sh default
      
  3. 示例输出

    Namespace: default | Deployment: my-app
    Namespace: kube-system | Deployment: coredns
    

扩展功能

  1. 列出未配置特定探针的 Deployment
    如果需要单独检查未配置 livenessProbereadinessProbestartupProbe 的 Deployment,可以修改 jq 过滤条件。例如:

    • 仅检查未配置 livenessProbe 的 Deployment:

      echo "$DEPLOYMENTS" | jq -r '
        .items[] | 
        select(
          (.spec.template.spec.containers[]? | 
            (.livenessProbe? == null)
          )
        ) | 
        "Namespace: \(.metadata.namespace) | Deployment: \(.metadata.name)"
      '
      
  2. 输出详细信息
    如果需要输出 Deployment 的详细信息(如容器名称),可以修改 jq 输出格式:

    echo "$DEPLOYMENTS" | jq -r '
      .items[] | 
      select(
        (.spec.template.spec.containers[]? | 
          (.livenessProbe? == null) and 
          (.readinessProbe? == null) and 
          (.startupProbe? == null)
        )
      ) | 
      "Namespace: \(.metadata.namespace) | Deployment: \(.metadata.name) | Containers: \([.spec.template.spec.containers[].name] | join(", "))"
    '
    

    示例输出:

    Namespace: default | Deployment: my-app | Containers: app, sidecar
    
  3. 导出结果到文件
    将结果导出到文件:

    ./check-probes.sh > no-probes-deployments.txt
    

总结

通过该脚本,可以快速列出 Kubernetes 集群中所有未配置探针的 Deployment,帮助运维人员及时发现潜在问题并优化容器健康检查配置。

标签:null,配置,deployment,探针,jq,Deployment,k8s,spec
From: https://www.cnblogs.com/ydswin/p/18666055

相关文章

  • Ubuntu 22.04LTS版本二进制部署K8S 1.30+版本
    Ubuntu22.04LTS版本二进制部署K8S1.30+版本 目录一.K8S集群各主机环境准备1.环境准备2.所有节点安装常用的软件包3.k8s-master01节点免密钥登录集群并同步数据4.所有节点Linux基础环境优化5.所有节点安装ipvsadm以实现kube-proxy的负载均衡二.安装containerd组......
  • 【面试题】简单聊一下什么是云原生、什么是k8s、容器,容器与虚机相比优势
    云原生(CloudNative)定义:云原生是一种构建和运行应用程序的方法,旨在充分利用云计算的优势。它涵盖了一系列技术和理念,包括容器化、微服务架构、自动化部署与管理等。特点:云原生应用程序被设计为可弹性扩展、容错性强,能够快速响应变化。例如,一个电商平台的云原生应用可以根据......
  • ubuntu20.04部署k8s集群(基于docker)
    Ubuntu部署k8s集群(基于docker)本文总结一下部署k8s集群踩的坑以及部署流程。相关版本:docker-v27.4.1、cri-dockerd-v0.3.16、kubeadm-v1.28.15注意本人的机器是arm64的,x86已经amd64的可以参考目前仅完成至基础配置阶段(到集群初始化)k8s介绍Kubernetes是一个开源的容器编排......
  • K8S排故图【转】
      说一个残忍的Kubernetes运维真相,Kubernetes故障排除真的很难.....这是一张Kubernetes故障排查流程图,用于帮助用户诊断和解决Kubernetes集群中Pod、Ingress和Service的常见问题。通过一系列的问题和对应的命令(如kubectlgetpods,kubectldescribepod,kubectllogs......
  • K8S排故图【转】
    说一个残忍的Kubernetes运维真相,Kubernetes故障排除真的很难.....这是一张Kubernetes故障排查流程图,用于帮助用户诊断和解决Kubernetes集群中Pod、Ingress和Service的常见问题。通过一系列的问题和对应的命令(如kubectlgetpods,kubectldescribepod,kubectllogs等),引导用户逐......
  • k8s 部署minio
    参考:https://devpress.csdn.net/k8s/66c98bb2a1ed2f4c853cb2c0.html 1、创建pvcvimminio-pvc.yml---apiVersion:v1kind:PersistentVolumeClaimmetadata:name:minio-pvcnamespace:nmg-testspec:storageClassName:"nfs-client"accessModes:......
  • k8s api请求怎么请求
    在Kubernetes中,API请求的处理主要由APIServer负责。以下是Kubernetes处理API请求的基本流程:###APIServer的角色-**核心组件**:APIServer是Kubernetes控制平面的核心组件,负责接收和处理来自客户端的所有请求。-**请求入口**:所有对Kubernetes集群的操作请求都......
  • k8s 有状态和无状态
    在Kubernetes(k8s)中,有状态和无状态的Pod主要区别在于它们对状态的处理方式和对数据持久性的需求。###无状态Pod-**定义**:无状态Pod是指Pod本身不存储任何持久化数据,状态信息不依赖于Pod的存在。Pod的重启或重建不会影响其功能。-**数据持久性**:数据通常存储在外......
  • 手把手带你使用Karpenter减少K8s集群资源浪费
    Kubernetes集群的主要成本因素之一是数据平面上的计算层。将Kubernetes集群运行在AmazonEC2Spot实例上是一种显著降低计算成本的有效方式。使用Spot实例可以比按需实例节省高达90%的费用。Spot实例非常适合无状态、容错性强且灵活的应用场景,例如大数据处理、容器化工......
  • K8S部署
    参考网站【Linux】Ubuntu部署K8S集群-图文并茂(超详细)-CSDN博客1、机器准备(Ubuntu)1.1、机器配置机器名称内存处理器(核心)硬盘网络适配器k8s-master2GB450GNATk8s-node12GB450GNATk8s-node22GB450GNAT1.2、系统配置相关调整1.2.1配置root用户登......