一、背景介绍
kubesphere打开devops功能的时候devops-jenkins的pod一直创建不成功。
kubectl describe 提示
Readiness probe failed: Get "http://10.233.93.28:8080/login": dial tcp 10.233.93.28:8080: connect: connection refused
二、问题解决
使用论坛中提供的方法。
https://ask.kubesphere.io/forum/d/7224-kubesphere-devops-jenkins-pod/3
问题出现的原因是部署中设置了容器活跃探针和容器准备探针。第一次pod启动的时候准备某些资源需要时间,但是探针提前检测了,然后重启了容器。
先删除探针,重启pod,确定服务启动的需要的时间,根据时间来设置探针首次运行的时间。
我的jenkins因为未知原因网页相应特别慢所以要额外设置get探测请求的响应等待时间
readinessProbe:httpGet:path: /loginport: httpscheme: HTTPinitialDelaySeconds: 38timeoutSeconds: 2periodSeconds: 2successThreshold: 1failureThreshold: 12livenessProbe:httpGet:path: /loginport: httpscheme: HTTPinitialDelaySeconds: 90timeoutSeconds: 5periodSeconds: 10successThreshold: 1failureThreshold: 12
在 Kubernetes 中,livenessProbe 和 readinessProbe 用于检测 Pod 的健康状况和就绪状态。它们是配置在 Pod 的容器上的探针。以下是你提供的配置参数的解释:
livenessProbe
livenessProbe 用于判断容器是否还在运行。如果探测失败,Kubernetes 会重启容器。这个配置可以帮助自动恢复进入不健康状态的容器。
httpGet: 通过 HTTP GET 请求进行探测。path: /login: 请求的路径为 /login。port: http: 使用名为 http 的端口。需要确保容器的端口映射中定义了该端口。scheme: HTTP: 使用 HTTP 协议。
initialDelaySeconds: 400: 容器启动后等待 400 秒再开始进行探测。这给容器足够的时间进行启动和初始化。
timeoutSeconds: 5: 探测的超时时间为 5 秒。如果在 5 秒内没有响应,探测将被视为失败。
periodSeconds: 10: 每 10 秒进行一次探测。
successThreshold: 1: 探测成功的最小次数。这里表示一次成功就认为容器是活跃的。
failureThreshold: 12: 探测失败的最大次数。如果连续 12 次探测失败,Kubernetes 会认为容器不健康,并重新启动容器。
readinessProbe
readinessProbe 用于判断容器是否已经准备好接受流量。如果探测失败,Kubernetes 会从服务的端点列表中移除该容器。这有助于确保只有就绪的容器才接收请求。
httpGet: 通过 HTTP GET 请求进行探测。path: /login: 请求的路径为 /login。port: http: 使用名为 http 的端口。需要确保容器的端口映射中定义了该端口。scheme: HTTP: 使用 HTTP 协议。
initialDelaySeconds: 300: 容器启动后等待 300 秒再开始进行探测。这给容器足够的时间进行启动和初始化。
timeoutSeconds: 2: 探测的超时时间为 2 秒。如果在 2 秒内没有响应,探测将被视为失败。
periodSeconds: 2: 每 2 秒进行一次探测。
successThreshold: 1: 探测成功的最小次数。这里表示一次成功就认为容器是就绪的。
failureThreshold: 12: 探测失败的最大次数。如果连续 12 次探测失败,Kubernetes 会认为容器未就绪,并将其从服务的端点列表中移除。
总结
livenessProbe 用于确保容器正在运行,如果连续 12 次探测失败,容器会被重启。
readinessProbe 用于确保容器已经准备好接受流量,如果连续 12 次探测失败,容器会被从服务的端点列表中移除。
两个探针都通过 HTTP GET 请求 /login 路径来进行探测,并且使用名为 http 的端口和 HTTP 协议。
配置探针的这些参数可以根据容器的启动时间和健康检查需求进行调整,以确保容器的高可用性和可靠性。