确保服务存在

Ensure services exist

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

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

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

"Up and running" != "Exists"

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

2:要检查它是否有活动端点,请执行 kubectl get endpoints <svc>

3: 还可以查看后备pods是否处于就绪状态

2 和 3 需要在 pod/deployment

上正确配置就绪探测器

Radek 的回答是正确的,但我想在 official docs 的帮助下对其进行扩展。为确保该服务存在并正常工作,您需要:

  • 确保 Pods 实际上是 运行 并且正在投放:kubectl get pods -o go-template='{{range .items}}{{.status.podIP}}{{"\n"}}{{end}}'

  • 检查服务是否存在:kubectl get svc

  • 检查端点是否存在: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

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

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

希望对您有所帮助。