Kubernetes(K8s)探针

这篇具有很好参考价值的文章主要介绍了Kubernetes(K8s)探针。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Kubernetes(K8s)提供了几种类型的探针(Probes),用于运行时检查容器中运行的应用程序的健康状态。这些探针使得Kubernetes能够更加智能地管理容器,例如自动重启失败的容器、不将流量发送到未准备好接收流量的容器等。探针可以配置为执行三种类型的检查:HTTP GET请求、TCP Socket检查、以及执行容器内的命令。

探针类型

Kubernetes定义了三种主要类型的探针:

  1. 存活探针(Liveness Probe):

    • 目的:确保应用程序正在运行。如果存活探针失败,表示应用不再活动,Kubernetes会根据策略重启该容器。
    • 应用场景:当应用因死锁或其他原因卡住时,自动重启可能恢复应用。
  2. 就绪探针(Readiness Probe):

    • 目的:检查容器是否准备好接受流量。如果就绪探针失败,表示应用虽然正在运行,但不应接收请求,Kubernetes会停止向该容器发送请求,直到它准备就绪。
    • 应用场景:用于控制那些需要加载大量数据或配置文件的应用,直到应用准备好接受流量前,不将请求路由到该容器。
  3. 启动探针(Startup Probe):

    • 目的:检查容器应用程序是否已启动。如果启动探针失败,Kubernetes会重启容器。一旦启动探针成功,就绪和存活探针将接管后续的检查。
    • 应用场景:对于启动时间较长的应用,确保不会因为启动慢而被误判为失败状态。

探针检查类型

每种探针都可以配置为执行以下类型的检查之一:

  • HTTP GET:对指定的端口和路径执行HTTP GET请求。如果返回的状态码在成功的范围内(默认为200-399),则认为检查成功。
  • TCP Socket:尝试建立TCP连接到容器的指定端口。如果连接成功建立,则认为检查成功。
  • Exec:在容器内执行指定的命令。如果命令退出状态码为0,则认为检查成功。

配置示例

下面是一个配置存活探针和就绪探针的YAML示例:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mycontainer
    image: myimage
    livenessProbe:
      httpGet:
        path: /healthz
        port: 8080
      initialDelaySeconds: 15
      timeoutSeconds: 2
      periodSeconds: 5
      failureThreshold: 3
    readinessProbe:
      exec:
        command:
        - cat
        - /tmp/ready
      initialDelaySeconds: 5
      periodSeconds: 5

在这个例子中,存活探针通过对/healthz路径执行HTTP GET请求来检查应用的存活状态,而就绪探针通过执行cat /tmp/ready命令来检查容器是否准备好接受流量。

通过合理配置这些探针,可以提高应用的稳定性和可靠性,确保Kubernetes集群能够更加智能地管理容器。

一个自动检测容器健康状况的shell脚本例子

下面实现一个基于启动探针和存活探针的健康检测脚本,同时包括读取配置文件获取IP和端口信息,以及在检测到容器不健康时重启容器的逻辑

#!/bin/bash

# 定义变量
namespace="your-namespace"
config_path="/path/to/your/config"
pod_label_selector="app=your-app-label"

# 读取配置文件获取IP和端口
ip=$(grep 'ip' $config_path | cut -d'=' -f2)
port=$(grep 'port' $config_path | cut -d'=' -f2)

# 获取Pod名字列表
pod_names=$(kubectl get pods -n $namespace -l $pod_label_selector -o=jsonpath='{.items[*].metadata.name}')

for pod_name in $pod_names; do
    echo "Checking health for Pod: $pod_name"

    # 使用kubectl exec执行健康检查命令
    health_check_cmd="curl -s -o /dev/null -w '%{http_code}' http://$ip:$port/health"
    result=$(kubectl exec $pod_name -n $namespace -- bash -c "$health_check_cmd")

    # 检查健康状态
    if [ "$result" != "200" ]; then
        echo "Pod $pod_name is unhealthy. Restarting..."
        kubectl delete pod $pod_name -n $namespace
        # 注意:重启Pod应谨慎操作,确保符合你的应用逻辑
        # Kubernetes的部署(Deployment)会自动重新创建Pod以保持所需的副本数量
    else
        echo "Pod $pod_name is healthy."
    fi
done
说明
  • 配置读取:脚本首先从指定的配置文件路径读取应用的IP和端口信息。这里假设配置文件中有ip=...port=...这样的行。
  • Pod检索:通过kubectl get pods命令和标签选择器获取目标应用Pod的名称列表。
  • 健康检查:对每个Pod执行健康检查命令。这个示例使用curl命令检查应用的/health端点。
  • 容器重启:如果检测到容器不健康(即HTTP状态码不是200),脚本会使用kubectl delete pod命令删除该Pod。在Deployment等控制器管理下的Pod会自动被重新创建,从而达到重启的目的。
注意事项
  • 权限:执行这个脚本需要对Kubernetes集群有足够的权限,包括读取Pod信息和删除Pod的能力。
  • 安全性:在生产环境中,直接删除Pod以触发重启可能不是最佳实践,特别是对于那些没有正确配置探针的应用。最好是在应用的Deployment配置中正确设置启动探针和存活探针。
  • 配置文件:确保配置文件的路径和格式与脚本中的逻辑相匹配。如果使用不同的配置管理方式(如ConfigMap或环境变量),需要相应调整脚本。
  • 错误处理:在实际使用中,脚本应包含更详细的错误处理逻辑,比如检查kubectl命令的执行结果,处理未找到Pod的情况等。

这个脚本提供了一个基础的框架,可以根据实际需求进行调整和扩展。文章来源地址https://www.toymoban.com/news/detail-826362.html

到了这里,关于Kubernetes(K8s)探针的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生 | Kubernetes 系列】K8s 实战 如何给应用注入数据 II 将pod数据传递给容器

    在上一篇文章中,我们学习了针对容器设置启动时要执行的命令和参数、定义相互依赖的环境变量、为容器设置环境变量,三种设置方式,本篇文章,我们将继续学习数据的传递。 有两种方式可以将 Pod 和 Container 字段传递给运行中的容器: 环境变量 卷文件 这两种呈现 Pod

    2024年01月25日
    浏览(123)
  • 飞天使-k8s知识点17-kubernetes实操2-pod探针的使用

    探针的使用 容器探针启动实验1-启动探针的使用-startupprobe Liveness Probes 和 Readiness Probes 演示 若存在started.html 则进行

    2024年02月20日
    浏览(53)
  • 云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)

    目录 一、理论 1.K8S集群升级 2.环境 3.升级策略 4.master1节点迁移容器运行时(docker → containerd)  5.master2节点迁移容器运行时(docker → containerd)  6.node1节点容器运行时迁移(docker → containerd)  7.升级集群计划(v1.23.14 → v1.24.1) 8.升级master1节点版本(v1.24.1) 9.升级master2节点版本

    2024年02月03日
    浏览(66)
  • 云上攻防-云原生篇&;Kubernetes&;K8s安全&;API&;Kubelet未授权访问&;容器执行

    curl -XPOST -k “https://192.168.139.132:10250/run///” -d “cmd=id” 执行的命令是test03容器里的命令,需要进行容器逃逸。 1、攻击8080端口:API Server(Master)未授权访问 旧版本的k8s的API Server默认会开启两个端口:8080和6443。 6443是安全端口,安全端口使用TLS加密;但是8080端口无需认证,

    2024年04月22日
    浏览(73)
  • 云原生Kubernetes:K8S概述

    目录 一、理论 1.云原生 2.K8S 3.k8s集群架构与组件 4.K8S网络 二、总结 (1)概念 云原生是一种基于容器、微服务和自动化运维的软件开发和部署方法。它可以使应用程序更加高效、可靠和可扩展,适用于各种不同的云平台。 如果要更直接通俗的来解释下上面的概念,云原生更

    2024年02月10日
    浏览(52)
  • 云原生Kubernetes:K8S存储卷

    目录 一、理论 1.存储卷 2.emptyDir 存储卷 3.hostPath卷 4.NFS共享存储 5.PVC 和 PV 6.静态创建PV 7.动态创建PV 二、实验  1.emptyDir 存储卷 2.hostPath卷 3.NFS共享存储 4.静态创建PV 5.动态创建PV 三、问题 1.生成pod一直pending 2.shoumount -e未显示共享目录 3.静态创建pv 报错 4.使用 Deployment 来创建

    2024年02月07日
    浏览(69)
  • 云原生Kubernetes:K8S安全机制

    目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜像拉取失败 四、总结 (1)概念 Kubernetes 作为一个分

    2024年02月07日
    浏览(66)
  • 云原生_kubernetes(k8s)介绍

    目录 一、应用部署方式演变 二、k8s介绍 三、k8s的组件 四、k8s中的概念 五、k8s资源管理方式 1、命令式对象管理 2、命令式对象配置 3、声明式对象配置 在部署应用程序的方式上,主要经历了三个时代: 1 、物理机部署: 互联网早期,会直接将应用程序部署在物理机上 优点

    2023年04月13日
    浏览(56)
  • 【云原生 • Kubernetes】认识 k8s、k8s 架构、核心概念点介绍

    目录 一、Kubernetes 简介 二、Kubernetes 架构 三、Kunbernetes 有哪些核心概念? 1. 集群 Cluster 2. 容器 Container 3. POD 4. 副本集 ReplicaSet 5. 服务 service 6. 发布 Deployment 7. ConfigMap/Secret 8. DaemonSet 9. 核心概念总结 Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌。谷歌早在十几

    2024年02月03日
    浏览(170)
  • 云原生Kubernetes:K8S常用服务端口

    目录 一、理论 1.K8S常用服务端口号 (1)K8S集群 表1 K8S集群端口 协议 端口号 K8S集群 TCP 22 使用主机驱动通过SSH进行节点配置 TCP 53 集群DNS服务 UDP 53 集群DNS服务 TCP 2376 主机驱动与Docker守护进程通信的TLS端口 TCP 2379 etcd客户端请求 TCP 2380 etcd节点通信 UDP 8472 Canal/Flannel VXLAN ove

    2024年02月10日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包