diff --git a/README.md b/README.md index 58c8a751d..be83b0e1a 100644 --- a/README.md +++ b/README.md @@ -1,192 +1,180 @@ -

Kubernetes Cluster API Provider Hetzner

+Kubernetes Cluster API Provider Hetzner -

- Guide | - Docs Index | - Development Docs

- Cluster API Book

-

+
---- - -

- GitHub release - GoDoc - Go Report Card - CII Best Practices - License - Latest quay.io image tags -

- - -The Kubernetes Cluster API Provider Hetzner enables declarative provisioning of multiple Kubernetes clusters on [Hetzner infrastructure](https://hetzner.cloud). - -High-available Kubernetes clusters on bare metal and cloud instances are supported. - -The Cluster API simplifies the creation, updates, and operation of production-ready clusters. -Self-managed Kubernetes clusters can, therefore, be easily operated even at a large scale. - -> Disclaimer: This is not an official Hetzner project! It is maintained by [Syself](https://syself.com). -> If you have questions or are interested in running production-ready Kubernetes clusters on Hetzner, then please contact us via e-mail: [info@syself.com](mailto:info@syself.com?subject=cluster-api-provider-hetzner). +
+Quickstart | +Docs | +Contribution Guide

+Cluster API Book +
-## :newspaper: What is the Cluster API Provider Hetzner? - -The [Cluster API][cluster_api] orchestrates infrastructure similar to the way Kubernetes manages containers. It implements a declarative API like Kubernetes does and extends the resources of the Kubernetes API server via CRDs. +--- -The Cluster API consists of the CAPI controller, the control-plane provider, the bootstrap provider, -and an infrastructure provider. +
+GitHub release +GoDoc +Go Report Card +CII Best Practices +License +Latest quay.io image tags +
-The controllers ensure that the desired state of the infrastructure is achieved - just as Kubernetes ensures the desired state of containers. The concept of -[Kubernetes Controller](https://kubernetes.io/docs/concepts/architecture/controller/) has significant advantages over Infrastructure as Code (IaC) solutions because it can react automatically to changes and problems. The best example of this is the MachineHealthCheck, which replaces unhealthy nodes automatically. +
-Using the Cluster API Provider Hetzner (CAPH) unites the benefits of declarative infrastructure, cost-effectiveness, and (GDPR-compliant) European cloud. +The Kubernetes Cluster API Provider Hetzner (CAPH) enables declarative provisioning of multiple Kubernetes clusters on [Hetzner infrastructure](https://hetzner.cloud). -## :telephone_receiver: Support +With CAPH, you can manage highly-available Kubernetes clusters on both bare metal and cloud instances, leveraging the Cluster API to handle creation, updates, and operations of production-ready, self-managed Kubernetes clusters at any scale. -Supporting your Kubernetes journey is our priority at Syself. +> [!NOTE] +> The Cluster API Provider Hetzner is independently maintained by [Syself](https://syself.com) and the community. It is not an official Hetzner project. +> +> If you have any questions about this project, please start a conversation in the [Discussions](https://github.com/syself/cluster-api-provider-hetzner/discussions) tab or contact us at [contact@syself.com](mailto:contact@syself.com?subject=cluster-api-provider-hetzner). -If you require expert assistance in managing production-ready clusters with CAPH, connect with the seasoned experts at Syself. +## 📰 What is the Cluster API Provider Hetzner? -Contact us via [info@syself.com](mailto:info@syself.com?subject=autopilot) for top-notch support on your Kubernetes adventure. +The [Cluster API][cluster_api] orchestrates infrastructure similarly to how Kubernetes manages containers. It implements a declarative API like Kubernetes does and extends the resources of the Kubernetes API server via CRDs. -## :sparkles: Features of CAPH +The Cluster API consists of the CAPI controller, the control-plane provider, the bootstrap provider, and an infrastructure provider like CAPH, that translates resources in Hetzner to objects in the Kubernetes API. -* Native Kubernetes manifests and API -* Choice of Linux distribution -* Support for single and multi-node control plane clusters (HA Kubernetes) -* Support for Hetzner Cloud placement groups, network, and load balancer -* Complete day 2 operations - updating Kubernetes and nodes, scaling up and down, self-healing -* Custom CSR approver for approving [kubelet-serving certificate signing requests](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#kubelet-serving-certs) -* Hetzner dedicated servers / bare metal (and GPUs) +The controllers ensure that the desired state of the infrastructure is achieved - just as Kubernetes ensures the desired state of containers. The concept of [Kubernetes Controller](https://kubernetes.io/docs/concepts/architecture/controller/) has significant advantages over traditional Infrastructure as Code (IaC) solutions because it can react automatically to changes and problems. The best example of this is the MachineHealthCheck, which replaces unhealthy nodes automatically. -## :eyes: Clarifying Scope +Using CAPH unites the benefits of declarative infrastructure, cost-effectiveness, and GDPR-compliant European cloud, ensuring that your clusters can automatically adapt to changes and problems. -If you are new to Kubernetes, we want you to know that managing a production-grade Kubernetes system requires a **dedicated team of experts**. +## ✨ Features of CAPH -The Cluster API Provider Hetzner (CAPH) deals with the lifecycle management of machines and infrastructure. +- Native Kubernetes resources and API +- Works with your choice of Linux distribution +- Support for single and multi-node control plane clusters (HA Kubernetes) +- Support for Hetzner Cloud placement groups, network, and load balancer +- Complete day 2 operations - updating Kubernetes and nodes, scaling up and down, self-healing +- Custom CSR approver for approving [kubelet-serving certificate signing requests](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/#kubelet-serving-certs) +- Hetzner dedicated servers / bare metal (and GPUs) -Here are several aspects that CAPH will not handle for you: +## 👀 Clarifying Scope -- production-ready node images -- secured kubeadm configuration -- incorporation of cluster add-ons, such as CNI (e.g. cilium), metrics-server, konnectivity-service, etc. -- testing & update procedures of Kubernetes version, configuration -- backup procedures -- monitoring strategies -- alerting systems -- identity and Access Management (IAM) +Managing a production-grade Kubernetes system requires a **dedicated team of experts**. +The Cluster API Provider Hetzner (CAPH) handles the lifecycle management of machines and infrastructure, but certain aspects need to be managed separately: -If you don't have a dedicated team for managing Kubernetes, you can use **Syself Autopilot** and enjoy a multitude of benefits including: +- ❌ Production-ready node images +- ❌ Secured kubeadm configuration +- ❌ Incorporation of cluster add-ons, such as CNI (e.g. cilium), metrics-server, konnectivity-service, etc. +- ❌ Testing & update procedures of Kubernetes version, configuration +- ❌ Backup procedures +- ❌ Monitoring strategies +- ❌ Alerting systems +- ❌ Identity and Access Management (IAM) -- Consistent, regular updates that allow you to access the latest features. -- Reduction in workload for your DevOps team as Syself takes over the responsibility of maintaining the system, ensuring seamless updates, and creating new clusters quickly and efficiently. -- Expertise in dealing with the Cluster API and Hetzner, enabling quicker resolution of issues. +If you don't have a dedicated team for managing Kubernetes, you can use [Syself Autopilot](https://syself.com) and enjoy a wide range of benefits, including: +- ✅ Consistent, regular updates that provide you with the latest features and improvements. +- ✅ Highly optimized defaults, reducing costs by up to 80% without performance impacts. +- ✅ Production-ready clusters working out of the box. +- ✅ Specialized expertise in Cluster API and Hetzner for quick issue resolution and 24/7 support. -## :rocket: Get Started +## 🚀 Get Started -If you're looking to jump straight into it, go ahead: +Ready to dive in? Here are some resources to get you started: -* [**Cluster API Provider Hetzner 15 Minute Tutorial**](docs/topics/quickstart.md): Set up a bootstrap cluster using Kind and deploy a Kubernetes cluster on Hetzner -* [**Develop and test Kubernetes clusters with Tilt**](docs/developers/development.md): Start using Tilt for rapid testing of various cluster flavors, like with/without a private network or bare metal. -* [**Develop and test own node-images**](docs/topics/node-image.md): How to use your own machine images for production systems. +- [**Cluster API Provider Hetzner 15 Minute Tutorial**](docs/topics/quickstart.md): Set up a bootstrap cluster using Kind and deploy a Kubernetes cluster on Hetzner. +- [**Develop and test Kubernetes clusters with Tilt**](docs/developers/development.md): Start using Tilt for rapid testing of various cluster flavors, like with/without a private network or bare metal. +- [**Develop and test your own node-images**](docs/topics/node-image.md): Learn how to use your own machine images for production systems. -In addition to the pure creation and operation of Kubernetes clusters, this provider can also validate and approve certificate signing requests. This increases security as the kubelets of the nodes can be operated with signed certificates. This enables the metrics-server to run securely. [Click here](docs/topics/advanced-caph.md#csr-controller) to read more about the CSR controller. +In addition to the pure creation and operation of Kubernetes clusters, this provider can also validate and approve certificate signing requests. This increases security as the kubelets of the nodes can be operated with signed certificates, and enables the metrics-server to run securely. [Click here](docs/topics/advanced-caph.md#csr-controller) to read more about the CSR controller. -## :fire: Compatibility with Cluster API and Kubernetes Versions +## 🖇️ Compatibility with Cluster API and Kubernetes Versions This provider's versions are compatible with the following versions of Cluster API: -| | Cluster API `v1beta1` (`v1.5.x`) | Cluster API `v1beta1` (`v1.6.x`) | -|---|---|---| -|Hetzner Provider `v1.0.0-beta.26` | ✓ | ☓ | -|Hetzner Provider `v1.0.0-beta.27` | ☓ | ✓ | +| | Cluster API `v1beta1` (`v1.5.x`) | Cluster API `v1beta1` (`v1.6.x`) | +| --------------------------------- | -------------------------------- | -------------------------------- | +| Hetzner Provider `v1.0.0-beta.26` | ✅ | ❌ | +| Hetzner Provider `v1.0.0-beta.27` | ❌ | ✅ | This provider's versions can install and manage the following versions of Kubernetes: -| | Hetzner Provider `v1.0.x` | -|---|---| -| Kubernetes 1.23.x | ✓ | -| Kubernetes 1.24.x | ✓ | -| Kubernetes 1.25.x | ✓ | -| Kubernetes 1.26.x | ✓ | -| Kubernetes 1.27.x | ✓ | -| Kubernetes 1.28.x | ✓ | +| | Hetzner Provider `v1.0.x` | +| ----------------- | ------------------------- | +| Kubernetes 1.23.x | ✅ | +| Kubernetes 1.24.x | ✅ | +| Kubernetes 1.25.x | ✅ | +| Kubernetes 1.26.x | ✅ | +| Kubernetes 1.27.x | ✅ | +| Kubernetes 1.28.x | ✅ | +| Kubernetes 1.29.x | ✅ | +| Kubernetes 1.30.x | ✅ | Test status: -* `✓` tested -* `+` should work, but we weren't able to test it +- ✅ tested +- ❔ should work, but we weren't able to test it - -Each version of Cluster API for Hetzner will attempt to support at least two Kubernetes versions. +Each version of Cluster API for Hetzner will attempt to support at least two Kubernetes versions. **NOTE:** As the versioning for this project is tied to the versioning of Cluster API, future modifications to this policy may be made to more closely align with other providers in the Cluster API ecosystem. --- +## 💿 Operating System Images +> [!NOTE] +> Cluster API Provider Hetzner relies on a few prerequisites that must be already installed in the operating system images, such as a container runtime, kubelet, and Kubeadm. +> +> Reference images are available in kubernetes-sigs/image-builder and [templates/node-image](templates/node-image). +> +> If pre-installation of these prerequisites isn't possible, [custom scripts can be deployed](docs/topics/node-image through the Kubeadm config.md). -## :white_square_button: Operating System Images +--- -**Note**: Cluster API Provider Hetzner relies on a few prerequisites, which have to be already installed in the used operating system images, e.g. a container runtime, kubelet, and Kubeadm. Reference images can be found in kubernetes-sigs/image-builder and [templates/node-image](templates/node-image). If it isn't possible to pre-install these prerequisites in the image, you can always deploy and execute some custom scripts through the Kubeadm config. [Read more...](docs/topics/node-image.md) +## 📖 Documentation ---- -## :book: Documentation +Documentation can be found in the `/docs` directory. [Here](docs/README.md) is an overview of our documentation. -Docs can be found in the `/docs` directory. [Here](docs/README.md) you can find an overview of our documentation. +## 👥 Getting Involved and Contributing -## :busts_in_silhouette: Getting Involved and Contributing +We, maintainers and the community, welcome any contributions to Cluster API Provider Hetzner. For suggestions, contributions, and assistance, contact the maintainers anytime. -Are you interested in contributing to Cluster API Provider Hetzner? We, the -maintainers and community, would love your suggestions, contributions, and help! -If you want to learn more about how to get involved, you can contact the maintainers at any time. +To set up your environment, refer to the [development guide](docs/developers/development.md). -To set up your environment, try out the [development guide](docs/developers/development.md). +For new contributors, check out issues tagged as [`good first issue`][good_first_issue]. These are typically smaller in scope and great for getting familiar with the codebase. -In the interest of getting more new people involved, we tag issues with -[`good first issue`][good_first_issue]. -These are typically issues that have a smaller scope but are good for getting acquainted with the codebase. +We encourage **all** active community participants to act as if they were maintainers, even without "official" write permissions. This is a community effort serving the Kubernetes community. -We also encourage ALL active community participants to act as if they are -maintainers, even if you don't have "official" write permissions. This is a -community effort, we are here to serve the Kubernetes community. If you have an -active interest and you want to get involved, you have real power! Don't assume -that the only people who can get things done around here are the "maintainers". +If you have an active interest and you want to get involved, you have real power! Don't assume that the only people who can get things done around here are the "maintainers". We would also love to add more "official" maintainers, so show us what you can do! -## :dizzy: Code of Conduct +## ⚖️ Code of Conduct Participation in the Kubernetes community is governed by the [Kubernetes Code of Conduct](code-of-conduct.md). -## :shipit: Github Issues +## :shipit: GitHub Issues -### :bug: Bugs +### 🐛 Bugs If you think you have found a bug, please follow these steps: - Take some time to give due diligence to the issue tracker. Your issue might be a duplicate. -- Get the logs from the cluster controllers. Paste this into your issue. +- Get the logs from the cluster controllers and paste them in your issue. - Open a [bug report][bug_report]. - Give it a meaningful title to help others who might be searching for your issue in the future. -- If you have questions, reach out to the Cluster API community on the [Kubernetes Slack channel][slack_info]. +- For questions, reach out to the Cluster API community on the [Kubernetes Slack channel][slack_info]. -### :star: Tracking New Features +### 🌟 Tracking New Features We also use the issue tracker to track features. If you have an idea for a feature or think that you can help Cluster API Provider Hetzner become even more awesome, then follow these steps: - Open a [feature request][feature_request]. - Give it a meaningful title to help others who might be searching for your issue in the future. -- Define clearly the use case. Use concrete examples, e.g. "I type `this` and - Cluster API Provider Hetzner does `that`". -- Some of our larger features will require some design. If you would like to - include a technical design for your feature, please include it in the issue. -- After the new feature is well understood and the design is agreed upon, we can - start coding the feature. We would love it if you code it. So please open - up a **WIP** *(work in progress)* pull request. Happy coding! +- Clearly define the use case with concrete examples, e.g. "I type `this` and Cluster API Provider Hetzner does `that`". +- Some of our larger features will require some design. If you would like to include a technical design for your feature, please include it in the issue. +- Once the new feature is well understood and the design is agreed upon, we can start coding. We would love for you to take part in this process, so we encourage you to take the lead and start coding it yourself. Please open a **WIP** _(work in progress)_ pull request. Happy coding! + +## 📃 License + +Published under the [Apache](https://github.com/syself/cluster-api-provider-hetzner/blob/main/LICENSE) license. diff --git a/docs/pics/caph.png b/docs/pics/caph.png deleted file mode 100644 index 86a28afa8..000000000 Binary files a/docs/pics/caph.png and /dev/null differ