{"id":13537586,"url":"https://github.com/berops/claudie","last_synced_at":"2025-04-14T15:48:27.004Z","repository":{"id":60185743,"uuid":"284387887","full_name":"berops/claudie","owner":"berops","description":"Cloud-agnostic managed Kubernetes","archived":false,"fork":false,"pushed_at":"2025-04-09T15:05:22.000Z","size":25391,"stargazers_count":707,"open_issues_count":46,"forks_count":44,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-09T15:40:35.121Z","etag":null,"topics":["aws","azure","cloud-native","cloudflare","devops","gcp","hetzner","hybrid-cloud","hybridcloud","inter-cloud","intercloud","k8s","kubernetes","kubernetes-cluster","managed-kubernetes","multi-cloud","multicloud","oci","paas"],"latest_commit_sha":null,"homepage":"https://docs.claudie.io/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/berops.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing/contributing.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"docs/roadmap/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-08-02T04:09:43.000Z","updated_at":"2025-04-09T15:02:02.000Z","dependencies_parsed_at":"2024-10-29T15:33:35.749Z","dependency_job_id":null,"html_url":"https://github.com/berops/claudie","commit_stats":{"total_commits":1088,"total_committers":27,"mean_commits":40.2962962962963,"dds":0.7729779411764706,"last_synced_commit":"a9dde3402e57db86318db66ebe53b7e638c1a5f1"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berops%2Fclaudie","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berops%2Fclaudie/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berops%2Fclaudie/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/berops%2Fclaudie/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/berops","download_url":"https://codeload.github.com/berops/claudie/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248909001,"owners_count":21181624,"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":["aws","azure","cloud-native","cloudflare","devops","gcp","hetzner","hybrid-cloud","hybridcloud","inter-cloud","intercloud","k8s","kubernetes","kubernetes-cluster","managed-kubernetes","multi-cloud","multicloud","oci","paas"],"created_at":"2024-08-01T09:01:00.787Z","updated_at":"2025-04-14T15:48:26.964Z","avatar_url":"https://github.com/berops.png","language":"Go","readme":"\u003ch4 align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/berops/claudie/17480b6cb809fe795d454588af18355c7543f37e/docs/logo%20claudie_blue_no_BG.svg\" width=\"250px\"/\u003e\u003cbr/\u003e\n  \u003cbr/\u003e\u003cbr/\u003e\n  Platform for managing multi-cloud and hybrid-cloud Kubernetes clusters with support for nodepools across different cloud-providers and on-premise data centers\n\u003c/h4\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/berops/claudie/releases/\"\u003e\u003cimg alt=\"Releases\" src=\"https://img.shields.io/github/release-date/berops/claudie?label=latest%20release\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://goreportcard.com/report/github.com/Berops/claudie\"\u003e\u003cimg src=\"https://goreportcard.com/badge/github.com/Berops/claudie\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://opensource.org/licenses/Apache-2.0\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-Apache_2.0-blue.svg\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## Intro video\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"http://www.youtube.com/watch?feature=player_embedded\u0026v=q4xdAiHYxZQ\" target=\"_blank\"\u003e\n    \u003cimg src=\"http://img.youtube.com/vi/q4xdAiHYxZQ/0.jpg\" alt=\"Claudie Intro Video\" width=\"480\" height=\"360\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n## Vision of Claudie\n\nThe purpose of Claudie is to become the final Kubernetes engine you'll ever need. It aims to build clusters that leverage features and costs across multiple cloud vendors and on-prem datacenters. A Kubernetes that you won't ever need to migrate away from.\n\n## Typical use cases\n\nClaudie has been built as an answer to the following Kubernetes challenges.\n\n- Cost savings\n- Data locality \u0026 compliance (e.g. GDPR)\n- Managed Kubernetes for providers that do not offer it\n- Cloud bursting\n- Service interconnect\n\nRead in more details [here](https://docs.claudie.io/latest/use-cases/use-cases/).\n\n## Features\n\n### Manage multi-cloud and hybrid-cloud Kubernetes clusters\n\nCreate fully-featured Kubernetes clusters composed of multiple different public Cloud providers and on-premise data center in an easy and secure manner.\nSimply insert credentials to your cloud projects, define your cluster, and watch how the infra spawns right in front of you.\n\n![](./docs/infra-diagram.png)\n\n### Management via IaC\n\nDeclaratively define your infrastructure with a simple, easy to understand YAML [syntax](https://docs.claudie.io/latest/input-manifest/input-manifest/).\nSee example [manifest](https://docs.claudie.io/latest/input-manifest/example/).\n\n### Fast scale-up/scale-down of your infrastructure\n\nTo scale-up or scale-down, simply change a few lines in the input manifest and Claudie will take care of the rest in the matter of minutes.\n\n### Loadbalancing\n\nClaudie has its own managed load-balancing solution, which you can use for Ingresses, the Kubernetes API server, or generally anything. Check out our [LB docs](https://docs.claudie.io/latest/loadbalancing/loadbalancing-solution/).\n\n### Persistent storage volumes\n\nClaudie comes pre-configured with a storage solution, with ready-to-use Storage Classes. See [Storage docs](https://docs.claudie.io/latest/storage/storage-solution/) to learn more.\n\n\u003c!-- steps-start --\u003e\n## Get started using Claudie\n\n### Prerequisites\nBefore you begin, please make sure you have the following prerequisites installed and set up:\n\n1. Claudie needs to be installed on an existing Kubernetes cluster, referred to as the *Management Cluster*, which it uses to manage the clusters it provisions. For testing, you can use ephemeral clusters like Minikube or Kind. However, for production environments, we recommend using a more resilient solution since Claudie maintains the state of the infrastructure it creates.\n\n2. Claudie requires the installation of cert-manager in your Management Cluster. To install cert-manager, use the following command:\n    ```bash\n    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.12.0/cert-manager.yaml\n    ```\n\n\n### Supported providers\n\u003c!-- providers-start --\u003e\n   | Supported Provider                                                                | Node Pools         | DNS                |\n   | --------------------------------------------------------------------------------- | ------------------ | ------------------ |\n   | [AWS](https://docs.claudie.io/latest/input-manifest/providers/aws/)               | :heavy_check_mark: | :heavy_check_mark: |\n   | [Azure](https://docs.claudie.io/latest/input-manifest/providers/azure/)           | :heavy_check_mark: | :heavy_check_mark: |\n   | [GCP](https://docs.claudie.io/latest/input-manifest/providers/gcp/)               | :heavy_check_mark: | :heavy_check_mark: |\n   | [OCI](https://docs.claudie.io/latest/input-manifest/providers/oci/)               | :heavy_check_mark: | :heavy_check_mark: |\n   | [Hetzner](https://docs.claudie.io/latest/input-manifest/providers/hetzner/)       | :heavy_check_mark: | :heavy_check_mark: |\n   | [Cloudflare](https://docs.claudie.io/latest/input-manifest/providers/cloudflare/) | N/A                | :heavy_check_mark: |\n   | [GenesisCloud](https://docs.claudie.io/latest/input-manifest/providers/genesiscloud/) | :heavy_check_mark: | N/A |\n\nFor adding support for other cloud providers, open an issue or propose a PR.\n\n\u003c!-- providers-end --\u003e\n\n### Install Claudie\n\n1. Deploy Claudie to the Management Cluster:\n    ```bash\n    kubectl apply -f https://github.com/berops/claudie/releases/latest/download/claudie.yaml\n    ```\n\n   To further harden claudie, you may want to deploy our pre-defined network policies:\n   ```bash\n   # for clusters using cilium as their CNI\n   kubectl apply -f https://github.com/berops/claudie/releases/latest/download/network-policy-cilium.yaml\n   ```\n   ```bash\n   # other\n   kubectl apply -f https://github.com/berops/claudie/releases/latest/download/network-policy.yaml\n   ```\n### Deploy your cluster\n\n1. Create Kubernetes Secret resource for your provider configuration.\n\n    ```bash\n    kubectl create secret generic example-aws-secret-1 \\\n      --namespace=mynamespace \\\n      --from-literal=accesskey='myAwsAccessKey' \\\n      --from-literal=secretkey='myAwsSecretKey'\n    ```\n\n    Check the [supported providers](#supported-providers) for input manifest examples. For an input manifest spanning all supported hyperscalers checkout out [this example](https://docs.claudie.io/latest/input-manifest/example/).\n\n2. Deploy InputManifest resource which Claudie uses to create infrastructure, include the created secret in `.spec.providers` as follows:\n    ```bash\n    kubectl apply -f - \u003c\u003cEOF\n    apiVersion: claudie.io/v1beta1\n    kind: InputManifest\n    metadata:\n      name: examplemanifest\n      labels:\n        app.kubernetes.io/part-of: claudie\n    spec:\n      providers:\n          - name: aws-1\n          providerType: aws\n          secretRef:\n              name: example-aws-secret-1 # reference the secret name\n              namespace: mynamespace     # reference the secret namespace\n      nodePools:\n          dynamic:\n          - name: control-aws\n              providerSpec:\n                name: aws-1\n                region: eu-central-1\n                zone: eu-central-1a\n              count: 1\n              serverType: t3.medium\n              image: ami-0965bd5ba4d59211c\n          - name: compute-1-aws\n              providerSpec:\n                name: aws-1\n                region: eu-west-3\n                zone: eu-west-3a\n              count: 2\n              serverType: t3.medium\n              image: ami-029c608efaef0b395\n              storageDiskSize: 50\n      kubernetes:\n          clusters:\n          - name: aws-cluster\n              version: 1.27.0\n              network: 192.168.2.0/24\n              pools:\n                control:\n                    - control-aws\n                compute:\n                    - compute-1-aws        \n    EOF\n    ```\n    \n    ***Deleting existing InputManifest resource deletes provisioned infrastructure!***\n\n### Connect to your cluster\nClaudie outputs base64 encoded kubeconfig secret `\u003ccluster-name\u003e-\u003ccluster-hash\u003e-kubeconfig` in the namespace where it is deployed:\n\n1. Recover kubeconfig of your cluster by running:\n    ```bash\n    kubectl get secrets -n claudie -l claudie.io/output=kubeconfig -o jsonpath='{.items[0].data.kubeconfig}' | base64 -d \u003e your_kubeconfig.yaml\n    ```\n2. Use your new kubeconfig:\n    ```bash\n    kubectl get pods -A --kubeconfig=your_kubeconfig.yaml\n    ```\n\n### Cleanup\n\n1. To remove your cluster and its associated infrastructure, delete the cluster definition block from the InputManifest:\n    ```bash\n    kubectl apply -f - \u003c\u003cEOF\n    apiVersion: claudie.io/v1beta1\n    kind: InputManifest\n    metadata:\n      name: examplemanifest\n      labels:\n        app.kubernetes.io/part-of: claudie\n    spec:\n      providers:\n          - name: aws-1\n          providerType: aws\n          secretRef:\n              name: example-aws-secret-1 # reference the secret name\n              namespace: mynamespace     # reference the secret namespace\n      nodePools:\n          dynamic:\n          - name: control-aws\n              providerSpec:\n                name: aws-1\n                region: eu-central-1\n                zone: eu-central-1a\n              count: 1\n              serverType: t3.medium\n              image: ami-0965bd5ba4d59211c\n          - name: compute-1-aws\n              providerSpec:\n                name: aws-1\n                region: eu-west-3\n                zone: eu-west-3a\n              count: 2\n              serverType: t3.medium\n              image: ami-029c608efaef0b395\n              storageDiskSize: 50\n      kubernetes:\n        clusters:\n    #      - name: aws-cluster\n    #          version: 1.27.0\n    #          network: 192.168.2.0/24\n    #          pools:\n    #            control:\n    #                - control-aws\n    #            compute:\n    #                - compute-1-aws         \n    EOF\n    ```\n2. To delete all clusters defined in the input manifest, delete the InputManifest. This triggers the deletion process, removing the infrastructure and all data associated with the manifest.\n\n    ```bash\n    kubectl delete inputmanifest examplemanifest\n    ```\n\u003c!-- steps-end --\u003e\n\n## Get involved\n\n\u003c!-- Contributor guidelines --\u003e\nEveryone is more than welcome to open an issue, a PR or to start a discussion.\n\nFor more information about contributing please read the [contribution guidelines](https://docs.claudie.io/latest/contributing/contributing/).\n\nIf you want to have a chat with us, feel free to join our channel on [kubernetes Slack workspace](https://kubernetes.slack.com/archives/C05SW4GKPL3) (get invite [here](https://communityinviter.com/apps/kubernetes/community)).\n\n## Versioning\n\nCurrent project releasing follows [ZerOver](https://0ver.org), with the following versioning promise:\n- In new releases, API might break and functionality might change significantly. Any such releases increment the second digit in the release tag. The users **really need to read the release notes** before upgrading to these releases.\n- For all other releases, the third digit increments. Upgrades to these versions can be done blindly without any risk to running environments. Reading the release notes is recommended nevertheless.\n\n## Security\n\nWhile we strive to create secure software, there is always a chance that we\nmiss something.\nIf you've discovered something that requires our attention, see [our security\npolicy](SECURITY.md) to learn how to proceed.\n\n## Roadmap\n\u003c!-- Add a roadmap for claudie so users know which features are being worked on and which will in future --\u003e\nTo see the vision behind Claudie, please refer to the [roadmap](https://docs.claudie.io/latest/roadmap/roadmap/) document.\n\n\n## Reach out to us\n\nClaudie is proudly developed by Berops.\nFeel free to request a demo [here](mailto:claudie-demo\u0026commat;berops\u0026period;com).\nFor information on enterprise support, contact us [here](mailto:claudie\u0026commat;berops\u0026period;com).\n\n## LICENSE\n\nApache-2.0 (see [LICENSE](LICENSE) for details).\n","funding_links":[],"categories":["Go","Tools and Libraries","Cluster Provisioning \u0026 Lifecycle","azure","\u003ca name=\"Go\"\u003e\u003c/a\u003eGo"],"sub_categories":["Cluster Provisioning"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fberops%2Fclaudie","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fberops%2Fclaudie","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fberops%2Fclaudie/lists"}