kubernetes 的 Init 容器、存活探针、 就绪探针

本文介绍了Kubernetes中的关键概念,如Pod、Init容器、存活探针和就绪探针。Pod是基本的部署单元,Init容器在主应用容器启动前执行,用于设置环境。存活探针确保容器正常运行,而就绪探针则确认容器准备好接收流量。通过配置这些机制,可以提升应用的可靠性和服务稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

kubernetes 的 Init 容器、存活探针、 就绪探针

pod

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。

Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个) 容器; 这些容器**共享存储、网络、以及怎样运行这些容器的声明**。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器, 这些容器是相对紧密的耦合在一起的。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于 在同一逻辑主机上运行的云应用。

详情参照官网:https://kubernetes.io/zh/docs/concepts/workloads/pods/
在这里插入图片描述在这里插入图片描述

Init 容器

Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。

详情参照官网:https://kubernetes.io/zh/docs/concepts/workloads/pods/init-containers/

# 推送 Init 容器部署资源清单
kubectl apply -f init.yaml

# 查看 pod
kubectl get pod -o wide

# 推送创建 myservice 服务资源清单
kubectl apply -f myservice.yaml

# 查看 service
kubectl get svc

# 查看 pod ,pod 变为 running 
kubectl get pod -o wide

#   cat  init.yaml
#  创建pod ,在有 myservice 的服务后创建


apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
    - name: nginx
      image: myapp:v1
      imagePullPolicy: IfNotPresent
  initContainers:
    - name: init-container
      image: busybox
      command: ["/bin/sh", "-c", "until nslookup myservice.default.svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
#  myservice.yaml
#  创建 myservice 服务

 
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376

示例截图

在这里插入图片描述

存活探针

kubelet 使用存活探测器来知道什么时候要重启容器。 例如,存活探测器可以捕捉到死锁(应用程序在运行,但是无法继续执行后面的步骤)。 这样的情况下重启容器有助于让应用程序在有问题的情况下更可用。

详情参照官网:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

# 推送存活探针资源清单
kubectl apply -f liveness.yaml

# 查看 pod
kubectl get pod -o wide
# cat liveness.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: liveness
  name: liveness-http
spec:
  containers:
    - name: liveness
      image: nginx
      imagePullPolicy: IfNotPresent
      livenessProbe:
        tcpSocket:
          port: 80
        initialDelaySeconds: 1
        periodSeconds: 3
        timeoutSeconds: 1

示例截图

在这里插入图片描述

就绪探针

kubelet 使用就绪探测器可以知道容器什么时候准备好了并可以开始接受请求流量, 当一个 Pod 内的所有容器都准备好了,才能把这个 Pod 看作就绪了。 这种信号的一个用途就是控制哪个 Pod 作为 Service 的后端。 在 Pod 还没有准备好的时候,会从 Service 的负载均衡器中被剔除的。

详情参照官网:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/

#  推送就绪探针部署资源清单
kubectl apply -f readiness.yaml

#  查看 pod
kubectl get pod -o wide

#  进入 /bin/sh 进入 pod,创建  /tmp/healthy  文件
kubectl exec -it readiness-http -- /bin/sh

# 查看 pod
kubectl get pod -o wide

# cat readiness.yaml

apiVersion: v1
kind: Pod
metadata:
  labels:
    test: readiness
  name: readiness-http
spec:
  containers:
    - name: readiness
      image: nginx
      readinessProbe:
        exec:
          command:
          - cat
          - /tmp/healthy
        initialDelaySeconds: 5
        periodSeconds: 5

示例截图

在这里插入图片描述

<think>好的,我需要解释Kubernetes中的启动针(Startup Probe)、存活探针(Liveness Probe)就绪探针(Readiness Probe)的区别用途。首先,我要确保自己正确理解这三个概念。 启动针应该用于处理启动时间较长的容器,确保在应用完成启动之前不进行其他检查。比如,有些应用可能需要较长时间初始化,这时候启动针可以延迟存就绪探针的启动,避免在应用还没准备好时就被重启或标记为就绪存活探针的作用是检查容器是否还在运行。如果测失败,Kubernetes会重启容器。这适用于检测死锁或应用无响应的情况,确保应用可用性。 就绪探针则决定容器是否准备好接收流量。当就绪探针失败时,容器会被从Service的负载均衡池中移除,直到测成功。这对于处理依赖服务或临时不可用情况很重要,避免将请求发送到未准备好的容器。 接下来,我需要理清它们的区别。主要区别在于用途后果:启动针只在启动阶段使用,存活探针失败导致重启,而就绪探针失败则停止流量。另外,它们的配置参数可能类似,比如检查间隔、超时时间等,但用途不同。 用户可能需要具体的例子来理解。比如,一个Java应用启动慢,使用启动针延长初始化时间;存活探针定期检查健康端点;就绪探针检查依赖数据库是否连接。 还需要注意配置不当的后果,比如存活探针设置过于敏感可能导致频繁重启,影响稳定性。或者就绪探针未正确配置,导致流量被发送到未准备好的实例。 可能还要提到它们可以组合使用,比如同时配置启动存活探针,确保启动期间不干扰,之后正常监控存状态。 需要检查是否有遗漏的概念或常见错误,确保信息准确。最后,用清晰的结构分点解释每个针,比较它们的区别,并给出示例帮助理解。</think>Kubernetes中的**启动针**、**存活探针****就绪探针**是保障容器健康的核心机制,以下是逐步解析: --- ### 一、核心功能与区别 | 针类型 | 作用场景 | 失败后果 | 典型用途 | |----------------|----------------------------|---------------------------|----------------------------| | **启动针** | 容器启动阶段(初始化时间长) | 不重启容器,但会持续重试 | 等待应用完成复杂初始化 | | **存活探针** | 容器运行期间(长期监控) | 重启容器(Pod) | 检测死锁、崩溃等不可恢复状态 | | **就绪探针** | 容器运行期间(服务可用性) | 从Service Endpoints移除 | 确保容器准备好接收流量 | --- ### 二、详细说明 #### 1. 启动针(Startup Probe) - **目的**:延迟其他针(存/就绪)的启动,避免因应用启动慢导致误判。 - **配置示例**: ```yaml startupProbe: httpGet: path: /health-startup port: 8080 failureThreshold: 30 # 允许最多30次失败(总等待时间=30*5秒=150秒) periodSeconds: 5 # 每5秒检查一次 ``` - **适用场景**:Java应用启动慢、依赖外部资源初始化。 #### 2. 存活探针(Liveness Probe) - **目的**:检测容器是否处于运行状态,失败则触发重启。 - **配置示例**: ```yaml livenessProbe: exec: command: ["pgrep", "myapp"] # 检查进程是否存在 initialDelaySeconds: 10 # 容器启动后10秒开始检查 periodSeconds: 5 ``` - **风险提示**:过于敏感可能导致频繁重启(需合理设置`failureThreshold`)。 #### 3. 就绪探针(Readiness Probe) - **目的**:判断容器是否可处理请求,失败则从Service摘除流量。 - **配置示例**: ```yaml readinessProbe: httpGet: path: /health-ready port: 8080 initialDelaySeconds: 5 periodSeconds: 10 ``` - **适用场景**:依赖数据库连接、临时资源不足。 --- ### 三、组合使用示例 ```yaml containers: - name: myapp image: myapp:v1 startupProbe: # 先保证启动完成 httpGet: path: /init-status port: 8080 failureThreshold: 20 periodSeconds: 10 livenessProbe: # 启动后监控存 httpGet: path: /health port: 8080 initialDelaySeconds: 60 # 等待启动针完成 periodSeconds: 5 readinessProbe: # 控制流量接入 tcpSocket: port: 8080 initialDelaySeconds: 5 periodSeconds: 10 ``` --- ### 四、关键参数解析 - `initialDelaySeconds`:容器启动后首次测的等待时间。 - `periodSeconds`:测间隔。 - `failureThreshold`:连续失败次数后判定为故障。 - `successThreshold`:成功次数后恢复状态(仅就绪探针生效)。 --- ### 五、常见错误与规避 1. **存活探针过于激进**:导致频繁重启,应适当增加`failureThreshold`。 2. **就绪探针未覆盖依赖项**:即使容器进程存,若依赖服务(如DB)不可用,需通过就绪探针拦截流量。 3. **启动针缺失**:长初始化应用被存活探针误杀,需用启动针“保护期”。 通过合理配置三种针,可显著提升应用在Kubernetes中的自愈能力与稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值