libre.sh/README.md
2024-03-07 10:34:20 +01:00

182 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# libre.sh
libre.sh is a platform to manage many instances of different applications at scale.
## Use Cases
The use cases directory lists things we try to achieve with libre.sh.
## Glossary
Application: an application is a web application that is usable by an end user (For instance: HedgeDoc, Discourse, …).
Object Store (S3 API “standard”): An http API to store and retrieve objects.
PITR: Point in Time Recovery
## Personas
### Cluster Operator
A Cluster Operator is a System Administrator, or Site Reliability Engineer that is transforming raw machines (physical, virtual) into a production Kubernetes cluster.
This person is typically root on servers and on Kubernetes API.
### Application Operator
An Application Operator is a person that is less technical than a Cluster Operator, and doesnt necessarily understand the command line interface.
But this person, through a nice User interface, is able to manipulate high level objects that represent the application.
### End User
A user that will interact only with an application.
## Architecture decision records
## Systems
### libre.sh runtime
A collection of controllers and services that are required to deploy applications instances.
### libre.sh runtime manager
The controller in charge of installing/configuring/upgrading the runtime.
## Development
### Requirements
- nix-shell
### Enter the shell
```shell
nix-shell
```
### Creating the cluster
```shell
kind create cluster --config kind-config.yaml
```
### Running tilt
```shell
tilt up
```
With other operators:
```shell
tilt up -- import-operator
```
Changing args without restarting:
```shell
tilt args import-operator
```
### Deleting the cluster
```shell
kind delete cluster --name libresh-dev
```
## Minimal install
```shell
kubectl create ns libresh-system
kubectl create cm -f - << EOF
apiVersion: v1
kind: Secret
metadata:
name: cluster-settings
namespace: libresh-system
type: Opaque
stringData:
CLUSTER_DOMAIN: my-cluster.my-domain.fr
CLUSTER_EMAIL: admin@my-domain.fr
CLUSTER_NAME: my-cluster
DEFAULT_CLUSTERISSUER: letsencrypt
EOF
kubectl create -f ./cluster/libresh-cluster.yml
kubectl create -f ./cluster/priorityclasses/flux-ks.yml
kubectl create -f ./cluster/components/networking/cert-manager/flux-ks.yml
kubectl create -f ./cluster/components/networking/ingress-nginx/flux-ks.yml
kubectl create -f ./cluster/components/databases/postgres-zalando/flux-ks.yaml
```
### Deploy CertManager ClusterIssuer
```
kubectl apply -f ./cluster/components/networking/cert-manager-issuers/self-signed.yaml
```
### Deploy MinIO Tenant
```
# deploy minio operator
cd ./cluster/components/objectstore/minio/
kubectl create -f ./flux-ks.yml
cd tenant-example
cp ./config-example.env ./config.env
vi ./config.env
kubectl -n minio create secret generic --from-file=./config.env prod-storage-configuration
# deploy minio tenant - This part is given as a rough example, read and modify carefuly, but you can get the idea
export CLUSTER_DOMAIN=my-cluster.my-domain.fr
envsubst < ./tenant-example.yaml > ./tenant.yaml
vi ./tenant.yaml
kubectl apply -f ./tenant.yaml
```
### configure libresh-system
```
kubectl create -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
name: libresh-config
namespace: libresh-system
type: Opaque
stringData:
object-storage.yml: |
apiVersion: objectstorage.libre.sh/v1alpha1
kind: ObjectStorageConfig
mapping:
data: my-s3
pitr: my-s3
providers:
- name: my-s3
host: CHANGE_ME
insecure: false
accessKey: CHANGE_ME
secretKey: CHANGE_ME
mailbox.yml: |
apiVersion: config.libre.sh/v1alpha1
kind: MailboxConfig
spec:
providers: []
keycloak.yml: |
default: ""
providers: []
EOF
make install
IMG=registry.libre.sh/operator:v1.0.0-alpha.1 make deploy
```
## Upgrade
[Renovabot](https://docs.renovatebot.com/) runs regularly, it will create MR against `main` branch.
Currently a human has to accept them.
Once you are happy with a state of the main branch, you can tag a release.
Then, to update your cluster, you just need to edit the tag in the gitrepository:
```
kubectl -n libresh-system edit gitrepositories libresh-cluster
```
This will update all components managed by libre.sh.