部署和容器级别的就绪探针之间的关系是什么

79次阅读
没有评论

问题描述

在使用Helm Chart部署容器时,定义了容器的readinessProbe,并在部署后通过浏览器访问了就绪探针的URL,得到了Healthy的响应。但是,当用户使用kubectl describe pod命令查看容器的详细信息时,发现容器的就绪探针URL与部署时设置的不同。此外,当用户在集群内部的容器IP地址上运行curl命令时,没有返回任何文本。用户想知道这两者之间的区别是什么。

解决方案

请注意以下操作注意版本差异及修改前做好备份。
容器的就绪探针是用于检查容器是否已准备好接收流量的一种机制。在Kubernetes中,就绪探针可以在容器级别或部署级别进行定义。下面将解释部署和容器级别就绪探针之间的关系以及它们的区别。

部署级别的就绪探针

部署级别的就绪探针是在Kubernetes部署对象中定义的。它是用于检查整个部署中所有容器是否已准备好接收流量的机制。部署级别的就绪探针可以通过以下方式定义:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: my-container
        image: my-image
        readinessProbe:
          httpGet:
            path: /health/readiness
            port: http

在上面的示例中,readinessProbe被定义在部署对象的容器规范中。它使用httpGet方法发送HTTP GET请求到指定的路径和端口,以检查容器是否已准备好接收流量。

容器级别的就绪探针

容器级别的就绪探针是在容器规范中定义的。它是用于检查单个容器是否已准备好接收流量的机制。容器级别的就绪探针可以通过以下方式定义:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: my-image
    readinessProbe:
      httpGet:
        path: /app-health/my-service-name-is-shown-here/readyz

在上面的示例中,readinessProbe被定义在Pod对象的容器规范中。它使用httpGet方法发送HTTP GET请求到指定的路径,以检查容器是否已准备好接收流量。

部署级别和容器级别就绪探针的区别

部署级别的就绪探针是在部署对象中定义的,用于检查整个部署中所有容器的就绪状态。容器级别的就绪探针是在容器规范中定义的,用于检查单个容器的就绪状态。

在你的情况下,部署级别的就绪探针被正确地定义为发送HTTP GET请求到/health/readiness路径,并返回Healthy作为响应。但是,容器级别的就绪探针被错误地定义为发送HTTP GET请求到/app-health/my-service-name-is-shown-here/readyz路径,并返回HTTP状态码作为响应。

因此,部署级别的就绪探针是你设置的就绪探针,而容器级别的就绪探针是由Kubernetes自动生成的默认就绪探针。

为了解决这个问题,你可以在部署对象中删除容器级别的就绪探针定义,只保留部署级别的就绪探针定义。这样,只有部署级别的就绪探针会生效,并且你将能够通过浏览器访问到正确的就绪探针URL并得到Healthy的响应。

希望这个解释能帮助你理解部署级别和容器级别就绪探针之间的区别。如果你还有其他问题,请随时提问。

正文完