KOTS deploys a rqlite StatefulSet to store the version history, application metadata and other small amounts of data needed to manage the application(s).
These are checks/data retrieval that can be performed on rqlite StatefulSet.
Prerquisites
- curl, jq, yq installed
Steps
First, port-forward rqlite to access its HTTP API
export NAMESPACE=<namespace>
kubectl port-forward svc/kotsadm-rqlite 4001:4001 -n $NAMESPACE
In another terminal, setup the credential
export NAMESPACE=<namespace>
export URL=kotsadm:$(kubectl get secret kotsadm-rqlite -n $NAMESPACE -o jsonpath='{.data.password}' | base64 -d)@localhost:4001
Now we can perform these checks/data retrieval using curl
Verify that rqlite is up and running
curl $URL/readyz
[+]node ok
[+]leader ok
[+]store ok
Check current database size
curl -s $URL/status\?pretty | jq -r '.store.dir_size_friendly'
3.7 MB
Verify that all rqlite nodes are live and reachable
curl -s $URL/nodes\?pretty
{
"kotsadm-rqlite-0": {
"id": "kotsadm-rqlite-0",
"api_addr": "http://kotsadm-rqlite-0.kotsadm-rqlite-headless.default.svc.cluster.local:4001",
"addr": "kotsadm-rqlite-0.kotsadm-rqlite-headless.default.svc.cluster.local:4002",
"voter": true,
"reachable": true,
"leader": true,
"time": 2.08e-7,
"time_s": "542ns"
}
}
Validate that SQL query can be executed
curl -sG $URL/db/query\?pretty\&timings --data-urlencode 'q=SELECT 1'
{
"results": [
{
"columns": [
"1"
],
"types": [
"integer"
],
"values": [
[
1
]
],
"time": 0.000061166
}
],
"time": 0.000264582
}
Get latest application config values
curl -sG $URL/db/query\?pretty\&timings --data-urlencode 'q=select av.config_values from app_version av join app a on a.id=av.app_id and a.current_sequence = av.sequence' | jq -r '.results[0].values[0][0]' | yq e 'del(.metadata, .status)' -
apiVersion: kots.io/v1beta1
kind: ConfigValues
spec:
values:
...
Backup the database
curl $URL/db/backup\?compress -o db.bak.gz
Restore the database
gunzip -d db.bak.gz
curl -v -XPOST $URL/db/load -H "Content-type: application/octet-stream" --data-binary @db.bak