Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.

Deploying argo-cd https://argoproj.github.io/argo-cd/getting_started/
Argo components

Lets deploy Argo-Cd in my kubernetes clusters
check the latest tag : https://github.com/argoproj/argo-cd
Ex: https://github.com/argoproj/argo-cd/releases/tag/v2.0.1
I have my local minikube setup already done.
| ❭ minikube start
😄 minikube v1.20.0 on Darwin 10.15.4
🐳 Preparing Kubernetes v1.20.2 on Docker 20.10.6 …
🏄 Done! kubectl is now configured to use “minikube” cluster and “default” namespace by default
List existing name-spaces
| ❭ kubens
- default
- ingress-nginx
- kube-node-lease
- kube-public
- kube-system
- kubernetes-dashboard
- my-namespace
| ❭ kubectl create namespace argocd
namespace/argocd created
| ❭ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.0.1/manifests/install.yaml
- customresourcedefinition.apiextensions.k8s.io/applications.argoproj.io created
- customresourcedefinition.apiextensions.k8s.io/appprojects.argoproj.io created
- serviceaccount/argocd-application-controller created
- serviceaccount/argocd-dex-server created
- serviceaccount/argocd-redis created
- serviceaccount/argocd-server created
- role.rbac.authorization.k8s.io/argocd-application-controller created
- role.rbac.authorization.k8s.io/argocd-dex-server created
- role.rbac.authorization.k8s.io/argocd-redis created
- role.rbac.authorization.k8s.io/argocd-server created
- clusterrole.rbac.authorization.k8s.io/argocd-application-controller created
- clusterrole.rbac.authorization.k8s.io/argocd-server created
- rolebinding.rbac.authorization.k8s.io/argocd-application-controller created
- rolebinding.rbac.authorization.k8s.io/argocd-dex-server created
- rolebinding.rbac.authorization.k8s.io/argocd-redis created
- rolebinding.rbac.authorization.k8s.io/argocd-server created
- clusterrolebinding.rbac.authorization.k8s.io/argocd-application-controller created
- clusterrolebinding.rbac.authorization.k8s.io/argocd-server created
- configmap/argocd-cm created
- configmap/argocd-gpg-keys-cm created
- configmap/argocd-rbac-cm created
- configmap/argocd-ssh-known-hosts-cm created
- configmap/argocd-tls-certs-cm created
- secret/argocd-secret created
- service/argocd-dex-server created
- service/argocd-metrics created
- service/argocd-redis created
- service/argocd-repo-server created
- service/argocd-server created
- service/argocd-server-metrics created
- deployment.apps/argocd-dex-server created
- deployment.apps/argocd-redis created
- deployment.apps/argocd-repo-server created
- deployment.apps/argocd-server created
- statefulset.apps/argocd-application-controller created
| ❭ kubectl get all -n argocd
- NAME READY STATUS RESTARTS AGE
- pod/argocd-application-controller-0 1/1 Running 0 35s
- pod/argocd-dex-server-66ff89cb7b-rxm6p 1/1 Running 0 35s
- pod/argocd-redis-759b6bc7f4-gt2hf 1/1 Running 0 35s
- pod/argocd-repo-server-84d58ff546-w6b4s 1/1 Running 0 35s
- pod/argocd-server-7fd556c67c-9hh7b 1/1 Running 0 35s
- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- service/argocd-dex-server ClusterIP 10.100.46.122 <none> 5556/TCP,5557/TCP,5558/TCP 35s
- service/argocd-metrics ClusterIP 10.96.148.16 <none> 8082/TCP 35s
- service/argocd-redis ClusterIP 10.99.61.165 <none> 6379/TCP 35s
- service/argocd-repo-server ClusterIP 10.103.32.177 <none> 8081/TCP,8084/TCP 35s
- service/argocd-server ClusterIP 10.109.164.100 <none> 80/TCP,443/TCP 35s
- service/argocd-server-metrics ClusterIP 10.110.96.118 <none> 8083/TCP 35s
- NAME READY UP-TO-DATE AVAILABLE AGE
- deployment.apps/argocd-dex-server 1/1 1 1 35s
- deployment.apps/argocd-redis 1/1 1 1 35s
- deployment.apps/argocd-repo-server 1/1 1 1 35s
- deployment.apps/argocd-server 1/1 1 1 35s
- NAME DESIRED CURRENT READY AGE
- replicaset.apps/argocd-dex-server-66ff89cb7b 1 1 1 35s
- replicaset.apps/argocd-redis-759b6bc7f4 1 1 1 35s
- replicaset.apps/argocd-repo-server-84d58ff546 1 1 1 35s
- replicaset.apps/argocd-server-7fd556c67c 1 1 1 35s
- NAME READY AGE
- statefulset.apps/argocd-application-controller 1/1 35s
In order to access argo-cd UI, you can use ingress,loadbalancer , NodePort . I am going to use nodeport .
Ingress related steps can be found here https://argoproj.github.io/argo-cd/operator-manual/ingress
Just edit service type to Nodeport . using kubectl .
Or you can use Patch to update Type:
kubectl patch svc argocd-server -n argocd -p ‘{“spec”: {“type”: “NodePort”}}’
❭ kubectl edit svc argocd-server

| ❭ kubectl edit svc argocd-server
service/argocd-server edited
| ❭ kubectl get svc argocd-server
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argocd-server NodePort 10.109.164.100 <none> 80:32171/TCP,443:31643/TCP 12h
check on which node pod is running . And access the argo-cd using node-port in that node
| ❭ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
argocd-application-controller-0 1/1 Running 4 12h 172.17.0.7 minikube
argocd-dex-server-66ff89cb7b-rxm6p 1/1 Running 1 12h 172.17.0.12 minikube
argocd-redis-759b6bc7f4-gt2hf 1/1 Running 1 12h 172.17.0.6 minikube
argocd-repo-server-84d58ff546-w6b4s 1/1 Running 4 12h 172.17.0.9 minikube
argocd-server-7fd556c67c-9hh7b 1/1 Running 2 12h 172.17.0.8 minikube
| ❭ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
minikube Ready control-plane,master 3d21h v1.20.2 192.168.64.2 Buildroot 2020.02.12 4.19.182 docker://20.10.6
decode initial password:
| ❭ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=”{.data.password}” | base64 -d
xnHJpKDKnkaKaQSP%


Add repo to fetch Kubernetes manifest .



I gave my test repo where mongo installation config is present
https://github.com/shaikmdrafi/argo-test-deloyment




| ❭ kubectl create ns argo-mongo
namespace/argo-mongo created


| ❭ kubectl get all -n argo-mongo
NAME READY STATUS RESTARTS AGE
pod/my-mongodb-54b94cb9fb-c5r56 1/1 Running 0 2m17s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-mongodb 1/1 1 1 2m17s
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-mongodb-54b94cb9fb 1 1 1 2m17s
| ❭ kubectl delete deployment my-mongodb -n argo-mongo
deployment.apps “my-mongodb” deleted
After you delete resource it went to outofsync but did not auto Heal . for that you need to enable it


Now even if you delete any resource it will automatically recreates

But if you delete NameSpace we cannot sync it again untill namespace is recreated .
| ❭ kubectl delete ns argo-mongo
namespace “argo-mongo” deleted

Once it re-check and namespace is available it will re-sync and creates whatever is defined .

