bedrock
tenant layer

Bootstrap

Commands

CommandRuns
make deployansible-playbook -i bootstrap/hosts.ini bootstrap/bedrock-bootstrap.yml
make teardownansible-playbook -i bootstrap/hosts.ini bootstrap/bedrock-teardown.yml
make redeployTeardown, then deploy
make checkSyntax check of the bootstrap playbook

Set INVENTORY=path/to/hosts.ini to use another inventory file.

Inventory groups

GroupMembers
server_initThe first node, which creates the cluster
server_joinThe other server nodes, joined one at a time
rke2_serversBoth groups together

Variables

VariableDefaultEffect
rke2_versionv1.36.4+rke2r1RKE2 release to install
nats_enabledfalseDeploy NATS JetStream
redis_enabledfalseDeploy Redis with Sentinel
kafka_enabledfalseDeploy Strimzi and Kafka
kubeconfig~/.bedrock/kubeconfigWhere the admin kubeconfig is written on the controller

Stages

StageWhat runs
1Node packages (open-iscsi, nfs-common, cryptsetup, lvm2), the etcd user, CIS kernel settings, the dm_crypt module
2Audit policy, RKE2 configuration, Cilium configuration, RKE2 install from a checksummed release
3The first server, then the others one at a time
4kubectl, crictl and ctr links and the login profile on every node
5Namespaces, priority classes and the ValidatingAdmissionPolicy
6Kyverno, scaled to 3 replicas, then its policies
7Placeholder secrets
8Longhorn, with its RBAC rewritten without wildcards
9CloudNativePG operator and prometheus-operator
10Longhorn encryption key and storage class, Garage, the bucket job
11cluster-1, its first backup, the certificate sync, then cluster-2 and cluster-3
12Poolers, scheduled backups and disruption budgets
13Event buses, if enabled
14Loki, Alloy, Tempo, Prometheus and exporters, alerting, Grafana, OpenCost, Falco, Reloader, dashboards
15Token automount turned off on every default service account
16Network policies, then a check that every namespace running pods has one

Files the bootstrap writes on the nodes

PathContents
/etc/rancher/rke2/config.yamlRKE2 configuration
/etc/rancher/rke2/bedrock-audit.yamlAPI audit policy
/var/lib/rancher/rke2/server/manifests/rke2-cilium-config.yamlCilium settings
/etc/sysctl.d/60-rke2-cis.confCIS kernel settings and inotify limits
/etc/modules-load.d/dm_crypt.confLoads dm_crypt at boot for volume encryption
/etc/profile.d/rke2.shSets KUBECONFIG and CRI_CONFIG_FILE at login
/var/lib/rancher/rke2/server/logs/audit.logThe API audit log, shipped to Loki