k8s-pod 实战二 (Pod 重启策略、探针及实现方式详解)

Pod 重启策略、探针及实现方式详解

在 Kubernetes 中,Pod 的重启策略和探针是确保应用高可用性和健壮性的重要机制。以下大纲将详细介绍 Pod 的重启策略、三种探针及其实现方式,并通过具体命令和实战案例帮助你更好地理解这些概念。

1. Pod 重启策略

Kubernetes 提供三种重启策略(Restart Policy),用于定义 Pod 中容器的重启行为:

  • Always:默认策略,容器无论退出状态如何都会被重新启动。
  • OnFailure:仅当容器以非零状态退出时才会重启。
  • Never:容器不会被重启。

YAML 配置示例

复制代码
apiVersion: v1 # API 版本
kind: Pod # 资源类型
metadata:
  name: restart-policy-example # Pod 的名称
spec:
  restartPolicy: OnFailure # 重启策略
  containers:
  - name: my-container # 容器名称
    image: nginx # 容器镜像

2. Pod 的三种探针

探针(Probe)是 Kubernetes 用于检查容器运行状况的机制。有三种探针:

  • 存活探针(Liveness Probe):确定容器是否处于健康状态。如果探针失败,Kubernetes 会杀死容器,并根据重启策略决定是否重启。
  • 就绪探针(Readiness Probe):确定容器是否准备好接受流量。如果探针失败,Kubernetes 会将该 Pod 从服务的负载均衡池中移除。
  • 启动探针(Startup Probe):用于检测容器是否启动完成。启动探针成功后,将替代存活探针。

探针的类型

  • HTTP 探针:发送 HTTP GET 请求到容器的某个端点。
  • TCP 探针:尝试打开一个 TCP 连接到容器的某个端口。
  • 命令探针:在容器内执行命令,检查命令的退出状态。

3. Pod 探针的实现方式

HTTP 探针示例
复制代码
apiVersion: v1 # API 版本
kind: Pod # 资源类型
metadata:
  name: http-probe-example # Pod 的名称
spec:
  containers:
  - name: my-container # 容器名称
    image: nginx # 容器镜像
    livenessProbe: # 存活探针配置
      httpGet:
        path: /healthz # 探针要访问的 HTTP 路径
        port: 80 # 探针要访问的端口
      initialDelaySeconds: 3 # 初始延迟时间
      periodSeconds: 3 # 探测周期
    readinessProbe: # 就绪探针配置
      httpGet:
        path: /readiness # 探针要访问的 HTTP 路径
        port: 80 # 探针要访问的端口
      initialDelaySeconds: 3 # 初始延迟时间
      periodSeconds: 3 # 探测周期
    startupProbe: # 启动探针配置
      httpGet:
        path: /startup # 探针要访问的 HTTP 路径
        port: 80 # 探针要访问的端口
      initialDelaySeconds: 3 # 初始延迟时间
      periodSeconds: 3 # 探测周期
TCP 探针示例
复制代码
apiVersion: v1 # API 版本
kind: Pod # 资源类型
metadata:
  name: tcp-probe-example # Pod 的名称
spec:
  containers:
  - name: my-container # 容器名称
    image: nginx # 容器镜像
    livenessProbe: # 存活探针配置
      tcpSocket:
        port: 80 # 探针要访问的端口
      initialDelaySeconds: 3 # 初始延迟时间
      periodSeconds: 3 # 探测周期
命令探针示例
复制代码
apiVersion: v1 # API 版本
kind: Pod # 资源类型
metadata:
  name: command-probe-example # Pod 的名称
spec:
  containers:
  - name: my-container # 容器名称
    image: busybox # 容器镜像
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 # 启动容器时执行的命令
    livenessProbe: # 存活探针配置
      exec:
        command:
        - cat
        - /tmp/healthy # 在容器内执行的命令
      initialDelaySeconds: 5 # 初始延迟时间
      periodSeconds: 5 # 探测周期

实战案例

案例一:配置 HTTP 探针
1. 编写 YAML 配置文件

创建一个名为 http-probe-pod.yaml 的文件,内容如下:

复制代码
apiVersion: v1 # API 版本
kind: Pod # 资源类型
metadata:
  name: http-probe-pod # Pod 的名称
spec:
  containers:
  - name: web # 容器名称
    image: nginx # 容器镜像
    ports:
    - containerPort: 80 # 容器端口
    livenessProbe: # 存活探针配置
      httpGet:
        path: /healthz # 探针要访问的 HTTP 路径
        port: 80 # 探针要访问的端口
      initialDelaySeconds: 5 # 初始延迟时间
      periodSeconds: 10 # 探测周期
    readinessProbe: # 就绪探针配置
      httpGet:
        path: /readiness # 探针要访问的 HTTP 路径
        port: 80 # 探针要访问的端口
      initialDelaySeconds: 5 # 初始延迟时间
      periodSeconds: 10 # 探测周期
