From 81b4bb0717d97e3b236aa5aec211e548685088ea Mon Sep 17 00:00:00 2001
From: Ciprian Hacman
Date: Mon, 19 Sep 2022 09:57:24 +0300
Subject: [PATCH] hetzner: Move out of alpha and drop feature flag
---
README-ES.md | 221 --------------------
README.md | 4 +-
cmd/kops/create_cluster_integration_test.go | 6 -
cmd/kops/integration_test.go | 6 -
docs/cli/kops_create_cluster.md | 2 +-
docs/getting_started/digitalocean.md | 5 +-
docs/getting_started/gce.md | 2 +-
docs/getting_started/hetzner.md | 17 +-
docs/getting_started/openstack.md | 2 +-
docs/index.md | 2 +-
mkdocs.yml | 6 +-
pkg/clouds/supported.go | 4 +-
pkg/featureflag/featureflag.go | 2 -
upup/pkg/fi/cloudup/apply_cluster.go | 4 +-
14 files changed, 25 insertions(+), 258 deletions(-)
delete mode 100644 README-ES.md
diff --git a/README-ES.md b/README-ES.md
deleted file mode 100644
index c083c5d1ec..0000000000
--- a/README-ES.md
+++ /dev/null
@@ -1,221 +0,0 @@
-# kOps - Operaciones con Kubernetes
-
-[](https://goreportcard.com/report/k8s.io/kops) [![GoDoc Widget]][GoDoc]
-
-[GoDoc]: https://pkg.go.dev/k8s.io/kops
-[GoDoc Widget]: https://godoc.org/k8s.io/kops?status.svg
-
-
-La forma más fácil de poner en marcha un cluster Kubernetes en producción.
-
-
-## ¿Qué es kOps?
-
-Queremos pensar que es algo como `kubectl` para clusters.
-
-`kops` ayuda a crear, destruir, mejorar y mantener un grado de producción, altamente
-disponible, desde las líneas de commando de Kubernetes clusters. AWS (Amazon Web Services)
-está oficialmente soportado actualmente, con GCE en soporte beta , y VMware vSphere
-en alpha, y otras plataformas planeadas.
-
-
-## ¿Puedo verlo en acción?
-
-
-
-
-
-
-
-
-## Lanzando un anfitrión de Kubernetes cluster en AWS o GCE
-
-Para reproducir exactamente el demo anterior, visualizalo en el [tutorial](/docs/getting_started/aws.md) para
-lanzar un anfitrión de Kubernetes cluster en AWS.
-
-Para instalar un Kubernetes cluster en GCE por fabor siga esta [guide](/docs/getting_started/gce.md).
-
-
-## Caracteristicas
-
-* Automatiza el aprovisionamiento de Kubernetes clusters en [AWS](/docs/getting_started/aws.md) y [GCE](/docs/getting_started/gce.md)
-* Un Despliegue Altamente Disponible (HA) Kubernetes Masters
-* Construye en un modelo de estado sincronizado para **dry-runs** y **idempotency** automático
-* Capacidad de generar [Terraform](/docs/terraform.md)
-* Soporta un Kubernetes personalizado [add-ons](/docs/operations/addons.md)
-* Línea de commando [autocompletion](/docs/cli/kops_completion.md)
-* YAML Archivo de Manifiesto Basado en API [Configuration](/docs/manifests_and_customizing_via_api.md)
-* [Templating](/docs/cluster_template.md) y ejecutar modos de simulacro para crear
- Manifiestos
-* Escoge de ocho proveedores CNI diferentes [Networking](/docs/networking.md)
-* Capacidad para añadir contenedores, como enganches, y archivos a nodos vía [cluster manifest](/docs/cluster_spec.md)
-
-
-## Documentación
-
-La documentación está en el directorio `/docs`, [and the index is here.](docs/README.md)
-
-
-## Compatibilidad de Kubernetes con el Lanzamiento
-
-
-### Soporte de la Versión Kubernetes
-
-kOps está destinado a ser compatible con versiones anteriores. Siempre es recomendado utilizar la
-última versión de kOps con cualquier versión de Kubernetes que estés utilizando. Siempre
-utilize la última versión de kOps.
-
-Una excepción, en lo que respecta a la compatibilidad, kOps soporta el equivalente a
-un número de versión menor de Kubernetes. Una versión menor es el segundo dígito en el
-número de versión. la versión de kOps 1.8.0 tiene una versión menor de 8. La numeración
-sigue la especificación de versión semántica, MAJOR.MINOR.PATCH.
-
-Por ejemplo kOps, 1.8.0 no soporta Kubernetes 1.9.2, pero kOps 1.9.0
-soporta Kubernetes 1.9.2 y versiones anteriores de Kubernetes. Sólo cuando coincide la versión
-menor de kOps, La versión menor de kubernetes hace que kOps soporte oficialmente
-el lanzamiento de kubernetes. kOps no impide que un usuario instale versiones
-no coincidentes de K8, pero las versiones de Kubernetes siempre requieren kOps para instalar
-versiones de componentes como docker, probado contra la versión
-particular de Kubernetes.
-
-#### Compatibilidad Matrix
-
-| kOps version | k8s 1.19.x | k8s 1.20.x | k8s 1.21.x | k8s 1.22.x | k8s 1.23.x |
-|---------------|------------|------------|------------|------------|------------|
-| 1.23.0 | ✔ | ✔ | ✔ | ✔ | ✔ |
-| 1.22.x | ✔ | ✔ | ✔ | ✔ | ⚫ |
-| ~~1.21.x~~ | ✔ | ✔ | ✔ | ⚫ | ⚫ |
-| ~~1.20.x~~ | ✔ | ✔ | ⚫ | ⚫ | ⚫ |
-| ~~1.19.x~~ | ✔ | ⚫ | ⚫ | ⚫ | ⚫ |
-
-Utilice la última versión de kOps para todas las versiones de Kubernetes, con la advertencia de que las versiones más altas de Kubernetes no cuentan con el respaldo _oficial_ de kOps.
-
-### Cronograma de Lanzamiento de kOps
-
-Este proyecto no sigue el cronograma de lanzamiento de Kubernetes. `kops` tiene como objetivo
-proporcionar una experiencia de instalación confiable para Kubernetes, y, por lo general, se lanza
-aproximadamente un mes después de la publicación correspondiente de Kubernetes. Esta vez, permite que el proyecto Kubernetes resuelva los problemas que presenta la nueva versión y garantiza que podamos admitir las funciones más recientes. kOps lanzará pre-lanzamientos alfa y beta para las personas que están ansiosas por probar la última versión de Kubernetes.
-Utilice únicamente lanzamientos pre-GA kOps en ambientes que puedan tolerar las peculiaridades de las nuevas versiones, e informe cualquier problema que surja.
-
-
-## Instalación
-
-### Requisito previo
-
-`kubectl` es requerido, visualize [here](http://kubernetes.io/docs/user-guide/prereqs/).
-
-
-### OSX desde Homebrew
-
-```console
-brew update && brew install kops
-```
-
-El binario `kops` también está disponible a través de nuestro [releases](https://github.com/kubernetes/kops/releases/latest).
-
-
-### Linux
-
-```console
-curl -LO https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64
-chmod +x kops-linux-amd64
-sudo mv kops-linux-amd64 /usr/local/bin/kops
-```
-
-
-## Historial de Versiones
-
-visualize el [releases](https://github.com/kubernetes/kops/releases) para más
-información sobre cambios entre lanzamientos.
-
-
-## Involucrarse y Contribuir
-
-¿Estás interesado en contribuir con kOps? Nosotros, los mantenedores y la comunidad,
-nos encantaría sus sugerencias, contribuciones y ayuda.
-Tenemos una guía de inicio rápido en [adding a feature](/docs/development/adding_a_feature.md). Además, se
-puede contactar a los mantenedores en cualquier momento para obtener más información sobre
-cómo involucrarse.
-Con el interés de involucrar a más personas con kOps, estamos comenzando a
-etiquetar los problemas con `good-starter-issue`. Por lo general, se trata de problemas que tienen
-un alcance menor, pero que son buenas maneras de familiarizarse con la base de código.
-
-También alentamos a TODOS los participantes activos de la comunidad a actuar como si fueran
-mantenedores, incluso si no tiene permisos de escritura "oficiales".Este es un
-esfuerzo de la comunidad, estamos aquí para servir a la comunidad de Kubernetes.
-Si tienes un interés activo y quieres involucrarte, ¡tienes verdadero poder!
-No asuma que las únicas personas que pueden hacer cosas aquí son los "mantenedores".
-
-También nos gustaría agregar más mantenedores "oficiales", así que
-¡muéstranos lo que puedes hacer!
-
-
-Lo que esto significa:
-
-__Issues__
-* Ayude a leer y clasifique los problemas, ayúdelo cuando sea posible.
-* Señale los problemas que son duplicados, desactualizados, etc.
- - Incluso si no tiene permisos para etiquetar, tome nota y etiquete mantenedores (`/close`,`/dupe #127`).
-
-__Pull Requests__
-* Lee y revisa el código. Deja comentarios, preguntas y críticas (`/lgtm` ).
-* Descargue, compile y ejecute el código y asegúrese de que las pruebas pasen (make test).
- - También verifique que la nueva característica parezca cuerda, siga los mejores patrones arquitectónicos e incluya pruebas.
-
-Este repositorio usa los bots de Kubernetes. Hay una lista completa de los commandos [aqui](https://go.k8s.io/bot-commands).
-
-
-## Horas de Oficina
-
-Los mantenedores de kOps reservaron una hora cada dos semanas para **horas de oficina** públicas. Los horarios de oficina se alojan en un [zoom video chat](https://zoom.us/j/97072789944?pwd=VVlUR3dhN2h5TEFQZHZTVVd4SnJUdz09) los viernes en [5 pm UTC/12 noon ET/9 am US Pacific](http://www.worldtimebuddy.com/?pl=1&lid=100,5,8,12), en semanas impares numeradas. Nos esforzamos por conocer y ayudar a los programadores, ya sea trabajando en `kops` o interesados en conocer más sobre el proyecto.
-
-
-### Temas Abiertos en Horas de Oficina
-
-Incluye pero no limitado a:
-
-- Ayuda y guía para aquellos que asisten, que están interesados en contribuir.
-- Discuta el estado actual del proyecto kOps, incluidas las versiones.
-- Diseña estrategias para mover `kops` hacia adelante.
-- Colabora sobre PRs abiertos y próximos.
-- Presenta demos.
-
-Esta vez se enfoca en los programadores, aunque nunca rechazaremos a un participante cortés. Pase por alto, incluso si nunca ha instalado kOps.
-
-Le recomendamos que se comunique **de antemano** si planea asistir. Puedes unirte a cualquier sesión y no dudes en agregar un elemento a la [agenda](https://docs.google.com/document/d/12QkyL0FkNbWPcLFxxRGSPt_tNPBHbmni3YLY-lHny7E/edit) donde rastreamos notas en el horario de oficina.
-
-Los horarios de oficina están alojados en una [Zoom](https://zoom.us/j/97072789944?pwd=VVlUR3dhN2h5TEFQZHZTVVd4SnJUdz09) video conferencia, celebrada los viernes a las [5 pm UTC/12 noon ET/9 am US Pacific](http://www.worldtimebuddy.com/?pl=1&lid=100,5,8,12) cada otra semana impare numerada.
-
-Puede verificar su número de semana utilizando:
-
-```bash
-date +%V
-```
-
-Los mantenedores y otros miembros de la comunidad están generalmente disponibles en [kubernetes slack](https://github.com/kubernetes/community/blob/master/communication.md#social-media) en [#kops](https://kubernetes.slack.com/messages/kops/), ¡así que ven y conversa con nosotros sobre cómo los kOps pueden ser mejores para ti!
-
-
-## GitHub Issues
-
-
-### Errores
-
-Si cree que ha encontrado un error, siga las instrucciones a continuación.
-
-- Dedique una pequeña cantidad de tiempo a prestar la debida diligencia al rastreador de problemas. Tu problema puede ser un duplicado.
-- Establezca la `-v 10` línea de commando y guarde la salida de los registros. Por favor pegue esto en su issue.
-- Note the version of kOps you are running (from `kops version`), and the command line options you are using.
-- Abra un [new issue](https://github.com/kubernetes/kops/issues/new).
-- Recuerde que los usuarios pueden estar buscando su issue en el futuro, por lo que debe darle un título significativo para ayudar a otros.
-- No dude en comunicarse con la comunidad de kOps en [kubernetes slack](https://github.com/kubernetes/community/blob/master/communication.md#social-media).
-
-
-### Caracteristicas
-
-También usamos el rastreador de problemas para rastrear características. Si tiene una idea para una función, o cree que puede ayudar a que los kOps se vuelvan aún más impresionantes, siga los pasos a continuación.
-
-- Abra un [new issue](https://github.com/kubernetes/kops/issues/new).
-- Recuerde que los usuarios pueden estar buscando su issue en el futuro, por lo que debe darle un título significativo para ayudar a otros.
-- Defina claramente el caso de uso, usando ejemplos concretos. P EJ: Escribo `esto` y kOps hace `eso`.
-- Algunas de nuestras características más grandes requerirán algún diseño. Si desea incluir un diseño técnico para su función, inclúyalo en el problema.
-- Después de que la nueva característica sea bien comprendida, y el diseño acordado, podemos comenzar a codificar la característica. Nos encantaría que lo codificaras. Por lo tanto, abra una **WIP** *(trabajo en progreso)* solicitud de extracción, y que tenga una feliz codificación.
diff --git a/README.md b/README.md
index 7b02262856..44d6f156b2 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ We like to think of it as `kubectl` for clusters.
`kops` will not only help you create, destroy, upgrade and maintain production-grade, highly
available, Kubernetes cluster, but it will also provision the necessary cloud infrastructure.
-AWS (Amazon Web Services) is currently officially supported, with DigitalOcean, GCE, and OpenStack in beta support, and Azure and AliCloud in alpha.
+AWS (Amazon Web Services) and GCE (Google Cloud Platform) are currently officially supported, with DigitalOcean, Hetzner and OpenStack in beta support, and Azure in alpha.
## Can I see it in action?
@@ -26,7 +26,7 @@ AWS (Amazon Web Services) is currently officially supported, with DigitalOcean,
-## Installing and launching a Kubernetes cluster hosted on AWS, GCE, DigitalOcean or OpenStack
+## Installing and launching a Kubernetes cluster hosted on AWS, GCE, DigitalOcean, Hetzner, OpenStack, Azure
See [Getting Started](https://kops.sigs.k8s.io/getting_started/install/)
diff --git a/cmd/kops/create_cluster_integration_test.go b/cmd/kops/create_cluster_integration_test.go
index 799f918bd4..16d3fbcfb8 100644
--- a/cmd/kops/create_cluster_integration_test.go
+++ b/cmd/kops/create_cluster_integration_test.go
@@ -58,12 +58,6 @@ func TestCreateClusterMinimal(t *testing.T) {
// TestCreateClusterHetzner runs kops create cluster minimal.k8s.local --zones fsn1
func TestCreateClusterHetzner(t *testing.T) {
t.Setenv("HCLOUD_TOKEN", "REDACTED")
- featureflag.ParseFlags("+Hetzner")
- unsetFeatureFlags := func() {
- featureflag.ParseFlags("-Hetzner")
- }
- defer unsetFeatureFlags()
-
runCreateClusterIntegrationTest(t, "../../tests/integration/create_cluster/ha_hetzner", "v1alpha2")
runCreateClusterIntegrationTest(t, "../../tests/integration/create_cluster/minimal_hetzner", "v1alpha2")
}
diff --git a/cmd/kops/integration_test.go b/cmd/kops/integration_test.go
index 51ea930e2e..4d30f79701 100644
--- a/cmd/kops/integration_test.go
+++ b/cmd/kops/integration_test.go
@@ -276,12 +276,6 @@ func TestMinimal_v1_26(t *testing.T) {
// TestHetzner runs the test on a minimum configuration
func TestHetzner(t *testing.T) {
t.Setenv("HCLOUD_TOKEN", "REDACTED")
- featureflag.ParseFlags("+Hetzner")
- unsetFeatureFlags := func() {
- featureflag.ParseFlags("-Hetzner")
- }
- defer unsetFeatureFlags()
-
newIntegrationTest("minimal.k8s.local", "minimal_hetzner").
runTestTerraformHetzner(t)
}
diff --git a/docs/cli/kops_create_cluster.md b/docs/cli/kops_create_cluster.md
index 7c2d97f558..f8efb31008 100644
--- a/docs/cli/kops_create_cluster.md
+++ b/docs/cli/kops_create_cluster.md
@@ -73,7 +73,7 @@ kops create cluster [CLUSTER] [flags]
--authorization string Authorization mode: AlwaysAllow or RBAC (default "RBAC")
--bastion Enable a bastion instance group. Only applies to private topology.
--channel string Channel for default versions and configuration to use (default "stable")
- --cloud string Cloud provider to use - aws, digitalocean, gce, openstack
+ --cloud string Cloud provider to use - aws, digitalocean, gce, hetzner, openstack
--cloud-labels string A list of key/value pairs used to tag all instance groups (for example "Owner=John Doe,Team=Some Team").
--container-runtime string Container runtime to use: containerd, docker
--disable-subnet-tags Disable automatic subnet tagging
diff --git a/docs/getting_started/digitalocean.md b/docs/getting_started/digitalocean.md
index d8ee3cf059..f16ec47993 100644
--- a/docs/getting_started/digitalocean.md
+++ b/docs/getting_started/digitalocean.md
@@ -1,6 +1,7 @@
# Getting Started with kOps on DigitalOcean
-**WARNING**: digitalocean support on kOps promoted to **beta** currently meaning it is subject to change, so please use with caution.
+**WARNING**: digitalocean support on kOps promoted to **beta**, which means it is in good shape and could be used for production.
+However, it is not as rigorously tested as the stable cloud providers and there are some features that might be missing.
## Requirements
@@ -94,6 +95,6 @@ kOps for DigitalOcean currently does not support these features:
* kops terraform support for DO
-# Next steps
+## Next steps
Now that you have a working kOps cluster, read through the [recommendations for production setups guide](production.md) to learn more about how to configure kOps for production workloads.
\ No newline at end of file
diff --git a/docs/getting_started/gce.md b/docs/getting_started/gce.md
index 1d5748a9a8..6978eae6e3 100644
--- a/docs/getting_started/gce.md
+++ b/docs/getting_started/gce.md
@@ -185,6 +185,6 @@ the command. When run without `--yes` it shows a preview of the objects it will
After you've double-checked you're deleting exactly what you want to delete, run `kops delete cluster simple.k8s.local --yes`.
-# Next steps
+## Next steps
Now that you have a working kOps cluster, read through the [recommendations for production setups guide](production.md) to learn more about how to configure kOps for production workloads.
\ No newline at end of file
diff --git a/docs/getting_started/hetzner.md b/docs/getting_started/hetzner.md
index 6bbab2044e..587dedf54a 100644
--- a/docs/getting_started/hetzner.md
+++ b/docs/getting_started/hetzner.md
@@ -1,7 +1,7 @@
# Getting Started with kOps on Hetzner Cloud
-**WARNING**: Hetzner Cloud support on kOps is currently in **alpha**, meaning it is subject to change, so please use with caution.
-The original issue ticket is [#8983](https://github.com/kubernetes/kops/issues/8983).
+**WARNING**: Hetzner Cloud support on kOps is currently in **beta**, which means it is in good shape and could be used for production.
+However, it is not as rigorously tested as the stable cloud providers and there are some features that might be missing.
## Requirements
* kOps version >= 1.24
@@ -15,7 +15,6 @@ The original issue ticket is [#8983](https://github.com/kubernetes/kops/issues/8
It is important to set the following environment variables:
```bash
-export KOPS_FEATURE_FLAGS=Hetzner
export HCLOUD_TOKEN=
export S3_ENDPOINT=
export S3_ACCESS_KEY_ID=
@@ -46,10 +45,17 @@ kops create cluster --name=my-cluster.example.k8s.local \
--node-size cpx31
kops update cluster --name=my-cluster.example.k8s.local --yes
+# update a cluster
+kops update cluster --name=my-cluster.example.k8s.local
+kops update cluster --name=my-cluster.example.k8s.local --yes
+kops rolling-update cluster --name=my-cluster.example.k8s.local
+kops rolling-update cluster --name=my-cluster.example.k8s.local --yes
+
# validate a cluster
kops validate cluster --name=my-cluster.example.k8s.local
# delete a cluster
+kops delete cluster --name=my-cluster.example.k8s.local
kops delete cluster --name=my-cluster.example.k8s.local --yes
# export kubecfg
@@ -63,10 +69,9 @@ kops delete cluster --name=my-cluster.example.k8s.local --yes
kOps for Hetzner Cloud currently does not support the following features:
-* Multiple SSH keys
* Autoscaling using [Cluster Autoscaler](https://github.com/hetznercloud/autoscaler)
-* [Terraform](https://github.com/hetznercloud/terraform-provider-hcloud) support
+* Terraform support using [terraform-provider-hcloud](https://github.com/hetznercloud/terraform-provider-hcloud)
-# Next steps
+## Next steps
Now that you have a working kOps cluster, read through the recommendations for [production setups guide](production.md) to learn more about how to configure kOps for production workloads.
diff --git a/docs/getting_started/openstack.md b/docs/getting_started/openstack.md
index bc10eb0018..77966f3a4a 100644
--- a/docs/getting_started/openstack.md
+++ b/docs/getting_started/openstack.md
@@ -218,6 +218,6 @@ spec:
insecureSkipVerify: true
```
-# Next steps
+## Next steps
Now that you have a working kOps cluster, read through the [recommendations for production setups guide](production.md) to learn more about how to configure kOps for production workloads.
diff --git a/docs/index.md b/docs/index.md
index ba484ca5e9..15bccccf95 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -18,7 +18,7 @@ We like to think of it as `kubectl` for clusters.
`kops` will not only help you create, destroy, upgrade and maintain production-grade, highly
available, Kubernetes cluster, but it will also provision the necessary cloud infrastructure.
-[AWS](getting_started/aws.md) (Amazon Web Services) is currently officially supported, with [DigitalOcean](getting_started/digitalocean.md), [GCE](getting_started/gce.md) and [OpenStack](getting_started/openstack.md) in beta support, and [Azure](getting_started/azure.md) in alpha.
+[AWS](getting_started/aws.md) (Amazon Web Services) and [GCE](getting_started/gce.md) (Google Cloud Platform) are currently officially supported, with [DigitalOcean](getting_started/digitalocean.md), [Hetzner](getting_started/hetzner.md) and [OpenStack](getting_started/openstack.md) in beta support, and [Azure](getting_started/azure.md) in alpha.
## Can I see it in action?
diff --git a/mkdocs.yml b/mkdocs.yml
index 841c99e2f5..c8b0ef9c29 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -38,11 +38,11 @@ nav:
- Getting Started:
- Installing: "getting_started/install.md"
- Deploying to AWS: "getting_started/aws.md"
- - Deploying to GCE - Alpha: "getting_started/gce.md"
- - Deploying to OpenStack - Beta: "getting_started/openstack.md"
+ - Deploying to GCE: "getting_started/gce.md"
- Deploying to Digital Ocean - Beta: "getting_started/digitalocean.md"
+ - Deploying to Hetzner - Beta: "getting_started/hetzner.md"
+ - Deploying to OpenStack - Beta: "getting_started/openstack.md"
- Deploying to Azure - Alpha: "getting_started/azure.md"
- - Deploying to Hetzner - Alpha: "getting_started/hetzner.md"
- Deploying to Spot Ocean - Alpha: "getting_started/spot-ocean.md"
- kOps Commands: "getting_started/commands.md"
- kOps Arguments: "getting_started/arguments.md"
diff --git a/pkg/clouds/supported.go b/pkg/clouds/supported.go
index ac03f5d7cb..29b1c15692 100644
--- a/pkg/clouds/supported.go
+++ b/pkg/clouds/supported.go
@@ -26,14 +26,12 @@ func SupportedClouds() []kops.CloudProviderID {
kops.CloudProviderAWS,
kops.CloudProviderDO,
kops.CloudProviderGCE,
+ kops.CloudProviderHetzner,
kops.CloudProviderOpenstack,
}
if featureflag.Azure.Enabled() {
clouds = append(clouds, kops.CloudProviderAzure)
}
- if featureflag.Hetzner.Enabled() {
- clouds = append(clouds, kops.CloudProviderHetzner)
- }
return clouds
}
diff --git a/pkg/featureflag/featureflag.go b/pkg/featureflag/featureflag.go
index 691508f4e4..6405af1365 100644
--- a/pkg/featureflag/featureflag.go
+++ b/pkg/featureflag/featureflag.go
@@ -90,8 +90,6 @@ var (
Karpenter = new("Karpenter", Bool(false))
// ImageDigest remaps all manifests with image digests
ImageDigest = new("ImageDigest", Bool(true))
- // Hetzner toggles the Hetzner Cloud support.
- Hetzner = new("Hetzner", Bool(false))
)
// FeatureFlag defines a feature flag
diff --git a/upup/pkg/fi/cloudup/apply_cluster.go b/upup/pkg/fi/cloudup/apply_cluster.go
index fd7cada9fe..f4f950567f 100644
--- a/upup/pkg/fi/cloudup/apply_cluster.go
+++ b/upup/pkg/fi/cloudup/apply_cluster.go
@@ -427,9 +427,7 @@ func (c *ApplyClusterCmd) Run(ctx context.Context) error {
case kops.CloudProviderHetzner:
{
- if !featureflag.Hetzner.Enabled() {
- return fmt.Errorf("Hetzner Cloud support is currently alpha, and is feature-gated. export KOPS_FEATURE_FLAGS=Hetzner")
- }
+ // Hetzner Cloud support is currently in beta
}
case kops.CloudProviderDO: