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 中配置和使用不同类型的探针,以确保你的应用运行在最佳状态。上述配置和命令带有详细注释,能够帮助你更好地理解每个字段的含义,使配置过程更加清晰和可控。

相关推荐
努力进修10 小时前
跨设备文件共享零烦恼!PicoShare+cpolar让跨设备传输更简单
云原生·eureka·cpolar
tianyuanwo11 小时前
多平台容器化RPM构建流水线全指南:Fedora、CentOS与Anolis OS
linux·运维·容器·centos·rpm
敲上瘾14 小时前
【探索实战】:Kurator分布式统一应用分发平台的全面解析与实践指南
分布式·容器·kubernetes·serverless
cui_win14 小时前
Docker Compose 部署一个完整的Prometheus监控告警系统
docker·容器·prometheus
roman_日积跬步-终至千里1 天前
【Docker】Docker Stop 后到底发生了什么?——从信号机制到优雅停机
运维·docker·容器
喵手1 天前
云端智变:基于 DevUI 与 MateChat 打造下一代云原生智能运维中台实战教学!
运维·云原生·devui·matechat
z***6261 天前
Docker:基于自制openjdk8镜像 or 官方openjdk8镜像,制作tomcat镜像
docker·容器·tomcat
Connie14511 天前
记一次K8s故障告警排查(Grafna告警排查)
云原生·容器·kubernetes·grafana
❀͜͡傀儡师1 天前
Docker部署视频下载器
docker·容器·音视频
热爱学习的小怪兽1 天前
docker的一些常用指令
运维·docker·容器