2. 应用配置
复制代码
kubectl apply -f http-probe-pod.yaml # 应用 YAML 配置文件
3. 查看 Pod 状态
复制代码
kubectl get pods # 获取所有 Pod 的状态
4. 描述 Pod 以获取探针的详细信息
复制代码
kubectl describe pod http-probe-pod # 获取指定 Pod 的详细信息
5. 查看 Pod 日志
复制代码
kubectl logs http-probe-pod # 查看指定 Pod 的日志
案例二:配置 TCP 探针
1. 编写 YAML 配置文件

创建一个名为 tcp-probe-pod.yaml 的文件,内容如下:

复制代码
apiVersion: v1 # API 版本
kind: Pod # 资源类型
metadata:
  name: tcp-probe-pod # Pod 的名称
spec:
  containers:
  - name: web # 容器名称
    image: nginx # 容器镜像
    ports:
    - containerPort: 80 # 容器端口
    livenessProbe: # 存活探针配置
      tcpSocket:
        port: 80 # 探针要访问的端口
      initialDelaySeconds: 5 # 初始延迟时间
      periodSeconds: 10 # 探测周期
2. 应用配置
复制代码
kubectl apply -f tcp-probe-pod.yaml # 应用 YAML 配置文件
3. 查看 Pod 状态
复制代码
kubectl get pods # 获取所有 Pod 的状态
4. 描述 Pod 以获取探针的详细信息
复制代码
kubectl describe pod tcp-probe-pod # 获取指定 Pod 的详细信息
5. 查看 Pod 日志
复制代码
kubectl logs tcp-probe-pod # 查看指定 Pod 的日志
案例三:配置命令探针
1. 编写 YAML 配置文件

创建一个名为 command-probe-pod.yaml 的文件,内容如下:

复制代码
apiVersion: v1 # API 版本
kind: Pod # 资源类型
metadata:
  name: command-probe-pod # Pod 的名称
spec:
  containers:
  - name: busybox # 容器名称
    image: busybox # 容器镜像
    args:
    - /bin/sh
    - -c
    - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 # 启动容器时执行的命令
    livenessProbe: # 存活探针配置
      exec:
        command:
        - cat
        - /tmp/healthy # 在容器内执行的命令
      initialDelaySeconds: 5 # 初始延迟时间
      periodSeconds: 5 # 探测周期
2. 应用配置
复制代码
kubectl apply -f command-probe-pod.yaml # 应用 YAML 配置文件
3. 查看 Pod 状态
复制代码
kubectl get pods # 获取所有 Pod 的状态
4. 描述 Pod 以获取探针的详细信息
复制代码
kubectl describe pod command-probe-pod # 获取指定 Pod 的详细信息
5. 查看 Pod 日志
复制代码
kubectl logs command-probe-pod # 查看指定 Pod 的日志

通过这三个实战案例,你可以掌握如何在 Kubernetes 中配置和使用不同类型的探针,以确保你的应用运行在最佳状态。上述配置和命令带有详细注释,能够帮助你更好地理解每个字段的含义,使配置过程更加清晰和可控。

相关推荐
梦想的颜色1 小时前
【Docker原理】Docker 容器一文打尽:生命周期、环境管控、迁移备份、日志进程排查、垃圾清理
运维·docker·容器·容器生命周期·容器日志排查·容器迁移备份·容器进程管理
万里侯5 小时前
GitOps 漂移检测:集群里改了配置,Git 还以为一切正常
微服务·容器·k8s
AOwhisky9 小时前
Python 学习笔记(第三期)——流程控制:条件判断与循环结构
运维·笔记·python·学习·云原生·流程控制·循环
极客先躯9 小时前
高级java每日一道面试题-2026年03月30日-实战篇[Docker]-如何监控容器的网络流量?
java·运维·docker·容器·prometheus·高级面试
Waay10 小时前
Linux 三个核心环境变量配置文件、作用域、生效方式完整梳理
linux·运维·学习·云原生·容器
大E帝国子民111 小时前
Docker 部署 RocketMQ 5
docker·容器·rocketmq
SelectDB11 小时前
云数仓费钱?用 SelectDB Serverless 三步配出秒级弹性,最高降本 70%
数据库·云原生·数据分析
江湖有缘12 小时前
【保姆级教程】使用Docker Compose一键搭建Picsur私有图床服务
java·docker·容器
CHrisFC13 小时前
2026-07-15-csdn-硕晟LIMS微服务架构设计
微服务·云原生·架构
长不胖的路人甲14 小时前
微服务限流
微服务·云原生·架构