GitOps with ArgoCD

Who are we?

"All-in-one platform to combine and deploy your backend services, websites, cronjobs, databases and everything your app needs in one place."

Back in 2017... What's next ?

Argo-CD           https://github.com/argoproj/argo-cd

Houston, we have a problem

Ominiscient Gateway

- Authentication
- Routing / Discovery
- Wake Up

- Forbid manual modification 💀💀💀

 

- Rollback - keep a deployments history

 

- Automatic Deployment - push and deploy

 

- One source of Truth - configuration must be accessible from a single source

 

- "Self Healing" - automatically resync the live environment with the source of truth

What we need

Enter ArgoCD

- ArgoProj

- Intuit OSS

- +3K stars on Github

- Declarative CD
- Designed for Kubernetes

- CRDs

ArgoCD VS ... Argo

Argo
- https://github.com/argoproj/argo

- "Container-native workflow engine for orchestrating parallel jobs on Kubernetes"

 

ArgoCD

- https://github.com/argoproj/argo-cd

- "GitOps continuous delivery tool for Kubernetes"
 

ArgoCD is not Argo
ArgoCD does not use Argo

How it works

https://argoproj.github.io/argo-cd/operator-manual/architecture/

Why ArgoCD?

project: default
source:
  repoURL: 'https://github.com/kintohub/kinto-kube-infra'
  path: charts/kinto-workflow
  targetRevision: feat/argo
  helm:
    valueFiles:
      - values-dev-chaos-benkey.yaml
destination:
  server: 'https://kubernetes.default.svc'
  namespace: kinto-workflow
syncPolicy:
  automated:
    selfHeal: true

- Huge fan of Argo Workflow
- Adapted to Startup / Fast-paced environment

- Less than 10 minutes setup

- Helm Compatible

- Super lightweight

Better to see the glass half full than half empty

{DemoTime}

deploy_argocd:
	@kubectl create ns argocd 2>/dev/null || echo
	@kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.5.3/manifests/install.yaml
	@kubectl patch deploy argocd-server -n argocd -p '[{"op": "add", "path": "/spec/template/spec/containers/0/command/-", "value": "--disable-auth"}]' --type json
	@kubectl wait -n argocd \
		deploy/argocd-application-controller \
		deploy/argocd-repo-server \
		deploy/argocd-server \
		deploy/argocd-dex-server \
		--for condition=Available \
		--timeout=180s

deploy_nginx:
	@kubectl create ns k8s-meetup 2>/dev/null || echo
	@argocd app create nginx \
		--repo https://github.com/bappr/bitnami-charts \
		--revision feat/meetup-k8s-06-2020 \
		--path bitnami/nginx \
		--dest-namespace k8s-meetup \
		--values values.yaml \
		--self-heal \
		--sync-policy automated \
		--upsert \
		--dest-server https://kubernetes.default.svc \
		--port-forward-namespace argocd \
		--insecure
Made with Slides.com