|
| 1 | +# IronBuckets Kubernetes Deployment |
| 2 | + |
| 3 | +This directory contains Kubernetes manifests for deploying IronBuckets using |
| 4 | +[Flux](https://fluxcd.io/) and the |
| 5 | +[bjw-s app-template](https://github.com/bjw-s/helm-charts/tree/main/charts/library/common) |
| 6 | +Helm chart. |
| 7 | + |
| 8 | +## Architecture |
| 9 | + |
| 10 | +The deployment runs two containers in a single pod: |
| 11 | + |
| 12 | +- **ironbuckets** - The main web UI application (port 8080) |
| 13 | +- **minio** - MinIO object storage server (ports 9000, 9001) |
| 14 | + |
| 15 | +## Container Images |
| 16 | + |
| 17 | +Images are published to GitHub Container Registry on each release: |
| 18 | + |
| 19 | +- `ghcr.io/damacus/ironbuckets:latest` |
| 20 | +- `ghcr.io/damacus/minio-community:latest` |
| 21 | + |
| 22 | +Both images support `linux/amd64` and `linux/arm64` architectures. |
| 23 | + |
| 24 | +## Prerequisites |
| 25 | + |
| 26 | +- Kubernetes cluster with Flux installed |
| 27 | +- [bjw-s HelmRepository](https://github.com/bjw-s/helm-charts) configured |
| 28 | +- External Secrets Operator (optional, for secret management) |
| 29 | +- Gateway API or Ingress controller |
| 30 | + |
| 31 | +## Directory Structure |
| 32 | + |
| 33 | +```text |
| 34 | +kubernetes/ |
| 35 | +└── apps/ |
| 36 | + └── ironbuckets/ |
| 37 | + ├── ks.yaml # Flux Kustomization |
| 38 | + └── app/ |
| 39 | + ├── HelmRelease.yaml # App-template HelmRelease |
| 40 | + ├── externalsecret.yaml # External secret for credentials |
| 41 | + └── kustomization.yaml # Kustomize resources |
| 42 | +``` |
| 43 | + |
| 44 | +## Configuration |
| 45 | + |
| 46 | +### Required Secrets |
| 47 | + |
| 48 | +Create a secret named `ironbuckets-secret` with: |
| 49 | + |
| 50 | +- `MINIO_ACCESS_KEY` - MinIO access key / username |
| 51 | +- `MINIO_SECRET_KEY` - MinIO secret key / password |
| 52 | + |
| 53 | +If using External Secrets Operator, update `externalsecret.yaml` with your |
| 54 | +secret store configuration. |
| 55 | + |
| 56 | +### Manual Secret Creation |
| 57 | + |
| 58 | +```bash |
| 59 | +kubectl create secret generic ironbuckets-secret \ |
| 60 | + --from-literal=MINIO_ACCESS_KEY=your-access-key \ |
| 61 | + --from-literal=MINIO_SECRET_KEY=your-secret-key |
| 62 | +``` |
| 63 | + |
| 64 | +### Customization |
| 65 | + |
| 66 | +Edit `HelmRelease.yaml` to customize: |
| 67 | + |
| 68 | +- **Image tags** - Pin to specific versions instead of `latest` |
| 69 | +- **Resource limits** - Adjust CPU/memory based on your needs |
| 70 | +- **Persistence** - Configure storage class and size |
| 71 | +- **Routes/Ingress** - Update hostnames for your domain |
| 72 | + |
| 73 | +## Standalone Deployment |
| 74 | + |
| 75 | +If not using Flux, you can deploy with Helm directly: |
| 76 | + |
| 77 | +```bash |
| 78 | +helm repo add bjw-s https://bjw-s.github.io/helm-charts |
| 79 | +helm repo update |
| 80 | + |
| 81 | +# Extract values from HelmRelease.yaml and apply |
| 82 | +helm install ironbuckets bjw-s/app-template \ |
| 83 | + --values <your-values.yaml> |
| 84 | +``` |
| 85 | + |
| 86 | +## Services |
| 87 | + |
| 88 | +The deployment creates three services: |
| 89 | + |
| 90 | +| Service | Port | Description | |
| 91 | +| -------------------------- | ---- | ------------------------ | |
| 92 | +| ironbuckets-app | 8080 | IronBuckets web UI | |
| 93 | +| ironbuckets-minio-api | 9000 | MinIO S3 API | |
| 94 | +| ironbuckets-minio-console | 9001 | MinIO web console | |
| 95 | + |
| 96 | +## Health Checks |
| 97 | + |
| 98 | +Both containers have liveness and readiness probes configured: |
| 99 | + |
| 100 | +- **IronBuckets**: `GET /health` on port 8080 |
| 101 | +- **MinIO**: `GET /minio/health/live` and `/minio/health/ready` on port 9000 |
0 commit comments