{"id":13542504,"url":"https://github.com/ruanbekker/argocd-workshop","last_synced_at":"2025-07-22T23:36:53.547Z","repository":{"id":217490010,"uuid":"615471683","full_name":"ruanbekker/argocd-workshop","owner":"ruanbekker","description":"Experimenting with ArgoCD","archived":false,"fork":false,"pushed_at":"2023-04-01T11:01:34.000Z","size":20,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-19T14:40:40.134Z","etag":null,"topics":["argocd","devops","gitops","kubernetes","workshop"],"latest_commit_sha":null,"homepage":"","language":"Smarty","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ruanbekker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-17T19:20:43.000Z","updated_at":"2024-01-20T16:03:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"5eeb3828-d8cf-44ab-b9f6-89846dac9ab4","html_url":"https://github.com/ruanbekker/argocd-workshop","commit_stats":null,"previous_names":["ruanbekker/argocd-workshop"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ruanbekker/argocd-workshop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruanbekker%2Fargocd-workshop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruanbekker%2Fargocd-workshop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruanbekker%2Fargocd-workshop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruanbekker%2Fargocd-workshop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruanbekker","download_url":"https://codeload.github.com/ruanbekker/argocd-workshop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruanbekker%2Fargocd-workshop/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266591214,"owners_count":23953081,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["argocd","devops","gitops","kubernetes","workshop"],"created_at":"2024-08-01T10:01:09.153Z","updated_at":"2025-07-22T23:36:53.508Z","avatar_url":"https://github.com/ruanbekker.png","language":"Smarty","funding_links":[],"categories":["Smarty","kubernetes"],"sub_categories":[],"readme":"# argocd-workshop\nExperimenting with ArgoCD\n\n## TOC\n- [About](#about)\n- [Prerequisites](#prerequisites)\n  - [Docker](#docker)\n  - [Kubectl](#kubectl)\n  - [Helm](#helm)\n  - [Kind](#kind)\n  - [ArgoCD CLI](#argocd-cli)\n- [Kubernetes Cluster](#kubernetes-cluster)\n- [ArgoCD Setup](#argocd-setup)\n  - [Installation](#installation)\n  - [Access ArgoCD UI](#access-argocd-ui)\n  - [Authenticate ArgoCD CLI](#authenticate-argocd-cli)\n- [ArgoCD Usage](#argocd-usage)\n  - [ArgoCD CLI](#argocd-cli-1)\n  - [ArgoCD UI](#argocd-ui)\n\n## About\n\nThis is a workshop / tutorial on my findings using ArgoCD. I will be deploying ArgoCD on Kubernetes using KinD.\n\nFrom [their documentation](https://argo-cd.readthedocs.io/en/stable/):\n\n\u003e Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.\n\n## Prerequisites\n\nIf you are following along, you will need the following:\n\n- [KinD](https://kind.sigs.k8s.io/docs/user/quick-start/#installation) and [Docker](https://docs.docker.com/get-docker/)\n- [Helm](https://helm.sh/docs/intro/install/) and [Kubectl](https://kubernetes.io/docs/tasks/tools/)\n- [ArgoCD CLI](https://argo-cd.readthedocs.io/en/stable/cli_installation/)\n\nIf you don't have them installed, don't worry as we will be installing them from scratch. I will be using Linux as my operating system, if you are using something else, you can follow the links provided above.\n\n### Docker\n\nIf you can run `docker ps` you have docker installed already. I am using this on Linux to install Docker, if you are using a different operating system you can view their [installation documentation](https://docs.docker.com/engine/install/ubuntu/)\n\n\u003cdetails\u003e\n  \u003csummary\u003eInstallation Steps\u003c/summary\u003e\n\n```bash\nsudo apt update\nsudo apt install ca-certificates curl gnupg lsb-release -y\nsudo mkdir -m 0755 -p /etc/apt/keyrings\ncurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg\necho \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable\" \\\n| sudo tee /etc/apt/sources.list.d/docker.list \u003e /dev/null\nsudo apt update\nsudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y\nsudo usermod -aG docker $(whoami)\nsource ~/.bashrc\n```\n\n\u003c/details\u003e\n\n### Kubectl\n\nIf you need to install kubectl on a operating system other than Linux, have a look at their [installation documentation](https://kubernetes.io/docs/tasks/tools/)\n\nDue to [this argocd cli bug](https://github.com/argoproj/argo-cd/issues/8613), the workaround is to install kubectl 1.22.2.\n\n\u003cdetails\u003e\n  \u003csummary\u003eInstallation Steps (v1.22.2)\u003c/summary\u003e\n\n```bash\ncurl -LO \"https://dl.k8s.io/release/v1.22.2/bin/linux/amd64/kubectl\"\nsudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl\nrm -rf kubectl\n```\n\n\u003c/details\u003e\n\nOnce the bug has been resolved you can use the latest version.\n\n\u003cdetails\u003e\n  \u003csummary\u003eInstallation Steps (latest)\u003c/summary\u003e\n\n```bash\ncurl -LO \"https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl\"\nsudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl\nrm -rf kubectl\n```\n\n\u003c/details\u003e\n\n### Helm\n\nIf you need to install kubectl on a operating system other than Linux, have a look at their [installation documentation](https://helm.sh/docs/intro/install/)\n\n\u003cdetails\u003e\n  \u003csummary\u003eInstallation Steps\u003c/summary\u003e\n\n```bash\ncurl -LO https://get.helm.sh/helm-v3.11.2-linux-amd64.tar.gz\ntar -xf helm-v3.11.2-linux-amd64.tar.gz\nsudo install -o root -g root -m 0755 linux-amd64/helm /usr/local/bin/helm\nrm -rf helm-v3.11.2-linux-amd64.tar.gz linux-amd64\n```\n\n\u003c/details\u003e\n\n### Kind\n\nIf you need to install kind on a operating system other than Linux, have a look at their [installation documentation](https://kind.sigs.k8s.io/docs/user/quick-start/#installation)\n\n\u003cdetails\u003e\n  \u003csummary\u003eInstallation Steps\u003c/summary\u003e\n\n```bash\ncurl -Lo kind https://kind.sigs.k8s.io/dl/v0.17.0/kind-linux-amd64\nsudo install -o root -g root -m 0755 kind /usr/local/bin/kind\nrm -rf kind\n```\n\n\u003c/details\u003e\n\n### ArgoCD CLI\n\nIf you need to install argocd-cli on a operating system other than Linux, have a look at their [installation documentation](https://argo-cd.readthedocs.io/en/stable/cli_installation/)\n\n\u003cdetails\u003e\n  \u003csummary\u003eInstallation Steps\u003c/summary\u003e\n\n```bash\ncurl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64\nsudo install -o root -g root -m 0755 argocd-linux-amd64 /usr/local/bin/argocd\nrm argocd-linux-amd64\n```\n\n\u003c/details\u003e\n\n## Kubernetes Cluster\n\nDeploy a kubernetes cluster with [kind](https://kind.sigs.k8s.io/docs/user/quick-start/) and a list of images can be found on [github](https://github.com/kubernetes-sigs/kind/releases):\n\n```bash\nkind create cluster --name argocd --image kindest/node:v1.25.3\n```\n\nYou should be able to interact with your cluster using:\n\n```bash\nkubectl get nodes\n# NAME                   STATUS   ROLES           AGE   VERSION\n# argocd-control-plane   Ready    control-plane   45s   v1.25.3\n```\n\nIf not you can use `kubectl config get-contexts` and switch to your context from the `NAME` column:\n\n```bash\nkubectl config get-contexts\n# CURRENT   NAME          CLUSTER       AUTHINFO      NAMESPACE\n# *         kind-argocd   kind-argocd   kind-argocd\n```\n\nAnd setting the context using:\n\n```bash\nkubectl config set-context kind-argocd\n```\n\n## ArgoCD Setup\n\n### Installation\n\nWe will be installing ArgoCD with helm, if you are looking for alternative methods, look at their [installation documentation](https://argo-cd.readthedocs.io/en/stable/operator-manual/installation/).\n\n```bash\nhelm repo add argo https://argoproj.github.io/argo-helm\nhelm repo update\nhelm install argocd argo/argo-cd --version 5.27.1 --namespace kube-system --set \"configs.params.server\\.insecure=true\"\n```\n\n### Access ArgoCD UI\n\nOnce the installation process has been completed, you should be able to get the initial admin password from this secret:\n\n```bash\nkubectl -n kube-system get secret argocd-initial-admin-secret -o jsonpath=\"{.data.password}\" | base64 -d\n```\n\nOnce you have copied the password, create a port forward to access the argocd ui:\n\n```bash\nkubectl -n kube-system port-forward svc/argocd-server 8080:80\n```\n\nHead over to `http://localhost:8080` and the homepage will look like this:\n\n![image](https://user-images.githubusercontent.com/567298/226329574-32ad5bd2-5c1b-4534-9ad1-47ea3fa65117.png)\n\nLogon with the user `admin` and the password that you received from the secret, then it should look like this:\n\n![image](https://user-images.githubusercontent.com/567298/226330468-913d8199-b319-4357-8e1b-37f0de978c10.png)\n\n### Authenticate ArgoCD CLI\n\nEnsure that you have a port-forward open to the server:\n\n```bash\nkubectl -n kube-system port-forward svc/argocd-server 8080:80\n```\n\nUse the argocd cli to logon to the server:\n\n```bash\nargocd login --insecure localhost:8080\n# WARNING: server is not configured with TLS. Proceed (y/n)? y\n# Username: admin\n# Password:\n# 'admin:login' logged in successfully\n# Context 'localhost:8080' updated\n```\n\nSince we are here I'm going to update my password:\n\n```bash\nargocd account update-password\n```\n\nThen authenticate again to your server:\n\n```bash\nargocd login --insecure localhost:8080\n```\n\n## ArgoCD Usage\n\nThis section will demonstrate how to create an application on ArgoCD which will reference and monitor our github repository for content and any changes that is being made.\n\nI have a basic helm chart that resides in `deployment/helm/simple-chart` and once we connected our repository, argocd will monitor the repository and if it detects changes or that it doesn't exist in our cluster it will sync down our changes.\n\n### ArgoCD CLI\n\nFirst create the application named `simple-app` and connect the github repository `argocd-workshop` and point the path to where our helm chart resides:\n\n```bash\nargocd app create simple-app \\\n  --repo https://github.com/ruanbekker/argocd-workshop.git \\\n  --path deployment/helm/simple-chart \\\n  --dest-server https://kubernetes.default.svc \\\n  --dest-namespace default \\\n  --sync-policy automated \\\n  --auto-prune\n\n# application 'simple-app' created\n```\n\nNow that our application inside argocd has been created we can head back to the ArgoCD UI under applications:\n\n![argocd](https://user-images.githubusercontent.com/567298/226341737-95da239e-afcc-4535-954f-149c524d1be5.png)\n\nWhen we select the application we can see all our resources:\n\n![argocd-app-homepage](https://user-images.githubusercontent.com/567298/226356917-6e337023-f84e-4555-8537-bd8dd8f6a7d9.png)\n\nWhile we are here, we can see the pod is unhealthy, when we select the pod we can see the health is degraded:\n\n![argocd-summary](https://user-images.githubusercontent.com/567298/226342227-50e36ee4-3330-43ad-b064-b4a233850e7f.png)\n\nWhen we select the events tab:\n\n![argocd-events](https://user-images.githubusercontent.com/567298/226342411-127537c2-ceed-4b3b-937e-d692a36804fe.png)\n\nWe can see that its failing due to the health checks being done against port 80 and the container listens on port 5000, lets fix that in `deployment/helm/simple-chart/values.yaml` and push it up to github.\n\nAbout a minute after I've pushed up [this commit](https://github.com/ruanbekker/argocd-workshop/commit/694a94e2601275fb229d66bbfb3aab480e43a674) we can see that our application is now health:\n\n![argocd](https://user-images.githubusercontent.com/567298/226356519-2f24657b-ffa4-4271-a949-1df98ac66137.png)\n\nIf we look at our resources using kubectl:\n\n```bash\nkubectl get all -n default\n# NAME                                          READY   STATUS    RESTARTS   AGE\n# pod/simple-app-simple-chart-5cc6bc5bf-cmd6s   1/1     Running   0          3m48s\n\n# NAME                              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE\n# service/kubernetes                ClusterIP   10.96.0.1       \u003cnone\u003e        443/TCP   87m\n# service/simple-app-simple-chart   ClusterIP   10.96.244.107   \u003cnone\u003e        80/TCP    13m\n\n# NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE\n# deployment.apps/simple-app-simple-chart   1/1     1            1           13m\n\n# NAME                                                 DESIRED   CURRENT   READY   AGE\n# replicaset.apps/simple-app-simple-chart-58dfc58df4   0         0         0       13m\n# replicaset.apps/simple-app-simple-chart-5cc6bc5bf    1         1         1       3m48s\n```\n\nLet's delete our application from the CLI, first list our applications\n\n```bash\nargocd app list --output name\n# kube-system/simple-app\n```\n\nThen delete the application:\n\n```bash\nargocd app delete simple-app\n# Are you sure you want to delete 'simple-app' and all its resources? [y/n] y\n# application 'simple-app' deleted\n```\n\n### ArgoCD UI\n\nFrom the UI you will notice that our application has been deleted:\n\n![image](https://user-images.githubusercontent.com/567298/226345617-b7bf0f02-1388-47fd-99c9-1448c8dcf19b.png)\n\nNow to do the same that we did in the CLI against the UI, we will head over to \"New App\", then we should get a screen like the following:\n\n![image](https://user-images.githubusercontent.com/567298/226345964-34567cbd-8684-4827-acfb-031a2fb3983d.png)\n\nWhich we can populate the same fields:\n\n- Application Name: `simple-app`\n- Project Name: `default`\n- Sync Policy: `Automatic`, `Prune Resources`\n- Repository URL: `https://github.com/ruanbekker/argocd-workshop.git`\n- Revision: `HEAD`\n- Path: `deployment/helm/simple-chart`\n- Destination Cluster URL: `https://kubernetes.default.svc`\n- Destination Namespace: `default`\n- Helm values should be populated\n\nThen select \"Create\" and a couple of seconds after that you should see your application running:\n\n```bash\nkubectl get pods -n default\n# NAME                                      READY   STATUS    RESTARTS   AGE\n# simple-app-simple-chart-5cc6bc5bf-f2dqx   1/1     Running   0          17s\n```\n\n## Credit\n\nThanks to [Anais Urlichs ](https://anaisurl.com/) and [TheDevOpsToolkit](https://www.devopstoolkitseries.com/) for the awesome content as I've learned a lot from them.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruanbekker%2Fargocd-workshop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fruanbekker%2Fargocd-workshop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruanbekker%2Fargocd-workshop/lists"}