{"id":17662922,"url":"https://github.com/genebean/kubebag","last_synced_at":"2025-08-27T22:09:50.101Z","repository":{"id":141759240,"uuid":"220882339","full_name":"genebean/kubebag","owner":"genebean","description":"Kubebag is my playground where I am learning about k8s by trying to create a Kubernetes-based setup that I really like and that could replace other things.","archived":false,"fork":false,"pushed_at":"2024-09-26T16:49:48.000Z","size":197,"stargazers_count":9,"open_issues_count":1,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-05-07T17:12:31.088Z","etag":null,"topics":["k3s","kubernetes","openfaas"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/genebean.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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},"funding":{"github":"genebean","custom":"https://www.buymeacoffee.com/genebean"}},"created_at":"2019-11-11T02:09:39.000Z","updated_at":"2024-08-02T21:40:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"ae231842-4b05-45ee-84f7-b12fab1de0d9","html_url":"https://github.com/genebean/kubebag","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/genebean/kubebag","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genebean%2Fkubebag","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genebean%2Fkubebag/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genebean%2Fkubebag/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genebean%2Fkubebag/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/genebean","download_url":"https://codeload.github.com/genebean/kubebag/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/genebean%2Fkubebag/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272387526,"owners_count":24925912,"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-08-27T02:00:09.397Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","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":["k3s","kubernetes","openfaas"],"created_at":"2024-10-23T18:42:17.819Z","updated_at":"2025-08-27T22:09:50.031Z","avatar_url":"https://github.com/genebean.png","language":"Shell","funding_links":["https://github.com/sponsors/genebean","https://www.buymeacoffee.com/genebean"],"categories":[],"sub_categories":[],"readme":"# Kubebag\n\nKubebag is my playground where I am learning about k8s by trying to create a Kubernetes-based setup that could replace my current traditional server. The highlights of what I am aiming for:\n\n- [x] Based on [k3s](https://k3s.io)\n- [x] [MetalLB](https://metallb.universe.tf)\n- [x] [local-path-provisioner](https://github.com/rancher/local-path-provisioner)\n- [x] Deployments with [Argo CD](https://argoproj.github.io/argo-cd)\n- [x] [Nginx Ingress controller](https://github.com/helm/charts/blob/master/stable/nginx-ingress/README.md)\n- [x] [OpenFaaS](https://www.openfaas.com)\n- [ ] postfix\n- [ ] Slack bot via OpenFaaS\n- [ ] Matomo\n- [ ] [MariaDB](https://github.com/helm/charts/blob/master/stable/mariadb/README.md) for Matomo\n- [ ] [TimescaleDB](https://github.com/timescale/timescaledb-kubernetes/blob/master/README.md)\n- [ ] Prometheus\n- [ ] Alertmanager\n- [x] [ExternalDNS](https://github.com/kubernetes-sigs/external-dns/blob/master/README.md)\n- [ ] [cert-manager](https://docs.cert-manager.io)\n- [ ] [Linkerd 2](https://linkerd.io)\n- [ ] [Loki](https://github.com/grafana/loki) \u0026 [promtail](https://github.com/grafana/loki/blob/master/docs/clients/promtail/README.md) (maybe)\n\nTo support this running in Vagrant before being run for real a few additional tools are being deployed here:\n\n- [x] Addresses that utilize [nip.io](https://nip.io/)\n- [x] [CoreDNS](https://github.com/helm/charts/blob/master/stable/coredns/README.md)\n- [ ] [step-ca](https://smallstep.com/blog/private-acme-server/) (a stand-in for Let's Encrypt)\n- [ ] [Grafana](https://github.com/helm/charts/blob/master/stable/grafana/README.md) (in production I plan to use [Grafana Cloud](https://grafana.com/products/cloud/))\n\n## Running Kubebag\n\n### Starting it up\n\nThe initial setup utilizes sync waves to setup infrastructure in the order its needed:\n\n1. local-path-provisioner\n2. MetalLB\n3. Nginx Ingress\n4. Argo CD\n5. everything else\n\nThe setup process will copy the generated kubeconfig `/vagrant`, aka the project folder on your computer, and edit it so that it will work as needed. The process installs k3s and Argo CD and then deploys \"applications\" via a local Helm chart. The process takes a few minutes to run. The kubeconfig at the end of the block below will let you know when you can connect to Argo CD.\n\n```bash\ncd kubebag\nexport KUBECONFIG=kubeconfig\nvagrant up \u0026\u0026 kubectl get services -n nginx-ingress -w\n```\n\nOnce you see a line like the one below you can hit `^c` and connect to [argocd.192.168.50.240.nip.io](http://argocd.192.168.50.240.nip.io)\n\n```bash\nNAME                            TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                      AGE\nnginx-ingress-controller        LoadBalancer   10.43.176.66    192.168.50.240   80:30394/TCP,443:32516/TCP   7h45m\n```\n\nThe username is `admin` and you can get the password by running `cat argocd-pw` from your terminal. Once you connect you may want to \"sync\" the application named `argocd`.\n\n### OpenFaaS\n\nYou can connect to OpenFaaS via [openfaas.192.168.50.240.nip.io](http://openfaas.192.168.50.240.nip.io). The username is `admin` and the password is `functions-are-fun` (these are set [here](configs/openfaas/values.yaml))\n\n### Testing external-dns \u0026 CoreDNS\n\nIf you want to verify that these services are working run the following commands:\n\n```bash\n$ kubectl apply -f test-files/localdns-tester-ingress.yaml\ningress.extensions/nginx created\n\n$ kubectl get ingress --all-namespaces\nNAMESPACE   NAME                    HOSTS                            ADDRESS          PORTS   AGE\nargocd      argocd-server-ingress   argocd.192.168.50.240.nip.io     192.168.50.240   80      8h\nopenfaas    openfaas-ingress        openfaas.192.168.50.240.nip.io   192.168.50.240   80      8h\ndefault     nginx                   nginx.vagrant.example.com        192.168.50.240   80      8m\n\n$ kubectl get -n localdns service/localdns-coredns\nNAME               TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE\nlocaldns-coredns   ClusterIP   10.43.61.184   \u003cnone\u003e        53/UDP,53/TCP   49m\n```\n\nThe above set of commands applies a sample ingress rule, verifies it is registered, and then looks up the ip of the CoreDNS server. Once you have that info you are ready to test querying that server like so:\n\n```bash\n$ kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools\nIf you don't see a command prompt, try pressing enter.\n\ndnstools# dig @10.43.61.184 +short nginx.vagrant.example.com\n192.168.50.240\n\ndnstools# exit\npod \"dnstools\" deleted\n```\n\nThis brings up a temporary container for testing. Be sure to use the IP shown in your commands, not the one from here. After typing `exit` the pod for the test container is deleted. Now you can clean up the test ingress by running this:\n\n```bash\n$ kubectl delete -f test-files/localdns-tester-ingress.yaml\ningress.extensions \"nginx\" deleted\n```\n\nAssuming the above commands all worked, you now have a functional external-dns setup registering ingresses from your k3s instance with a DNS server external to the automated bits of Kubernetes. Note, though, that only ingresses are registered and then only if they are in the `vagrant.example.com` domain.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgenebean%2Fkubebag","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgenebean%2Fkubebag","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgenebean%2Fkubebag/lists"}