我将在我的 K8S 集群上部署 Keycloak,并且我选择了 PostgreSQL 作为数据库。
为了调整业务需求,我们必须为 Keycloak 添加额外的功能,例如自定义主题等。这意味着,对于 Keycloak 的每一次更改,我们都将触发 CI/CD 管道。我们将 Drone 用于 CI,将 ArgoCD 用于 CD。
在管道中,在它到达 CD 部分之前,我们希望确保 PostgreSQL 已启动并运行。
问题是,它是否存在用于 K8S 的工具,我们可以验证特定服务是否已启动并运行。
我将在我的 K8S 集群上部署 Keycloak,并且我选择了 PostgreSQL 作为数据库。
为了调整业务需求,我们必须为 Keycloak 添加额外的功能,例如自定义主题等。这意味着,对于 Keycloak 的每一次更改,我们都将触发 CI/CD 管道。我们将 Drone 用于 CI,将 ArgoCD 用于 CD。
在管道中,在它到达 CD 部分之前,我们希望确保 PostgreSQL 已启动并运行。
问题是,它是否存在用于 K8S 的工具,我们可以验证特定服务是否已启动并运行。
“启动并运行”!=“存在”
1:要检查服务是否存在,只需执行kubectl get service <svc>
2:检查它是否有活动端点kubectl get endpoints <svc>
3:您还可以检查backing pods是否处于就绪状态。
2 & 3 需要在 pod/deployment 上正确配置就绪探针
Radek 的回答是正确的,但我想在官方文档的帮助下对其进行扩展。为确保服务存在且正常工作,您需要:
确保 Pod 确实在运行和服务:kubectl get pods -o go-template='{{range .items}}{{.status.podIP}}{{"\n"}}{{end}}'
检查服务是否存在:kubectl get svc
检查 Endopints 是否存在:kubectl get endopints
如果需要,检查服务是否通过 DNS 名称工作:(nslookup hostnames
来自同一命名空间中的 Pod)或nslookup hostnames.<namespace>
(如果它在不同的命名空间中)
如果需要,检查服务是否通过 IP 工作:for i in $(seq 1 3); do
wget -qO- <IP:port>
done
确保服务定义正确:kubectl get service <service name> -o json
检查 kube-proxy 是否工作:ps auxw | grep kube-proxy
如果上述任何一项导致问题,您可以在上面的链接中找到故障排除步骤。
关于评论中的问题:考虑到您需要确保一切正常,我认为没有更简单的方法。您可以跳过一些步骤,但这取决于您的用例。
我希望它有所帮助。