Kubernetes cheat sheet for Qserv

Check first the official k8s cheat sheet for examples of kubectl basic commands.

Prerequisites

Get access to a Kubernetes cluster running Qserv, see Installation.

Interact with running pods

# Check a qserv instance is up and running
$ kubectl get qservs.qserv.lsst.org
NAME        AGE
qserv-dev   12h

# Get instance name
$ INSTANCE=$(kubectl get qservs.qserv.lsst.org -o=jsonpath='{.items[0].metadata.name}')
$ echo $INSTANCE
qserv-dev

# Describe a pod
$ kubectl describe pods "$INSTANCE"-worker-0

# Get the containers list for a given pod
$ kubectl get pods "$INSTANCE"-worker-0 -o jsonpath='{.spec.containers[*].name}'

# Open a shell on mariadb container on worker qserv-0
$ kubectl exec -it "$INSTANCE"-worker-0 -c mariadb bash

Access to log files

CZAR_POD="$INSTANCE-czar-0"

# Get the xrootd container logs on pod czar-0
kubectl logs "$CZAR_POD" -c xrootd

# Get the previous xrootd container logs on pod czar-0
kubectl logs "$CZAR_POD" -c xrootd -p

Stern provides advanced logging management features.

Update Qserv configuration

Update Qserv configuration by updating its related k8s configmaps.

# List configmaps
$ kubectl get configmaps -l app=qserv,instance="$INSTANCE"

# Edit configmap online, i.e. directly inside etcd, the k8s database
$ kubectl edit configmaps qserv-dev-repl-ctl-etc

# Restart the pod using the configmap, in order to take in account the new configuration
$ kubectl delete po "$INSTANCE"-repl-ctl-0

# A Qserv re-install will reset the configmap, so eventually, backup the configmap locally
$ kubectl get cm "$INSTANCE"-repl-ctl-etc -o yaml > "$INSTANCE".bck.yaml

Configure log level

The above technique can be used to configure logging level for xrootd and cmsd servers, replication worker and replication controller and czar proxy.

For example, for cmsd server:

kubectl edit cm qserv-cmsd-server-etc
# Then update log.cnf
# And restart Qserv worker pods
kubectl delete pods app=qserv,component=worker

Launch commands directly on Qserv nodes

Check if pod worker-0 can connect to replication database and dump it configuration

$ kubectl exec -it "$INSTANCE"-worker-0 -c repl-wrk -- mysql -h "$INSTANCE"-repl-db -u qsreplica -e "SELECT * FROM qservReplica.config;"
+------------+---------------------------------+-----------------------------+
| category   | param                           | value                       |
+------------+---------------------------------+-----------------------------+
| common     | request_buf_size_bytes          | 131072                      |
| common     | request_retry_interval_sec      | 5                           |
| controller | empty_chunks_dir                | /qserv/data/qserv           |
| controller | http_server_port                | 8080                        |
| controller | http_server_threads             | 16                          |
| controller | job_heartbeat_sec               | 0                           |
| controller | job_timeout_sec                 | 57600                       |
...