{"id":27127210,"url":"https://github.com/yegli/kubecon-demo","last_synced_at":"2026-01-20T18:56:22.852Z","repository":{"id":286583710,"uuid":"961854429","full_name":"yegli/kubecon-demo","owner":"yegli","description":"KRO and Headlamp Showcase","archived":false,"fork":false,"pushed_at":"2025-04-07T09:47:23.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-07T10:27:23.074Z","etag":null,"topics":["cncf-demo","headlamp","kro"],"latest_commit_sha":null,"homepage":"","language":null,"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/yegli.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":"2025-04-07T09:14:05.000Z","updated_at":"2025-04-07T09:47:27.000Z","dependencies_parsed_at":"2025-04-07T10:37:39.376Z","dependency_job_id":null,"html_url":"https://github.com/yegli/kubecon-demo","commit_stats":null,"previous_names":["yegli/kubecon-demo"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yegli%2Fkubecon-demo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yegli%2Fkubecon-demo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yegli%2Fkubecon-demo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yegli%2Fkubecon-demo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yegli","download_url":"https://codeload.github.com/yegli/kubecon-demo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247694865,"owners_count":20980731,"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","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":["cncf-demo","headlamp","kro"],"created_at":"2025-04-07T16:54:47.127Z","updated_at":"2026-01-20T18:56:22.834Z","avatar_url":"https://github.com/yegli.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Demo\nThis demo showcases how to set up and manage a Kubernetes cluster using modern tools and workflows. You'll learn how to deploy and manage applications with Headlamp and ArgoCD, and expose them to the outside world using an Ingress controller. By the end of this session, you'll have a fully functional Kubernetes environment and a clear understanding of how these tools can simplify cluster management and application deployment.\n\n## Goal\nBy the end of this demo, you will:\n1. Set up a Kubernetes cluster with Minikube.\n2. Install and use Headlamp for cluster management.\n3. Use KRO to define a Set of ResourceGraphDefinitions\n4. Deploy a sample application using ArgoCD.\n5. Access the application via an Ingress controller.\n\n## Pre-Requisites\n1. Install `kubectl`, `helm`, and `brew` on your machine.\n2. Ensure Minikube is installed and running (`brew install minikube`).\n3. Clone this repository and navigate to the directory:\n   ```sh\n   git clone https://github.com/yegli/kubecon-demo.git\n   cd kubecon-demo\n   ```\n\n## Basics\n1. install minikube: \n```\nbrew install minikube\n```\n2. run minikube cluster:\n```sh\nminikube start --driver=docker --addons=metrics-server --nodes=3\n```\n\n## Install Headlamp \n\n### InCluster Installation\n\n```sh\nhelm repo add headlamp https://kubernetes-sigs.github.io/headlamp/\n```\n```sh\nhelm install headlamp headlamp/headlamp --namespace headlamp  --create-namespace -f values.yaml\n```\nOnce installed you must setup the appropriate port forwarding to access the UI over local port 8080\n\n```sh\nexport POD_NAME=$(kubectl get pods --namespace headlamp -l \"app.kubernetes.io/name=headlamp,app.kubernetes.io/instance=headlamp\" -o jsonpath=\"{.items[0].metadata.name}\")\nexport CONTAINER_PORT=$(kubectl get pod --namespace headlamp $POD_NAME -o jsonpath=\"{.spec.containers[0].ports[0].containerPort}\")\necho \"Visit http://127.0.0.1:8080 to use your application\"\nkubectl --namespace headlamp port-forward $POD_NAME 8080:$CONTAINER_PORT\n```\nNow that your local port forwarding is set up, you can generate your RBAC token for the admin user by following [this guide](https://headlamp.dev/docs/latest/installation/#create-a-service-account-token).\n\nAlternatively, you can integrate with an OIDC provider as documented [here](https://headlamp.dev/docs/latest/installation/in-cluster/oidc).\n\n### Local Installation\nA local installation is best performed using brew for MacOS after which access to different clusters is handled based on the users permissions setout in his kubeconfig.\n```sh\nbrew install headlamp\n```\n\n## Install KRO\nThe following command will install the newest version of KRO into your cluster based on your current context.\n```sh\nexport KRO_VERSION=$(curl -sL \\\n    https://api.github.com/repos/kro-run/kro/releases/latest | \\\n    jq -r '.tag_name | ltrimstr(\"v\")'\n  )\nhelm install kro oci://ghcr.io/kro-run/kro/kro \\\n  --namespace kro \\\n  --create-namespace \\\n  --version=${KRO_VERSION}\n```\n\n\n## Enabling ArgoCD Plugin\n Create a custom namespace:\n ```sh\n kubectl create ns argocd\n ```\n \n Then through the headlamp UI under Apps section select argo-cd and install it into your new namespace.\n\nRetrieve the Admin User Credentials once the chart has been deployed succesfully:\n```sh\nkubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=\"{.data.password}\" | base64 -d\n```\nSetup Port Forwarding (when using both headlamp and argocd be sure to map to dedicated local ports)\n```sh\nkubectl port-forward svc/argocd-server -n argocd 8080:443\n```\n\n## Installing your Custom APP\nDefine your Application Manifests in your Repository. You can find a sample application here: https://code.swisscom.com/yanick.egli/kubecon-demo-manifests#\n\n### Integrate with ArgoCD\n\n#### Add Repository\nAdd the repository as HTTPS with the `Repository URL` set to \n```\nhttps://github.com/yegli/kubecon-demo.git\n```\n\n\nCreate an Application for the `argocd-root-app` subdirectory through the Web UI. This should spin up the following apps\n1. ResourceGraphsDefinition (collection of all the KRO Custom API definitions)\n2. Sample App 1 for Team A (default image, ingress enabled, ha enabled)\n3. Sample App 2 for Team B (custom image, ingress disabled, ha disabled)\n\n## Conclusion\nNow you got to deploy your first ResourceGraphDefinition and two corresponding applications. You were able to configure both seperately but still profit from the simplicity of using the same Application Template.\n\n## Clean Up\nOnce you are done exporing you can either stop your minikube cluster to resume to your development environment later by running `minikube stop`or you can completely remove the cluster by running `minikube destroy`\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyegli%2Fkubecon-demo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyegli%2Fkubecon-demo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyegli%2Fkubecon-demo/lists"}