https://github.com/glasskube/gitops-template/ Skip to content Navigation Menu Toggle navigation Sign in * Product + Actions Automate any workflow + Packages Host and manage packages + Security Find and fix vulnerabilities + Codespaces Instant dev environments + GitHub Copilot Write better code with AI + Code review Manage code changes + Issues Plan and track work + Discussions Collaborate outside of code Explore + All features + Documentation + GitHub Skills + Blog * Solutions By size + Enterprise + Teams + Startups By industry + Healthcare + Financial services + Manufacturing By use case + CI/CD & Automation + DevOps + DevSecOps * Resources Topics + AI + DevOps + Security + Software Development + View all Explore + Learning Pathways + White papers, Ebooks, Webinars + Customer Stories + Partners * Open Source + GitHub Sponsors Fund open source developers + The ReadME Project GitHub community articles Repositories + Topics + Trending + Collections * Enterprise + Enterprise platform AI-powered developer platform Available add-ons + Advanced Security Enterprise-grade security features + GitHub Copilot Enterprise-grade AI features + Premium Support Enterprise-grade 24/7 support * Pricing Search or jump to... Search code, repositories, users, issues, pull requests... Search [ ] Clear Search syntax tips Provide feedback We read every piece of feedback, and take your input very seriously. [ ] [ ] Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly Name [ ] Query [ ] To see all available qualifiers, see our documentation. Cancel Create saved search Sign in Sign up Reseting focus You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert {{ message }} glasskube / gitops-template Public template * Notifications You must be signed in to change notification settings * Fork 13 * Star 88 ArgoCD based GitOps template with preconfigured Glasskube Package Manager and an example application. glasskube.dev License Apache-2.0 license 88 stars 13 forks Branches Tags Activity Star Notifications You must be signed in to change notification settings * Code * Issues 2 * Pull requests 0 * Actions * Projects 0 * Security * Insights Additional navigation options * Code * Issues * Pull requests * Actions * Projects * Security * Insights glasskube/gitops-template This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository. main BranchesTags Go to file Code Folders and files Name Name Last commit message Last commit date Latest commit History 20 Commits apps/shiori apps/shiori bootstrap bootstrap packages packages .gitignore .gitignore LICENSE LICENSE README.md README.md renovate.json renovate.json View all files Repository files navigation * README * Apache-2.0 license gitops-template Use this repository as a template to get started with ArgoCD & Glasskube in minutes instead of hours. Getting Started Prerequisites Access to an empty Kubernetes cluster The easiest would be creating a new Minikube cluster with: minikube start -p gitops Glasskube should not yet be bootstrapped in that cluster Install the Glasskube CLI Make sure to have at least Glasskube version 0.16.0 installed locally. If you don't, you can simply run: brew install glasskube/tap/glasskube Installation 1. Use this repository as your GitOps template Create a GitHub repository based on this starter template. 2. Replace the placeholder repoURL in your GitOps repository Replace the default value of repoURL to your repository url. * Line 12 in: bootstrap/glasskube-application.yaml * Lines 11, 16 and 26 in: bootstrap/glasskube/applicationset.yaml * Commit and push changes to your target git repository. 3. Bootstrap ArgoCD and Glasskube for your Kubernetes cluster Make sure you are connected to the right cluster and execute: glasskube bootstrap git --url --username --token For public repositories you can omit --username and --token. For private repositories, make sure to obtain a token from GitHub, that has read access to the repository. Result As a result, your cluster will be powered with GitOps capabilities by ArgoCD, as well as package management features by Glasskube. Argo manages itself, the Glasskube installation, as well as Glasskube packages - all of which you can now manage GitOps-style with this repo. Run glasskube serve to open the Glasskube UI and either open the ArgoCD UI there, or with the command glasskube open argo-cd - but of course you can also use the Argo CLI. Follow the ArgoCD docs to get and reset the password to log in. Note that it might take a couple of minutes for ArgoCD to start up, and for the initial GitOps sync to happen. In this template, for demonstration purposes we also install the cloudnative-pg and kube-prometheus-stack clusterpackage as well as a bookmarking application (shiori), which is making use of cloudnative-pg. Managing your cluster Both CLI and UI offer features to manage your cluster according to GitOps best practices: CLI commands include --dry-run and -o yaml flags. The UI, when installed with the above glasskube bootstrap git command, will also output the yaml objects which you can copy to use in your git repo, instead of applying your changes directly. Installing packages To install a ClusterPackage, e.g. cert-manager, use the install command like this: glasskube install cert-manager --dry-run -o yaml --yes > cert-manager.yaml Instead of directly installing the ClusterPackage, this command writes the ClusterPackage custom resource to the cert-manager.yaml file, which can now be put into a new directory packages/cert-manager / in the git repository. Once pushed to the repo, ArgoCD will pick up the changes after at most 5 minutes, create the ArgoCD Application wrapping the Glasskube ClusterPackage. After that, the Glasskube operator will pick up the ClusterPackage and finally install it in the cluster. Similarly, when using the Glasskube UI, one can generate the ClusterPackage resource by using the "Show YAML" button on the page of the ClusterPackage. Updating packages There are two options handling package version updates: * Using the glasskube update --dry-run -o yaml command, or the corresponding button on the Glasskube UI. * Integrating renovate into the cluster. The first option follows the same approach as the previously shown package installation, and will be omitted here. The downside of doing it that way, is that someone has to manually execute the command, even though checking for updates and preparing the updates to the git repository as an automatable task. Renovate is a tool allowing for exactly that kind of task, as explained in the following. Integrating with Renovate Glasskube integrates with Renovate in order to simplify package updates. Therefore, install the Renovate GitHub App and enable it for your GitOps repo. The renovate configuration of this template repo (renovate.json) contains the glasskube manager, looking for all appearances of Glasskube (Cluster-)Packages in all the repo's yaml files. As soon as one of the installed Glasskube packages uses an outdated version, renovate will open a Pull Request to update to the latest version, which you only need to approve and merge. Be aware that the Glasskube Renovate manager is not aware of the package dependencies in your cluster. As a consequence, this could lead to somebody installing a version that is not allowed because of dependency restrictions, however, the package operator will not actually install it. The package status would be set to "Failed" with an error message indicating the dependency conflict, but the previously installed version of the package would not be touched/ destroyed. In such a case, you would have to manually intervene and roll back to the previously used package version. Uninstalling packages To uninstall a package or a ClusterPackage, simply remove the custom resource from the git repository. Updating Glasskube When a new Glasskube version is available, the manifests have to be updated. Run glasskube bootstrap --dry-run -o yaml --force > bootstrap/glasskube/glasskube.yaml to update the Glasskube manifests in your git repo. After reviewing and merging those changes the update will be picked up by ArgoCD. The --force flag is necessary for the command to continue manifest validation, even though failures occur. Working with Apps This template also contains a demo application: a bookmark manager called shiori. Its manifests are defined in apps/shiori, which is a pattern you can follow for your own custom applications. In a minikube environment, two manual steps are required to access the application (for more information consult the minikube docs): * Run minikube addons enable ingress -p gitops. * Run minikube ip -p gitops and add the line my-shiori.example to your /etc/hosts file. After that you will be able to access the application via http:// my-shiori.example in your browser. The default login credentials are shiori / gopher - for more information check the shiori docs. In general, you can use the apps directory to deploy such custom applications into your cluster. Any subdirectory will be picked up by ArgoCD and grouped as an Application. Monitoring with kube-prometheus-stack This template also installs the kube-prometheus-stack clusterpackage, which is an easy way to get started with monitoring your cluster. You can open Grafana with glasskube open kube-prometheus-stack. It does not come preconfigured in this example, but you can easily add a nice postgres dashboard and observe the metrics of the database while you are working with the bookmarking application. Setting up a postgres dashboard We are going to make use of the cloudnativepg dashboard. Import it by opening the dashboard-import page, pasting https://grafana.com/ grafana/dashboards/20417-cloudnativepg/ into the first textfield, and pressing "Load". Use the "Prometheus" data source on the following screen and finish the import process. CloudNativePG dashboard Of course monitoring your experimental minikube cluster is a bit of an overkill, but this is simply to demonstrate how these kind of cluster administration tasks can be integrated into this gitops stack. Repository Structure Initially, this repository will come with * a bootstrap directory containing the initial/parent Argo Application, and the necessary Glasskube manifests * a packages directory containing the argo-cd cluster package. * an apps directory containing your applications. * the renovate configuration in renovate.json. Glasskube custom resources will only be picked up by Argo when being put inside the packages directory. Please do not delete/uninstall the argo-cd package, as this will also remove everything else! Note that the parent application used to bootstrap (bootstrap/ glasskube-application.yaml) will not be synced after the initial setup. If you want to change something about it, you will have to change the application via argo directly. Private Repositories Your gitops repository can be public or private (recommended). The given username and token are stored in a secret by the bootstrap command. This secret is not commited the git repository. If you initially chose to use a public repository, or if you need to change the repo credentials (e.g. because the token expired), you can still do so by adding or updating this secret manually via ArgoCD. Upcoming Features Improved Dependency Resolution Installing packages with dependencies is not 100% GitOps-compatible yet, as the dependencies will be created by the operator. Consider this: To install a ClusterPackage

