0

我将在我的 K8S 集群上部署 Keycloak,并且我选择了 PostgreSQL 作为数据库。

为了调整业务需求,我们必须为 Keycloak 添加额外的功能,例如自定义主题等。这意味着,对于 Keycloak 的每一次更改,我们都将触发 CI/CD 管道。我们将 Drone 用于 CI,将 ArgoCD 用于 CD。

在管道中,在它到达 CD 部分之前,我们希望确保 PostgreSQL 已启动并运行。
问题是,它是否存在用于 K8S 的工具,我们可以验证特定服务是否已启动并运行。

4

2 回答 2

1

“启动并运行”!=“存在”

1:要检查服务是否存在,只需执行kubectl get service <svc>

2:检查它是否有活动端点kubectl get endpoints <svc>

3:您还可以检查backing pods是否处于就绪状态。

2 & 3 需要在 pod/deployment 上正确配置就绪探针

于 2020-05-14T10:48:26.120 回答
1

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

如果上述任何一项导致问题,您可以在上面的链接中找到故障排除步骤。

关于评论中的问题:考虑到您需要确保一切正常,我认为没有更简单的方法。您可以跳过一些步骤,但这取决于您的用例。

我希望它有所帮助。

于 2020-05-15T08:12:38.553 回答