Ensure services exist

5/14/2020

I am going to deploy Keycloak on my K8S cluster and as a database I have chosen PostgreSQL.

To adjust the business requirements, we have to add additional features to Keycloak, for example custom theme, etc. That means, for every changes on Keycloak we are going to trigger CI/CD pipeline. We use Drone for CI and ArgoCD for CD.

In the pipeline, before it hits the CD part, we would like to ensure, that PostgreSQL is up and running.
The question is, does it exist a tool for K8S, that we can validate, if particular services are up and running.

-- zero_coding
argocd
kubernetes
postgresql

2 Answers

5/14/2020

"Up and running" != "Exists"

1: To check if a service exists, just do a kubectl get service <svc>

2: To check if it has active endpoints do kubectl get endpoints <svc>

3: You can also check if backing pods are in ready state.

2 & 3 requires readiness probe to be properly configured on the pod/deployment

-- Radek 'Goblin' Pieczonka
Source: StackOverflow

5/15/2020

Radek is right in his answer but I would like to expand on it with the help of the official docs. To make sure that the service exists and is working properly you need to:

  • Make sure that Pods are actually running and serving: kubectl get pods -o go-template='{{range .items}}{{.status.podIP}}{{"\n"}}{{end}}'

  • Check if Service exists: kubectl get svc

  • Check if Endopints exist: kubectl get endopints

  • If needed, check if the Service is working by DNS name: nslookup hostnames (from a Pod in the same Namespace) or nslookup hostnames.<namespace> (if it is in a different one)

  • If needed, check if the Service is working by IP: for i in $(seq 1 3); do wget -qO- <IP:port> done

  • Make sure that the Service is defined correctly: kubectl get service <service name> -o json

  • Check if the kube-proxy working: ps auxw | grep kube-proxy

If any of the above is causing a problem, you can find the troubleshooting steps in the link above.

Regarding your question in the comments: I don't think there is a n easier way considering that you need to make sure that everything is working fine. You can skip some of the steps but that would depend on your use case.

I hope it helps.

-- OhHiMark
Source: StackOverflow