Running OpenHamClock on Kubernetes (RKE2 and ArgoCD)
In this tutorial, I will walk through my Kubernetes version of running OpenHamClock in my homelab. In this setup, everything is defined in YAML, committed to Git, and synced to the cluster by ArgoCD. Access is handled by NGINX Ingress with TLS from cert-manager, which is how I publish it at hamclock.w3rdw.radio.
If you want to follow my exact layout, use
my RKE2 GitHub project. This
guide uses the openhamclock/ directory.
Workflow (high level):
- Update OpenHamClock YAML in
openhamclock/. - Commit and push to Git.
- ArgoCD detects changes and syncs automatically.
- Ingress terminates TLS and serves the app.
Prerequisites
Software/cluster:
- RKE2 cluster (or any Kubernetes cluster)
ingress-nginxinstalledcert-managerinstalled (for TLS certificates)- ArgoCD installed and pointed at your Git repo
- A DNS record for your chosen hostname
Step 1: Review the Kubernetes Stack Layout
The OpenHamClock stack lives here:
Files in this stack:
- openhamclock/00-namespace.yaml
Creates the
openhamclocknamespace. - openhamclock/10-pvc.yaml
Creates the
openhamclock-configPVC. - openhamclock/20-deployment.yaml
Runs the
ggilman/openhamclockcontainer and mounts/config. - openhamclock/30-service.yaml
Exposes the app internally on port
3000. - openhamclock/40-ingress.yaml Publishes the app externally with TLS.
- openhamclock/kustomization.yaml Ties everything together and controls image tag overrides.
Step 2: Set Runtime Settings
Most customization happens in deployment/PVC/Kustomize:
Set timezone in:
env:
- name: TZ
value: "UTC"
Set persistent storage size in:
resources:
requests:
storage: 5Gi
Set image tag in:
images:
- name: ggilman/openhamclock
newTag: "1.2"
Step 3: Configure Ingress (TLS + DNS)
Ingress is defined in:
Current host and TLS secret:
tls:
- hosts:
- hamclock.w3rdw.radio
secretName: hamclock-w3rdw-radio-tls
rules:
- host: hamclock.w3rdw.radio
This manifest uses:
ingressClassName: nginxcert-manager.io/cluster-issuer: letsencrypt-dnsnginx.ingress.kubernetes.io/force-ssl-redirect: "true"
Make sure your DNS record points to your ingress controller and your
letsencrypt-dns cluster issuer is working.
Step 4: Deploy via ArgoCD
ArgoCD app definition:
It tracks path: openhamclock and auto-syncs:
destination:
namespace: openhamclock
syncPolicy:
automated:
prune: true
selfHeal: true
Commit your changes to Git and ArgoCD should deploy/update automatically.
Step 5: Access OpenHamClock
Once synced, OpenHamClock should be available at:
Conclusion
That’s it! Congratulations! You now have OpenHamClock running as a fully declarative Kubernetes app with persistent storage, TLS ingress, and GitOps deployment via ArgoCD.
This replaces ad-hoc container management with a repeatable workflow where all changes are tracked in Git and continuously reconciled in-cluster.
As always, if you have any questions or want to contribute to the above information, feel free to start a Discussion on GitHub, submit a GitHub PR to recommend changes/fixes in the article, or reach out to me directly at [email protected]. Finally, feel free to join my Matrix channel for W3RDW and chat with me there.
Thanks for reading!
73 from Robert, W3RDW