{"id":21178445,"url":"https://github.com/elementtech/kgaming","last_synced_at":"2026-03-19T19:10:18.810Z","repository":{"id":220190359,"uuid":"750993376","full_name":"ElementTech/KGaming","owner":"ElementTech","description":null,"archived":false,"fork":false,"pushed_at":"2024-04-20T21:24:06.000Z","size":115,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-14T18:48:57.725Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HCL","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/ElementTech.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":"2024-01-31T18:15:31.000Z","updated_at":"2024-01-31T18:15:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"01bec329-443e-4a6a-ac3d-423e77b2002f","html_url":"https://github.com/ElementTech/KGaming","commit_stats":null,"previous_names":["elementtech/kgaming"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ElementTech/KGaming","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElementTech%2FKGaming","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElementTech%2FKGaming/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElementTech%2FKGaming/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElementTech%2FKGaming/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ElementTech","download_url":"https://codeload.github.com/ElementTech/KGaming/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElementTech%2FKGaming/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30714779,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-19T05:29:31.190Z","status":"ssl_error","status_checked_at":"2026-03-19T05:28:25.821Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2024-11-20T17:21:29.279Z","updated_at":"2026-03-19T19:10:18.752Z","avatar_url":"https://github.com/ElementTech.png","language":"HCL","readme":"# ArgoCD on Amazon EKS\n\nThis tutorial guides you through deploying an Amazon EKS cluster with addons configured via ArgoCD, employing the [GitOps Bridge Pattern](https://github.com/gitops-bridge-dev).\n\n\u003cimg src=\"https://raw.githubusercontent.com/aws-ia/terraform-aws-eks-blueprints/main/patterns/gitops/getting-started-argocd/static/gitops-bridge.drawio.png\" width=100%\u003e\n\nThe [GitOps Bridge Pattern](https://github.com/gitops-bridge-dev) enables Kubernetes administrators to utilize Infrastructure as Code (IaC) and GitOps tools for deploying Kubernetes Addons and Workloads. Addons often depend on Cloud resources that are external to the cluster. The configuration metadata for these external resources is required by the Addons' Helm charts. While IaC is used to create these cloud resources, it is not used to install the Helm charts. Instead, the IaC tool stores this metadata either within GitOps resources in the cluster or in a Git repository. The GitOps tool then extracts these metadata values and passes them to the Helm chart during the Addon installation process. This mechanism forms the bridge between IaC and GitOps, hence the term \"GitOps Bridge.\"\n\nAdditional examples available on the [GitOps Bridge Pattern](https://github.com/gitops-bridge-dev):\n\n- [argocd-ingress](https://github.com/gitops-bridge-dev/gitops-bridge/tree/main/argocd/iac/terraform/examples/eks/argocd-ingress)\n- [aws-secrets-manager](https://github.com/gitops-bridge-dev/gitops-bridge/tree/main/argocd/iac/terraform/examples/eks/aws-secrets-manager)\n- [crossplane](https://github.com/gitops-bridge-dev/gitops-bridge/tree/main/argocd/iac/terraform/examples/eks/crossplane)\n- [external-secrets](https://github.com/gitops-bridge-dev/gitops-bridge/tree/main/argocd/iac/terraform/examples/eks/external-secrets)\n- [multi-cluster/distributed](https://github.com/gitops-bridge-dev/gitops-bridge/tree/main/argocd/iac/terraform/examples/eks/multi-cluster/distributed)\n- [multi-cluster/hub-spoke](https://github.com/gitops-bridge-dev/gitops-bridge/tree/main/argocd/iac/terraform/examples/eks/multi-cluster/hub-spoke)\n- [multi-cluster/hub-spoke-shared](https://github.com/gitops-bridge-dev/gitops-bridge/tree/main/argocd/iac/terraform/examples/eks/multi-cluster/hub-spoke-shared)\n- [private-git](https://github.com/gitops-bridge-dev/gitops-bridge/tree/main/argocd/iac/terraform/examples/eks/private-git)\n\n## Prerequisites\n\nBefore you begin, make sure you have the following command line tools installed:\n\n- git\n- terraform\n- kubectl\n- argocd\n\n## (Optional) Fork the GitOps git repositories\n\nSee the appendix section [Fork GitOps Repositories](#fork-gitops-repositories) for more info on the terraform variables to override.\n\n## Deploy the EKS Cluster\n\nInitialize Terraform and deploy the EKS cluster:\n\n```shell\nterraform init\nterraform apply -target=\"module.vpc\" -auto-approve\nterraform apply -target=\"module.eks\" -auto-approve\nterraform apply -auto-approve\n```\n\nTo retrieve `kubectl` config, execute the terraform output command:\n\n```shell\nterraform output -raw configure_kubectl\n```\n\nThe expected output will have two lines you run in your terminal\n\n```text\nexport KUBECONFIG=\"/tmp/getting-started-gitops\"\naws eks --region us-east-1 update-kubeconfig --name getting-started-gitops\n```\n\n\u003eThe first line sets the `KUBECONFIG` environment variable to a temporary file\nthat includes the cluster name. The second line uses the `aws` CLI to populate\nthat temporary file with the `kubectl` configuration. This approach offers the\nadvantage of not altering your existing `kubectl` context, allowing you to work\nin other terminal windows without interference.\n\nTerraform will add GitOps Bridge Metadata to the ArgoCD secret.\nThe annotations contain metadata for the addons' Helm charts and ArgoCD ApplicationSets.\n\n```shell\nkubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster -o json | jq '.items[0].metadata.annotations'\n```\n\nThe output looks like the following:\n\n```json\n{\n  \"addons_repo_basepath\": \"argocd/\",\n  \"addons_repo_path\": \"bootstrap/control-plane/addons\",\n  \"addons_repo_revision\": \"main\",\n  \"addons_repo_url\": \"https://github.com/aws-samples/eks-blueprints-add-ons\",\n  \"aws_account_id\": \"0123456789\",\n  \"aws_cluster_name\": \"getting-started-gitops\",\n  \"aws_load_balancer_controller_iam_role_arn\": \"arn:aws:iam::0123456789:role/alb-controller\",\n  \"aws_load_balancer_controller_namespace\": \"kube-system\",\n  \"aws_load_balancer_controller_service_account\": \"aws-load-balancer-controller-sa\",\n  \"aws_region\": \"us-west-2\",\n  \"aws_vpc_id\": \"vpc-001d3f00151bbb731\",\n  \"cluster_name\": \"in-cluster\",\n  \"environment\": \"dev\",\n  \"workload_repo_basepath\": \"patterns/gitops/\",\n  \"workload_repo_path\": \"getting-started-argocd/k8s\",\n  \"workload_repo_revision\": \"main\",\n  \"workload_repo_url\": \"https://github.com/csantanapr/terraform-aws-eks-blueprints\"\n}\n```\n\nThe labels offer a straightforward way to enable or disable an addon in ArgoCD for the cluster.\n\n```shell\nkubectl get secret -n argocd -l argocd.argoproj.io/secret-type=cluster -o json | jq '.items[0].metadata.labels' | grep -v false | jq .\n```\n\nThe output looks like the following:\n\n```json\n{\n  \"argocd.argoproj.io/secret-type\": \"cluster\",\n  \"aws_cluster_name\": \"getting-started-gitops\",\n  \"cluster_name\": \"in-cluster\",\n  \"enable_argocd\": \"true\",\n  \"enable_aws_load_balancer_controller\": \"true\",\n  \"enable_metrics_server\": \"true\",\n  \"environment\": \"dev\",\n  \"kubernetes_version\": \"1.28\"\n}\n```\n\n## Deploy the Addons\n\nBootstrap the addons using ArgoCD:\n\n```shell\nkubectl apply -f bootstrap/addons.yaml\n```\n\n### Monitor GitOps Progress for Addons\n\nWait until all the ArgoCD applications' `HEALTH STATUS` is `Healthy`.\nUse `Ctrl+C` or `Cmd+C` to exit the `watch` command. ArgoCD Applications\ncan take a couple of minutes in order to achieve the Healthy status.\n\n```shell\nkubectl get applications -n argocd -w\n```\n\nThe expected output should look like the following:\n\n```text\nNAME                                            SYNC STATUS   HEALTH STATUS\naddon-in-cluster-argo-cd                        Synced        Healthy\naddon-in-cluster-aws-load-balancer-controller   Synced        Healthy\naddon-in-cluster-metrics-server                 Synced        Healthy\ncluster-addons                                  Synced        Healthy\n```\n\n### Verify the Addons\n\nVerify that the addons are ready:\n\n```shell\nkubectl get deployment -n kube-system \\\n  aws-load-balancer-controller \\\n  metrics-server\nkubectl get deploy -n argocd \\\n  argo-cd-argocd-applicationset-controller \\\n  argo-cd-argocd-repo-server \\\n  argo-cd-argocd-server\n```\n\nThe expected output should look like the following:\n\n```text\nNAME                                       READY   UP-TO-DATE   AVAILABLE   AGE\naws-load-balancer-controller               2/2     2            2           7m21s\nmetrics-server                             1/1     1            1           7m41s\nargo-cd-argocd-applicationset-controller   1/1     1            1           109m\nargo-cd-argocd-repo-server                 1/1     1            1           109m\nargo-cd-argocd-server                      1/1     1            1           109m\n```\n\n## (Optional) Access ArgoCD\n\nAccess to the ArgoCD's UI is completely optional, if you want to do it,\nrun the commands shown in the Terraform output as the example below:\n\n```shell\nterraform output -raw access_argocd\n```\n\nThe expected output should contain the `kubectl` config followed by `kubectl` command to retrieve\nthe URL, username, password to login into ArgoCD UI or CLI.\n\n```text\necho \"ArgoCD Username: admin\"\necho \"ArgoCD Password: $(kubectl get secrets argocd-initial-admin-secret -n argocd --template=\"{{index .data.password | base64decode}}\")\"\necho \"ArgoCD URL: https://$(kubectl get svc -n argocd argo-cd-argocd-server -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\"\n```\n\n## Deploy the Workloads\n\nDeploy a sample application located in [k8s/game-2048.yaml](k8s/game-2048.yaml) using ArgoCD:\n\n```shell\nkubectl apply -f bootstrap/workloads.yaml\n```\n\n### Monitor GitOps Progress for Workloads\n\nWait until all the ArgoCD applications' `HEALTH STATUS` is `Healthy`.\nUse `Ctrl+C` or `Cmd+C` to exit the `watch` command. ArgoCD Applications\ncan take a couple of minutes in order to achieve the Healthy status.\n\n```shell\nwatch kubectl get -n argocd applications workloads\n```\n\nThe expected output should look like the following:\n\n```text\nNAME        SYNC STATUS   HEALTH STATUS\nworkloads   Synced        Healthy\n```\n\n### Verify the Application\n\nVerify that the application configuration is present and the pod is running:\n\n```shell\nkubectl get -n game-2048 deployments,service,ep,ingress\n```\n\nThe expected output should look like the following:\n\n```text\nNAME                        READY   UP-TO-DATE   AVAILABLE   AGE\ndeployment.apps/game-2048   1/1     1            1           7h59m\n\nNAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE\nservice/game-2048   ClusterIP   172.20.155.47   \u003cnone\u003e        80/TCP    7h59m\n\nNAME                  ENDPOINTS       AGE\nendpoints/game-2048   10.0.13.64:80   7h59m\n\nNAME                CLASS   HOSTS   ADDRESS                              PORTS   AGE\ningress/game-2048   alb     *       k8s-\u003c\u003e.us-west-2.elb.amazonaws.com   80      7h59m\n```\n\nAWS Load Balancer can take a couple of minutes in order to be created.\n\nRun the following command and wait until and event for ingress `game-2048` contains `Successfully reconciled`.\nUse `Ctrl+C` or `Cmd+C`to exit the `watch` command.\n\n```shell\nkubectl events -n game-2048 --for ingress/game-2048 --watch\n```\n\nThe expected output should look like the following:\n\n```text\nLAST SEEN   TYPE     REASON                   OBJECT              MESSAGE\n11m         Normal   SuccessfullyReconciled   Ingress/game-2048   Successfully reconciled\n```\n\n### Access the Application using AWS Load Balancer\n\nVerify the application endpoint health using `wget`:\n\n```shell\nkubectl exec -n game-2048 deploy/game-2048 -- \\\nwget -S --spider $(kubectl get -n game-2048 ingress game-2048 -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\n```\n\nThe expected output should look like the following:\n\n```text\n  HTTP/1.1 200 OK\n  Date: Wed, 01 Nov 2023 22:44:57 GMT\n  Content-Type: text/html\n  Content-Length: 3988\n```\n\n\u003eA success response should contain `HTTP/1.1 200 OK`.\n\nRetrieve the ingress URL to access the application in your local web browser.\n\n```shell\necho \"Application URL: http://$(kubectl get -n game-2048 ingress game-2048 -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')\"\n```\n\n### Container Metrics\n\nCheck the application's CPU and memory metrics:\n\n```shell\nkubectl top pods -n game-2048\n```\n\nThe expected output should look like the following:\n\n```text\nNAME                         CPU(cores)   MEMORY(bytes)\ngame-2048-66fb78b995-hqbjv   1m           2Mi\n```\n\nCheck the CPU and memory metrics for all pods for Addons and Workloads:\n\n```shell\nkubectl top pods -A\n```\n\nThe expected output should look like the following:\n\n```text\nNAMESPACE     NAME                                                        CPU(cores)   MEMORY(bytes)\nargocd        argo-cd-argocd-application-controller-0                     43m          138Mi\nargocd        argo-cd-argocd-applicationset-controller-5db688844c-79skp   1m           25Mi\nargocd        argo-cd-argocd-dex-server-cd48d7bc-x7flf                    1m           16Mi\nargocd        argo-cd-argocd-notifications-controller-7d7ccc6b9d-dg9r6    1m           17Mi\nargocd        argo-cd-argocd-redis-7f89c69877-6mmcj                       2m           3Mi\nargocd        argo-cd-argocd-repo-server-644b9b5668-m9ddg                 8m           62Mi\nargocd        argo-cd-argocd-server-57cbbd6f94-lp4wx                      2m           26Mi\ngame-2048     game-2048-66fb78b995-hqbjv                                  1m           2Mi\nkube-system   aws-load-balancer-controller-8488df87c-4nxv6                2m           26Mi\nkube-system   aws-load-balancer-controller-8488df87c-zs4p6                1m           19Mi\nkube-system   aws-node-ck6vq                                              3m           57Mi\nkube-system   aws-node-fvvsg                                              3m           56Mi\nkube-system   coredns-59754897cf-5rlxp                                    1m           13Mi\nkube-system   coredns-59754897cf-fn7jb                                    1m           13Mi\nkube-system   kube-proxy-lzbdc                                            1m           11Mi\nkube-system   kube-proxy-pdvlm                                            1m           12Mi\nkube-system   metrics-server-5b76987ff-5gzsv                              4m           17Mi\n```\n\n## Destroy the EKS Cluster\n\nTo tear down all the resources and the EKS cluster, run the following command:\n\n```shell\n./destroy.sh\n```\n\n## Appendix\n\n## Fork GitOps Repositories\n\nTo modify the `values.yaml` file for addons or the workload manifest files (.ie yaml), you'll need to fork two repositories: [aws-samples/eks-blueprints-add-ons](https://github.com/aws-samples/eks-blueprints-add-ons) for addons and [github.com/aws-ia/terraform-aws-eks-blueprints](https://github.com/aws-ia/terraform-aws-eks-blueprints) for workloads located in this pattern directory.\n\nAfter forking, update the following environment variables to point to your forks, replacing the default values.\n\n```shell\nexport TF_VAR_gitops_addons_org=https://github.com/aws-samples\nexport TF_VAR_gitops_addons_repo=eks-blueprints-add-ons\nexport TF_VAR_gitops_addons_revision=main\n\nexport TF_VAR_gitops_workload_org=https://github.com/aws-ia\nexport TF_VAR_gitops_workload_repo=terraform-aws-eks-blueprints\nexport TF_VAR_gitops_workload_revision=main\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felementtech%2Fkgaming","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felementtech%2Fkgaming","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felementtech%2Fkgaming/lists"}