kubernetes中的探针使用

2023-03-29 12:57:56 浏览数 (1)

在Kubernetes中,探针(Probe)是一种用于检查容器是否正常运行的机制。探针分为两种类型:Liveness探针和Readiness探针。Liveness探针用于检查容器是否仍在运行,而Readiness探针用于检查容器是否准备好接收流量。

探针可以使用以下三种方式之一定义在Pod中:

HTTP GET

使用HTTP GET探测器时,Kubernetes会向Pod的容器发送HTTP GET请求,并等待容器返回200状态码。如果容器返回200状态码,则Kubernetes认为容器正在运行,并继续向容器发送流量。如果容器未返回200状态码,则Kubernetes认为容器已停止,并开始重启容器。

下面是一个使用HTTP GET探测器的示例yaml文件:

代码语言:javascript复制
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
  - name: myapp-container
    image: myapp-image
    ports:
    - containerPort: 80
    readinessProbe:
      httpGet:
        path: /healthz
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10
      failureThreshold: 3

在上面的示例中,Readiness探针被定义为一个HTTP GET请求,发送到容器的端口80上。如果容器返回200状态码,则Kubernetes认为容器已准备好接收流量。探针的初始化延迟为5秒,间隔为10秒,失败阈值为3。

TCP

使用TCP探针时,Kubernetes会尝试连接Pod的容器的指定端口,并等待成功的连接。如果连接成功,则Kubernetes认为容器正在运行,并继续向容器发送流量。如果连接失败,则Kubernetes认为容器已停止,并开始重启容器。

下面是一个使用TCP探针的示例yaml文件:

代码语言:javascript复制
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
  - name: myapp-container
    image: myapp-image
    ports:
    - containerPort: 80
    readinessProbe:
      tcpSocket:
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10
      failureThreshold: 3

在上面的示例中,Readiness探针被定义为一个TCP连接,连接到容器的端口80。如果连接成功,则Kubernetes认为容器已准备好接收流量。探针的初始化延迟为5秒,间隔为10秒,失败阈值为3。

Exec

使用Exec探针时,Kubernetes会在Pod的容器中执行指定的命令,并等待命令成功执行。如果命令成功执行,则Kubernetes认为容器正在运行,并继续向容器发送流量。如果命令未成功执行,则Kubernetes认为容器已停止,并开始重启容器。

下面是一个使用Exec探针的示例yaml文件:

代码语言:javascript复制
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
  - name: myapp-container
    image: myapp-image
    ports:
    - containerPort: 80
    readinessProbe:
      exec:
        command:
        - /bin/sh
        - -c
        - ps aux | grep myapp
      initialDelaySeconds: 5
      periodSeconds: 10
      failureThreshold: 3

在上面的示例中,Readiness探针被定义为一个执行命令,检查容器中是否存在名为"myapp"的进程。如果命令成功执行,则Kubernetes认为容器已准备好接收流量。探针的初始化延迟为5秒,间隔为10秒,失败阈值为3。

需要注意的是,Exec探针需要在容器中安装支持执行命令的工具,例如bash或sh。

除了Readiness探针,Liveness探针也可以使用上述三种方式之一进行定义。唯一的区别是Liveness探针用于检测容器是否仍在运行,而不是检测容器是否准备好接收流量。例如,以下是一个使用Exec探针的Liveness探针示例yaml文件:

代码语言:javascript复制
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
spec:
  containers:
  - name: myapp-container
    image: myapp-image
    ports:
    - containerPort: 80
    livenessProbe:
      exec:
        command:
        - /bin/sh
        - -c
        - ps aux | grep myapp
      initialDelaySeconds: 5
      periodSeconds: 10
      failureThreshold: 3

在上面的示例中,Liveness探针被定义为一个执行命令,检查容器中是否存在名为"myapp"的进程。如果命令成功执行,则Kubernetes认为容器正在运行。探针的初始化延迟为5秒,间隔为10秒,失败阈值为3。

0 人点赞