{"id":18576863,"url":"https://github.com/niqdev/do-k8s","last_synced_at":"2026-05-04T07:32:43.622Z","repository":{"id":87767169,"uuid":"186645699","full_name":"niqdev/do-k8s","owner":"niqdev","description":"Declarative pull-based GitOps repository of my DigitalOcean Kubernetes cluster","archived":false,"fork":false,"pushed_at":"2019-10-28T16:43:38.000Z","size":59,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-05T09:03:46.897Z","etag":null,"topics":["argo","digitalocean","gitops","kubernetes"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/niqdev.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":"2019-05-14T15:01:20.000Z","updated_at":"2020-07-10T07:42:53.000Z","dependencies_parsed_at":null,"dependency_job_id":"d8967cde-2f40-40c0-8c5b-78d80e7540b0","html_url":"https://github.com/niqdev/do-k8s","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niqdev%2Fdo-k8s","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niqdev%2Fdo-k8s/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niqdev%2Fdo-k8s/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/niqdev%2Fdo-k8s/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/niqdev","download_url":"https://codeload.github.com/niqdev/do-k8s/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254448614,"owners_count":22072765,"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":["argo","digitalocean","gitops","kubernetes"],"created_at":"2024-11-06T23:26:53.317Z","updated_at":"2026-05-04T07:32:43.593Z","avatar_url":"https://github.com/niqdev.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# do-k8s\n\n[![Build Status][travis-image]][travis-url]\n\n[travis-image]: https://travis-ci.org/niqdev/do-k8s.svg?branch=master\n[travis-url]: https://travis-ci.org/niqdev/do-k8s\n\nThis cluster definition is based on the common infrastructure for Continuos Deployment and Observability described in [edgelevel/gitops-k8s](https://github.com/edgelevel/gitops-k8s) and is customized for DigitalOcean\n\n* [Setup](#setup)\n* [Applications](#applications)\n\n## Setup\n\nThe [bootstrap](bootstrap) chart has two main purposes\n* import the [seed](https://github.com/edgelevel/gitops-k8s/tree/master/charts/seed) chart to reuse and extend the common infrastracture\n* declare an [Application of Applications](https://argoproj.github.io/argo-cd/operator-manual/cluster-bootstrapping/#application-of-applications-pattern)\n\nTo setup a cluster follow these instructions\n1) install the [required tools](https://github.com/edgelevel/gitops-k8s#prerequisites)\n2) create a 3 nodes Kubernetes cluster on [DigitalOcean](https://www.digitalocean.com/docs/kubernetes)\n3) configure the [DNS](https://www.digitalocean.com/community/tutorials/an-introduction-to-dns-terminology-components-and-concepts)\n    * buy a domain from a registrar\n    * [point to DigitalOcean nameservers from a domain name registrar](https://www.digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from-common-domain-registrars) in order to manage DNS records declaratively from the cluster\n    * [add](https://www.digitalocean.com/docs/networking/dns/quickstart/#add-a-domain) a domain to your project from the control panel\n4) create a [Personal Access Token](https://www.digitalocean.com/docs/api/create-personal-access-token)\n5) apply the bootstrap chart\n    ```bash\n    make\n    ```\n6) [port-forward](https://github.com/edgelevel/gitops-k8s#bootstrap) ArgoCD (see step 3) and override these application parameters from the UI\n    * `applications-do` \u003e `digitalOceanToken` with the Personal Access Token to create a LoadBalancer\n    * `applications-do` \u003e `domain` e.g. `example.com`\n    * `elasticsearch` \u003e `volumeClaimTemplate.storageClassName` with `do-block-storage` specific for [DigitalOcean](https://www.digitalocean.com/docs/kubernetes/how-to/add-volumes/#define-the-persistent-volume-claim)\n    * *TODO fix argocd secrets [issue](https://github.com/argoproj/argo-cd/issues/1786) to automate the steps above*\n6) Sync all the applications from the UI manually\n\n## Applications\n\nApplications in this repository are defined in the parent [applications-do](applications-do/templates) chart and are logically split into folders which represent Kubernetes namespaces\n\n**`ambassador`** namespace is dedicated for [Ambassador](https://www.getambassador.io) and defines\n* an application with a service annotation to allow external-dns to automatically create DNS records and internally route all the requests\n* [`ambassador-mapping`](charts/ambassador-mapping/templates) contains the definitions of all the routes in form of helm chart\n    * `ambassador.example.com`\n    * `kubernetes-dashboard.example.com`\n    * `kube-ops-view.example.com`\n    * `prometheus.example.com`\n    * `alertmanager.example.com`\n    * `grafana.example.com`\n    * `elasticsearch.example.com`\n    * `cerebro.example.com`\n    * `kibana.example.com`\n    * `bot.example.com`\n    * *TODO* `argocd.example.com`\n\n**`kube-do`** namespace is dedicated for system wide resources tightly coupled to DigitalOcean\n\n* [`external-dns`](https://github.com/kubernetes-incubator/external-dns) synchronizes exposed Kubernetes Services and Ingresses with DNS providers\n\n**`bot`** namespace is dedicated for a Scala pure FP [bot](https://github.com/niqdev/mobile-carrier-bot) to scrape the balance of mobile carriers\n\n**Resources**\n\n* [An Introduction to Managing DNS](https://www.digitalocean.com/community/tutorial_series/an-introduction-to-managing-dns)\n* [Domains and DNS](https://www.digitalocean.com/docs/networking/dns)\n* [An Introduction to the Kubernetes DNS Service](https://www.digitalocean.com/community/tutorials/an-introduction-to-the-kubernetes-dns-service)\n* [How To Automatically Manage DNS Records From DigitalOcean Kubernetes Using ExternalDNS](https://www.digitalocean.com/community/tutorials/how-to-automatically-manage-dns-records-from-digitalocean-kubernetes-using-externaldns)\n* [How to Manage CAA Records](https://www.digitalocean.com/docs/networking/dns/how-to/caa)\n* [An Introduction to Let's Encrypt](https://www.digitalocean.com/community/tutorials/an-introduction-to-let-s-encrypt)\n* [Setting Up a Domain with SSL on DigitalOcean Kubernetes using ExternalDNS and Helm](https://blog.andrewsomething.com/2019/04/04/external-dns-with-ssl-on-k8s)\n* [Kubernetes Tutorial: Managing TLS Certificates with Ambassador](https://auth0.com/blog/kubernetes-tutorial-managing-tls-certificates-with-ambassador)\n* [Kubernetes secrets](https://kubernetes.io/docs/concepts/configuration/secret)\n* [Using Kubernetes Secrets](https://medium.com/platformer-blog/using-kubernetes-secrets-5e7530e0378a)\n* [Kubernetes External Secrets](https://godaddy.github.io/2019/04/16/kubernetes-external-secrets)\n\nTODO\n* [ ] try to automate the bootstrap steps using the [API](https://developers.digitalocean.com/documentation/v2)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniqdev%2Fdo-k8s","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fniqdev%2Fdo-k8s","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fniqdev%2Fdo-k8s/lists"}