Skip to content

Commit 516a5a4

Browse files
committed
chore: update to use metallb
Signed-off-by: Valery Piashchynski <piashchynski.valery@gmail.com>
1 parent f905896 commit 516a5a4

3 files changed

Lines changed: 69 additions & 10 deletions

File tree

README.md

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ helm upgrade --install roadrunner ./deploy/charts/roadrunner -n roadrunner --cre
6565
### Argo CD sync
6666

6767
1. Edit `deploy/argocd/application.yaml` (`repoURL`, `targetRevision`) if needed.
68-
2. Edit `deploy/argocd/values.yaml` (image, worker command, gateway hostnames/class, metrics settings).
68+
2. Edit `deploy/argocd/values.yaml` (image, worker command, exposure mode, metrics settings).
6969
3. Apply:
7070

7171
```bash
@@ -75,8 +75,32 @@ kubectl apply -f deploy/argocd/application.yaml
7575
The Argo CD example values are preconfigured for:
7676

7777
- image: `ghcr.io/roadrunner-server/rr-php-worker-example:latest`
78-
- Gateway hostname: `roadrunner.home.arpa`
79-
- GatewayClass: `cilium`
78+
- Service type: `LoadBalancer` (MetalLB-friendly)
79+
- `gateway.enabled: false`
80+
- `ingress.enabled: false`
81+
82+
### MetalLB profile (no Gateway controller)
83+
84+
If your cluster uses MetalLB and does not run a Gateway API controller, use:
85+
86+
```yaml
87+
service:
88+
type: LoadBalancer
89+
90+
gateway:
91+
enabled: false
92+
93+
ingress:
94+
enabled: false
95+
```
96+
97+
Then sync ArgoCD and check:
98+
99+
```bash
100+
kubectl -n roadrunner get svc roadrunner -w
101+
curl -sS http://<external-ip>/
102+
curl -sS http://<external-ip>/health
103+
```
80104

81105
### Probe and metrics defaults
82106

@@ -94,3 +118,9 @@ The chart mounts `/etc/rr/.rr.yaml` from a ConfigMap by default. This can overri
94118
- Default `GatewayClass` is `cilium`.
95119
- The chart renders `Gateway` and `HTTPRoute` by default.
96120
- Ingress remains available as fallback (`ingress.enabled=true` with `gateway.enabled=false`).
121+
122+
### Troubleshooting
123+
124+
- ArgoCD `Progressing` with health details `Waiting for controller` means Gateway resources are enabled but no Gateway controller is reconciling them.
125+
- `kubectl get gatewayclass` returning no resources indicates Gateway API objects will not become `Healthy` until a controller/GatewayClass is installed.
126+
- If ArgoCD still applies old values after local edits, ensure changes are committed and pushed to the revision ArgoCD tracks.

deploy/argocd/README.md

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ This folder provides a ready-to-sync Argo CD application for the in-repo Helm ch
1111

1212
1. Review and edit `values.yaml`:
1313
- Set your application image and worker command.
14-
- Adjust Gateway API hostnames and `gateway.className` (default: `cilium`).
14+
- Choose exposure mode (Gateway API, Ingress, or MetalLB LoadBalancer service).
1515
- Enable or disable metrics and ServiceMonitor.
1616

1717
2. If you deploy from a fork or branch, update `repoURL` and `targetRevision` in `application.yaml`.
@@ -27,18 +27,43 @@ kubectl apply -f deploy/argocd/application.yaml
2727
5. Verify on your homelab:
2828

2929
```bash
30-
curl -sS http://roadrunner.home.arpa/
31-
curl -sS http://roadrunner.home.arpa/health
30+
kubectl -n roadrunner get svc roadrunner -w
31+
curl -sS http://<external-ip>/
32+
curl -sS http://<external-ip>/health
3233
```
3334

34-
If your cluster does not expose `GatewayClass` `cilium`, either install/configure Gateway API support or switch to ingress compatibility mode (`gateway.enabled=false`, `ingress.enabled=true`).
35+
If you prefer Gateway API mode, set `gateway.enabled=true`, configure hostnames, and ensure a controller/GatewayClass (for example `cilium`) exists.
36+
37+
## MetalLB Mode
38+
39+
Use this mode when your cluster has MetalLB but no Gateway API controller:
40+
41+
```yaml
42+
service:
43+
type: LoadBalancer
44+
45+
gateway:
46+
enabled: false
47+
48+
ingress:
49+
enabled: false
50+
```
51+
52+
After sync:
53+
54+
```bash
55+
kubectl -n roadrunner get svc roadrunner -w
56+
curl -sS http://<external-ip>/
57+
curl -sS http://<external-ip>/health
58+
```
3559

3660
## Default Example Values
3761

3862
- `image.repository`: `ghcr.io/roadrunner-server/rr-php-worker-example`
3963
- `image.tag`: `latest`
40-
- `gateway.className`: `cilium`
41-
- `gateway.route.hostnames`: `roadrunner.home.arpa`
64+
- `service.type`: `LoadBalancer`
65+
- `gateway.enabled`: `false`
66+
- `ingress.enabled`: `false`
4267

4368
## Notes
4469

@@ -57,3 +82,4 @@ rr serve -c /etc/rr/.rr.yaml -w /app
5782
- Gateway API is the default north-south exposure model.
5883
- This requires Gateway API CRDs and a Gateway controller (for example, Cilium Gateway API support).
5984
- Ingress is still available as a compatibility fallback (`ingress.enabled=true` and `gateway.enabled=false`).
85+
- If ArgoCD app health remains `Progressing` with message `Waiting for controller`, check whether `Gateway`/`HTTPRoute` are still rendered and whether any `GatewayClass` exists.

deploy/argocd/values.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,11 @@ resources:
4545
cpu: 1000m
4646
memory: 512Mi
4747

48+
service:
49+
type: LoadBalancer
50+
4851
gateway:
49-
enabled: true
52+
enabled: false
5053
create: true
5154
className: cilium
5255
listeners:

0 commit comments

Comments
 (0)