确保服务存在
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 中找到故障排除步骤。
关于评论中的问题:考虑到您需要确保一切正常,我认为没有更简单的方法。您可以跳过一些步骤,但这取决于您的用例。
希望对您有所帮助。
我打算在我的 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 中找到故障排除步骤。
关于评论中的问题:考虑到您需要确保一切正常,我认为没有更简单的方法。您可以跳过一些步骤,但这取决于您的用例。
希望对您有所帮助。