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

相关推荐
汪公子4921 小时前
k8s的基础
kubernetes
waterHBO2 小时前
Docker 笔记
笔记·docker·容器
杰信步迈入C++之路3 小时前
【docker】docker 关键技术 —— 镜像制作
运维·docker·容器
高兴的才哥3 小时前
kubevpn 教程
kubernetes·go·开发工具·telepresence·bridge to k8s
子非鱼3 小时前
02 Docker基本管理
运维·docker·容器
张狂年少4 小时前
【四】k8s部署 TDengine集群
java·kubernetes·tdengine
theo.wu4 小时前
Ansible自动化部署kubernetes集群
kubernetes·自动化·ansible
xidianjiapei0014 小时前
Ubuntu Juju 与 Ansible的区别
linux·ubuntu·云原生·ansible·juju
雨凝1213285 小时前
K8s 简介以及详细部署步骤
云原生·容器·kubernetes
小手冰凉2275 小时前
kubeadm方式安装k8s+基础命令的使用
云原生·容器·kubernetes