Om dit volledig te automatiseren zonder handmatige tussenkomst, kun je de kracht van ArgoCD en Forgejo combineren via een App-of-Apps patroon of een standaard geautomatiseerde ArgoCD Application.
Omdat je geen handmatige handelingen wilt verrichten in de webinterfaces, laat je ArgoCD direct naar je lokale Forgejo-repository wijzen en zet je automated: { prune: true, selfHeal: true } aan. Hierdoor rolt ArgoCD alles zelf uit én herstelt het automatisch eventuele afwijkingen.
Dit is het stappenplan om dit volledig geautomatiseerd in te richten via een Ansible-playbook:
1. Wat leg je vast in je Git-repository (Forgejo)?
Voordat ArgoCD het kan ophalen, moet de demo-applicatie (nginx) als manifest in je Forgejo-repository staan. In jouw geautomatiseerde pipeline kun je dit door Ansible (of een script) laten pushen, of je zet het vooraf in je standaard template-repo.
Voor een simpele nginx-demo maak je een map apps/demo-nginx/ in je Git-repo aan met twee bestanden:
namespace.yaml:
apiVersion: v1
kind: Namespace
metadata:
name: demo-app
deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
namespace: demo-app
spec:
replicas: 2
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-demo-svc
namespace: demo-app
spec:
type: ClusterIP
selector:
app: nginx-demo
ports:
- port: 80
targetPort: 80
2. Laat ArgoCD de applicatie automatisch deployen via Ansible
In plaats van de applicatie handmatig toe te voegen in de ArgoCD-UI, laat je Ansible een Application-manifest toepassen op je Kubernetes-cluster. ArgoCD pikt dit op en zorgt dat nginx direct op de cluster komt te staan.
Voeg dit toe aan je Ansible-workflow (bijvoorbeeld in je argocd.yml of een nieuwe gitops-demo.yml):
- name: Automatische Nginx Demo deployen via ArgoCD
hosts: k8s_management
become: true
gather_facts: false
tasks:
- name: Maak de ArgoCD Application aan voor de demo
ansible.builtin.shell: |
cat <<EOF | kubectl apply -f -
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: demo-nginx
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: default
source:
repoURL: 'http://forgejo-http.forgejo.svc.cluster.local:3000/jouw-gebruiker/jouw-repo.git' # Pas aan naar jouw interne Forgejo service URL
targetRevision: HEAD
path: apps/demo-nginx
destination:
server: 'https://kubernetes.default.svc'
namespace: demo-app
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
EOF
environment:
KUBECONFIG: /root/.kube/config
Waarom is dit “Zero Maintenance”?
- Volledig geautomatiseerd: Zodra je Ansible-playbook draait, maakt ArgoCD de verbinding met je lokale Forgejo en wordt nginx uitgerold.
- Self-Healing: Als iemand of iets handmatig de nginx-pods verwijdert of aanpast op de cluster (
kubectl delete pod...), merkt ArgoCD dit binnen enkele seconden en start hij automatisch nieuwe pods op die exact matchen met wat er in Forgejo staat. - Geen UI nodig: Je hoeft nooit meer in te loggen op ArgoCD of Proxmox om applicaties te beheren; alles gebeurt via Git en je automatiseringstools.