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 |
...