Dqlite database¶
Canonical Kubernetes may use not one, but two Dqlite databases:
k8s-dqlite – By default, Kubernetes uses etcd as its datastore, but you can choose k8s-dqlite as an alternative. Any references to k8s-dqlite are relevant only if it has been selected as the Kubernetes datastore on bootstrap.
k8sd - Kubernetes cluster management data
Database files¶
Each database has its own state directory:
/var/snap/k8s/common/var/lib/k8s-dqlite/var/snap/k8s/common/var/lib/k8sd/state
The state directory normally contains:
info.yaml- the id, address and cluster role of this nodecluster.yaml- the state of the cluster, as seen by this Dqlite node. It includes the same information as info.yaml, but for all cluster nodes00000abcxx-00000abcxx,open-abc- database segmentscluster.crt,cluster.key- node certificatessnapshot-abc-abc-abc.metametadata{1,2}*.sock- control unix sockets
K8sd contains additional files to manage cluster memberships and member’s secure communication:
server.crt,server.keycertificatestruststorefolder, containing trusted certificatesdaemon.yaml- k8sd daemon configurationseparate
databasefolder
Dqlite cluster members have one of the following roles:
Role enum |
Role name |
Replicates database |
Voting in leader elections |
|---|---|---|---|
0 |
voter |
yes |
yes |
1 |
stand-by |
yes |
no |
2 |
spare |
no |
no |
Inspecting the databases¶
Use the following command to connect to the k8s-dqlite database:
sudo /snap/k8s/current/bin/dqlite \
-s file:///var/snap/k8s/common/var/lib/k8s-dqlite/cluster.yaml \
-c /var/snap/k8s/common/var/lib/k8s-dqlite/cluster.crt \
-k /var/snap/k8s/common/var/lib/k8s-dqlite/cluster.key \
k8s
The .leader command displays the current cluster leader.
The kine key-value pairs are stored in the kine database and can be
retrieved like so:
select id, name, value from kine limit 100;
Use /snap/k8s/current/bin/k8sd sql to issue SQL queries to the k8sd
Dqlite database. Note that a very limited subset of SQL syntax is available,
however the following can be used to enumerate the tables:
/snap/k8s/current/bin/k8sd sql \
--state-dir /var/snap/k8s/common/var/lib/k8sd/state \
"SELECT * FROM sqlite_master WHERE type='table'"