that has a dependency on D, one would do glasskube install

--dry-run -o yaml, which would output the ClusterPackage custom resource for

. However, the dependency D will only be resolved at reconciliation time by the package operator, and will therefore not be represented in the git repository at all. A temporary workaround would be to have a closer look at the output of the install command, which also shows the dependencies which will be installed and in which version. One could then manually add the required packages custom resources to the git repo as well. However, this will be tackled in a future version to make the user experience better, see glasskube/glasskube#430. Summary With this template repository and guide we show how Glasskube can easily be set up in a ArgoCD powered Gitops environment, and how efficient package management is possible with this stack. Additionally we install a web application to show how custom applications can make use of the Gitops setup and Glasskube packages. This is still in early stages and therefore has some minor shortcomings, but we will continue to improve GitOps support. Feedback We love feedback! Whether you are just starting out or you are a seasoned professional, we'd like to hear your thoughts, inputs and questions regarding this starter template and corresponding guide here, in the glasskube/glasskube repo or on our Discord. Thanks! About ArgoCD based GitOps template with preconfigured Glasskube Package Manager and an example application. glasskube.dev Topics kubernetes template grafana postgresql minikube infrastructure-as-code shiori gitops argocd cloudnative-pg kube-prometheus-stack glasskube Resources Readme License Apache-2.0 license Activity Custom properties Stars 88 stars Watchers 3 watching Forks 13 forks Report repository Contributors 4 * @christophenne christophenne Christoph Enne * @pmig pmig Philip Miglinci * @renovate[bot] renovate[bot] * @jakepage91 jakepage91 Jake Page Footer (c) 2024 GitHub, Inc. Footer navigation * Terms * Privacy * Security * Status * Docs * Contact * Manage cookies * Do not share my personal information You can't perform that action at this time.