How to run the swh stack in a local kubernetes cluster#
Intended audience
staff/syadmin members who wants to run a production-like swh stack in a local kubernetes cluster
Requirements#
helm the package manager for kubernetes
a local kubernetes environment, we assume kind in this document (another could be minikube)
one up-to-date local checkout of the swh charts
Place yourselves in the root folder of your local checkout of swh-charts.
Create a local cluster#
We will first create a local cluster named ‘local-cluster’ with the necessary dependencies for the swh stack to run:
make local-cluster-create
make local-cluster-install-deps
Note:
The associated cluster configuration is written at $HOME/.kube/config.d/local-cluster.yaml
$ pwd
/path/to/swh/sysadm-environment/swh-charts
$ make local-cluster-create
---
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
Creating cluster "local-cluster" ...
✓ Ensuring node image (kindest/node:v1.30.0)
✓ Preparing nodes
✓ Writing configuration
✓ Starting control-plane
✓ Installing CNI
✓ Installing StorageClass
✓ Joining worker nodes
Set kubectl context to "kind-local-cluster"
You can now use your cluster with:
kubectl cluster-info --context kind-local-cluster --kubeconfig
$HOME/.kube/config.d/local-cluster.yaml
$ make local-cluster-install-deps
Release "ingress-nginx" does not exist. Installing it now.
NAME: ingress-nginx
LAST DEPLOYED: Fri Jul 5 10:45:49 2024
NAMESPACE: ingress-nginx
STATUS: deployed
REVISION: 1
TEST SUITE: None
...
NAME: rabbitmq-operator
LAST DEPLOYED: Fri Jul 5 10:46:10 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
...
CHART NAME: rabbitmq-cluster-operator
CHART VERSION: 4.3.10
APP VERSION: 2.9.0
+info https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
Release "cloudnative-pg" does not exist. Installing it now.
NAME: cloudnative-pg
LAST DEPLOYED: Fri Jul 5 10:46:12 2024
NAMESPACE: cnpg-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
...
Release "cert-manager" does not exist. Installing it now.
NAME: cert-manager
LAST DEPLOYED: Fri Jul 5 10:46:14 2024
NAMESPACE: cert-manager
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
...
Release "k8ssandra-operator" does not exist. Installing it now.
NAME: k8ssandra-operator
LAST DEPLOYED: Fri Jul 5 10:46:59 2024
NAMESPACE: k8ssandra-operator
STATUS: deployed
REVISION: 1
TEST SUITE: None
Install the cluster-components chart#
We have defined various gitted local-cluster.yaml files in our repository swh-charts. As most functionalities are toggled off by default, we need to enable those when installing the charts.
We’ll do this using locally non-gitted override files at the root of the repository, namely:
cluster-components (cc): local-cluster-cc.override.yaml
swh: local-cluster-swh.override.yaml
# Install the cluster-components chart (mostly backends)
$ make local-cluster-cc
# Give it some time for the various backends to start properly
# The first time around, plenty of docker images will get pulled
# so that can take a while
# One can add some kubernetes command line to wait for some condition to be
met
# kubectl --context kind-local-cluster wait --for=condition=Ready
# pod/search-es-node-0 \
--namespace swh
# Install the swh chart (swh stack)
$ make local-cluster-swh
Note: The Makefile detects your (optional) override files, ensure they are correctly named or nothing will get installed.
$ cat local-cluster-cc.override.yaml
podPriority:
enabled: true
svix:
enabled: true
rabbitmq:
enabled: true
cloudnativePg:
enabled: true
kafka:
enabled: true
cassandra:
enabled: true
elasticsearch:
enabled: true
redis:
enabled: true
$ cat local-cluster-swh.override.yaml
storage:
enabled: true
web:
enabled: true
webhooks:
enabled: true
deposit:
enabled: true
toolbox:
enabled: true
scheduler:
enabled: true
cookers:
enabled: false
indexers:
enabled: true
scrubber:
enabled: true
graphql:
enabled: false
listers:
enabled: true
loaders:
enabled: true
loaderMetadata:
enabled: true
checkerDeposit:
enabled: true
memcached:
enabled: false
podPriority:
enabled: true
vault:
enabled: true
indexerStorage:
enabled: true
search:
enabled: true
objstorage:
enabled: false
counters:
enabled: true
alter:
enabled: false
storageReplayer:
enabled: true
The full local-cluster configuration can be found in their respective values files (and you can override more than just the enabled flag):