{"id":23520114,"url":"https://github.com/ventx/terraform-stackit-k8s","last_synced_at":"2026-01-24T12:08:49.090Z","repository":{"id":202888403,"uuid":"704942425","full_name":"ventx/terraform-stackit-k8s","owner":"ventx","description":"Terraform module to deploy STACKIT Kubernetes (SKE) Cluster with optional Argus monitoring","archived":false,"fork":false,"pushed_at":"2023-10-22T10:38:28.000Z","size":9,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-02-16T23:14:21.968Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ventx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-10-14T15:20:10.000Z","updated_at":"2023-10-14T15:22:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"4d432015-436b-4b1d-ad13-8b6dafdc9099","html_url":"https://github.com/ventx/terraform-stackit-k8s","commit_stats":null,"previous_names":["ventx/terraform-stackit-k8s"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ventx/terraform-stackit-k8s","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ventx%2Fterraform-stackit-k8s","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ventx%2Fterraform-stackit-k8s/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ventx%2Fterraform-stackit-k8s/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ventx%2Fterraform-stackit-k8s/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ventx","download_url":"https://codeload.github.com/ventx/terraform-stackit-k8s/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ventx%2Fterraform-stackit-k8s/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28727384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-24T10:24:43.181Z","status":"ssl_error","status_checked_at":"2026-01-24T10:24:36.112Z","response_time":89,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-12-25T16:12:03.302Z","updated_at":"2026-01-24T12:08:49.071Z","avatar_url":"https://github.com/ventx.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Terraform STACKIT Kubernetes\n\nTerraform module to create a K8s (SKE) Cluster with monitoring (Argus) for STACKIT cloud platform.\n\n## Consulting\n\nYou need support with STACKIT infrastructure? We are an [official professional service partner of STACKIT](https://www.stackit.de/de/partner/partnersteckbrief-ventx/) !\n\nPlease don't hesitate to contact us at: [stackit@ventx.de](mailto:stackit@ventx.de)\n\n---\n\nSie benötigen Unterstützung bei Ihrer STACKIT Infrastruktur? Wir sind [offizieller Professional Service Partner von STACKIT](https://www.stackit.de/de/partner/partnersteckbrief-ventx/) !\n\nKontaktieren Sie uns via: [stackit@ventx.de](mailto:stackit@ventx.de)\n\n## Overview\nThis Terraform project provisions a Kubernetes cluster on STACKIT, including optional Argus monitoring and ACL controls.\n\n## Prerequisites\n\n* [Terraform v1.x.x](https://www.terraform.io)\n* [STACKIT Account](https://www.stackit.de)\n\n## Getting Started\n\nClone the repository:\n`git clone https://github.com/ventx/terraform-stackit-k8s`\n\nNavigate into the directory:\n`cd terraform-stackit-k8s`\n\nSet your Stackit Service Account Token as EnvVars:\n\n\n```bash\n export STACKIT_SERVICE_ACCOUNT_EMAIL=xxx\n export STACKIT_SERVICE_ACCOUNT_TOKEN=xxx\n```\n\nCreate `terraform.tfvars` to configure Node Pools (required) and other configs (optional):\n\n```hcl\n# REQUIRED: ID of your STACKIT project\nproject_id = \"12345678-1234-1234-1234-1234567890ab\"\n\n# REQUIRED: Configure Node Pool(s)\nnode_pools = [\n  {\n    name         = \"np-example\"\n    machine_type = \"c1.2\"\n    minimum = \"2\"\n    maximum = \"3\"\n    zones   = [\"eu01-1\", \"eu01-2\", \"eu01-3\"]\n  }\n]\n\n# Enables cluster monitoring with STACKIT Argus and configure ACL to whitelist CIDRs for cluster access\nextensions = {\n  acl = {\n    enabled       = false\n    allowed_cidrs = []\n  },\n  argus = {\n    enabled = true\n  }\n}\n\n# Automatically shutdown cluster at 18:00 and start at 08:00 to save on costs\nhibernations = [{\n  start    = \"0 8 * * *\"\n  end      = \"0 18 * * *\"\n  timezone = \"Europe/Berlin\"\n}]\n```\n\nInitialize Terraform:\n`terraform init`\n\nCreate Terraform plan and verify the configuration:\n`terraform plan`\n\nApply the Terraform configuration:\n`terraform apply`\n\n## Maintenance \u0026 Monitoring\nScheduled maintenance (auto-update of K8s and/or machine images) is controlled by the `var.maintenance` variable block.\n\nOptionally enable Argus monitoring via `var.monitoring` variable block.\n\n## Hibernation\nAuto start/stop timings for the cluster can be set through the `var.hibernations` variable to save on costs.\n\n## Important Notes\n\n### Terraform Providers\nThere are two STACKIT Terraform providers:\n\n* Community: [SchwarzIT/stackit](https://registry.terraform.io/providers/SchwarzIT/stackit/latest)\n* Official: [stackitcloud/stackit](https://registry.terraform.io/providers/stackitcloud/stackit/latest)\n\nThe official provider is still buggy, so we are using the **Community** provider for now.\n\n## Contributing\n\nPull requests are very welcome. If you encounter any problems, please open an issue ❤️.\n\n## License\n\nMIT\n\n## terraform-docs\n\n\u003c!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK --\u003e\n## Requirements\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"requirement_stackit\"\u003e\u003c/a\u003e [stackit](#requirement\\_stackit) | ~\u003e 1.27 |\n\n## Providers\n\n| Name | Version |\n|------|---------|\n| \u003ca name=\"provider_local\"\u003e\u003c/a\u003e [local](#provider\\_local) | n/a |\n| \u003ca name=\"provider_stackit\"\u003e\u003c/a\u003e [stackit](#provider\\_stackit) | ~\u003e 1.27 |\n\n## Modules\n\nNo modules.\n\n## Resources\n\n| Name | Type |\n|------|------|\n| [local_sensitive_file.kubeconfig](https://registry.terraform.io/providers/hashicorp/local/latest/docs/resources/sensitive_file) | resource |\n| [stackit_argus_instance.default](https://registry.terraform.io/providers/SchwarzIT/stackit/latest/docs/resources/argus_instance) | resource |\n| [stackit_kubernetes_cluster.default](https://registry.terraform.io/providers/SchwarzIT/stackit/latest/docs/resources/kubernetes_cluster) | resource |\n\n## Inputs\n\n| Name | Description | Type | Default | Required |\n|------|-------------|------|---------|:--------:|\n| \u003ca name=\"input_acl_allowed_cidrs\"\u003e\u003c/a\u003e [acl\\_allowed\\_cidrs](#input\\_acl\\_allowed\\_cidrs) | List of CIDRs to allow access to the cluster | `list(string)` | `[]` | no |\n| \u003ca name=\"input_acl_enabled\"\u003e\u003c/a\u003e [acl\\_enabled](#input\\_acl\\_enabled) | Enable / Disable ACL | `bool` | `false` | no |\n| \u003ca name=\"input_argus_instance\"\u003e\u003c/a\u003e [argus\\_instance](#input\\_argus\\_instance) | Argus instance configuration | \u003cpre\u003eobject({\u003cbr\u003e    parameters = optional(map(string))\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"parameters\": {}\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_argus_instance_id\"\u003e\u003c/a\u003e [argus\\_instance\\_id](#input\\_argus\\_instance\\_id) | Argus Instance ID for Monitoring of K8s Cluster | `string` | `\"\"` | no |\n| \u003ca name=\"input_argus_plan\"\u003e\u003c/a\u003e [argus\\_plan](#input\\_argus\\_plan) | Name of the Argus plan to use | `string` | `\"Monitoring-Starter-EU01\"` | no |\n| \u003ca name=\"input_cluster_name\"\u003e\u003c/a\u003e [cluster\\_name](#input\\_cluster\\_name) | Specifies the cluster name (lower case, alphanumeric, hyphens allowed, up to 11 chars) | `string` | `\"k8s\"` | no |\n| \u003ca name=\"input_cluster_timeouts\"\u003e\u003c/a\u003e [cluster\\_timeouts](#input\\_cluster\\_timeouts) | Timeouts for cluster operations | \u003cpre\u003eobject({\u003cbr\u003e    create = optional(string)\u003cbr\u003e    update = optional(string)\u003cbr\u003e    delete = optional(string)\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"create\": \"60m\",\u003cbr\u003e  \"delete\": \"60m\",\u003cbr\u003e  \"update\": \"60m\"\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_create_local_kubeconfig\"\u003e\u003c/a\u003e [create\\_local\\_kubeconfig](#input\\_create\\_local\\_kubeconfig) | Create local kubeconfig file | `bool` | `true` | no |\n| \u003ca name=\"input_enable_kubernetes_version_updates\"\u003e\u003c/a\u003e [enable\\_kubernetes\\_version\\_updates](#input\\_enable\\_kubernetes\\_version\\_updates) | Enable automatic Kubernetes version updates | `bool` | `true` | no |\n| \u003ca name=\"input_enable_machine_image_version_updates\"\u003e\u003c/a\u003e [enable\\_machine\\_image\\_version\\_updates](#input\\_enable\\_machine\\_image\\_version\\_updates) | Enable automatic OS image version updates | `bool` | `true` | no |\n| \u003ca name=\"input_extensions\"\u003e\u003c/a\u003e [extensions](#input\\_extensions) | Extensions configuration | \u003cpre\u003eobject({\u003cbr\u003e    acl = object({\u003cbr\u003e      allowed_cidrs = list(string)\u003cbr\u003e      enabled       = bool\u003cbr\u003e    })\u003cbr\u003e    argus = object({\u003cbr\u003e      enabled           = bool\u003cbr\u003e      argus_instance_id = optional(string)\u003cbr\u003e    })\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"acl\": {\u003cbr\u003e    \"allowed_cidrs\": [],\u003cbr\u003e    \"enabled\": false\u003cbr\u003e  },\u003cbr\u003e  \"argus\": {\u003cbr\u003e    \"enabled\": false\u003cbr\u003e  }\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_grafana\"\u003e\u003c/a\u003e [grafana](#input\\_grafana) | Argus grafana configuration | \u003cpre\u003eobject({\u003cbr\u003e    enable_public_access = bool\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"enable_public_access\": false\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_hibernations\"\u003e\u003c/a\u003e [hibernations](#input\\_hibernations) | Hibernation configuration | \u003cpre\u003elist(object({\u003cbr\u003e    start    = string\u003cbr\u003e    end      = string\u003cbr\u003e    timezone = string\u003cbr\u003e  }))\u003c/pre\u003e | \u003cpre\u003e[\u003cbr\u003e  {\u003cbr\u003e    \"end\": \"\",\u003cbr\u003e    \"start\": \"\",\u003cbr\u003e    \"timezone\": \"Europe/Berlin\"\u003cbr\u003e  }\u003cbr\u003e]\u003c/pre\u003e | no |\n| \u003ca name=\"input_k8s_version\"\u003e\u003c/a\u003e [k8s\\_version](#input\\_k8s\\_version) | K8s Version | `string` | `\"1.26\"` | no |\n| \u003ca name=\"input_maintenance\"\u003e\u003c/a\u003e [maintenance](#input\\_maintenance) | Maintenance window configuration | \u003cpre\u003eobject({\u003cbr\u003e    enable_kubernetes_version_updates    = bool\u003cbr\u003e    enable_machine_image_version_updates = bool\u003cbr\u003e    start                                = string\u003cbr\u003e    end                                  = string\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"enable_kubernetes_version_updates\": true,\u003cbr\u003e  \"enable_machine_image_version_updates\": true,\u003cbr\u003e  \"end\": \"0000-01-01T05:00:00Z\",\u003cbr\u003e  \"start\": \"0000-01-01T03:00:00Z\"\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_maintenance_start\"\u003e\u003c/a\u003e [maintenance\\_start](#input\\_maintenance\\_start) | Start of the maintenance window | `string` | `\"02:00:00+02:00\"` | no |\n| \u003ca name=\"input_maintenance_stop\"\u003e\u003c/a\u003e [maintenance\\_stop](#input\\_maintenance\\_stop) | End of the maintenance window | `string` | `\"05:00:00+02:00\"` | no |\n| \u003ca name=\"input_metrics\"\u003e\u003c/a\u003e [metrics](#input\\_metrics) | Argus metric configuration | \u003cpre\u003eobject({\u003cbr\u003e    retention_days                 = number\u003cbr\u003e    retention_days_1h_downsampling = number\u003cbr\u003e    retention_days_5m_downsampling = number\u003cbr\u003e  })\u003c/pre\u003e | \u003cpre\u003e{\u003cbr\u003e  \"retention_days\": 30,\u003cbr\u003e  \"retention_days_1h_downsampling\": 3,\u003cbr\u003e  \"retention_days_5m_downsampling\": 10\u003cbr\u003e}\u003c/pre\u003e | no |\n| \u003ca name=\"input_node_pools\"\u003e\u003c/a\u003e [node\\_pools](#input\\_node\\_pools) | Configuration for node\\_pools | \u003cpre\u003elist(object({\u003cbr\u003e    machine_type      = string\u003cbr\u003e    name              = string\u003cbr\u003e    container_runtime = optional(string)\u003cbr\u003e    labels            = optional(map(string))\u003cbr\u003e    max_surge         = optional(number)\u003cbr\u003e    max_unavailable   = optional(number)\u003cbr\u003e    maximum           = optional(number)\u003cbr\u003e    minimum           = optional(number)\u003cbr\u003e    os_name           = optional(string)\u003cbr\u003e    os_version        = optional(string)\u003cbr\u003e    taints = optional(list(object({\u003cbr\u003e      key    = string\u003cbr\u003e      value  = string\u003cbr\u003e      effect = string\u003cbr\u003e    })))\u003cbr\u003e    volume_size_gb = optional(number)\u003cbr\u003e    volume_type    = optional(string)\u003cbr\u003e    zones          = optional(list(string))\u003cbr\u003e  }))\u003c/pre\u003e | n/a | yes |\n| \u003ca name=\"input_project_id\"\u003e\u003c/a\u003e [project\\_id](#input\\_project\\_id) | stackit Project ID | `any` | n/a | yes |\n\n## Outputs\n\n| Name | Description |\n|------|-------------|\n| \u003ca name=\"output_argus_alerting_url\"\u003e\u003c/a\u003e [argus\\_alerting\\_url](#output\\_argus\\_alerting\\_url) | n/a |\n| \u003ca name=\"output_argus_dashboard_url\"\u003e\u003c/a\u003e [argus\\_dashboard\\_url](#output\\_argus\\_dashboard\\_url) | n/a |\n| \u003ca name=\"output_argus_grafana_initial_admin_password\"\u003e\u003c/a\u003e [argus\\_grafana\\_initial\\_admin\\_password](#output\\_argus\\_grafana\\_initial\\_admin\\_password) | n/a |\n| \u003ca name=\"output_argus_grafana_initial_admin_user\"\u003e\u003c/a\u003e [argus\\_grafana\\_initial\\_admin\\_user](#output\\_argus\\_grafana\\_initial\\_admin\\_user) | n/a |\n| \u003ca name=\"output_argus_grafana_url\"\u003e\u003c/a\u003e [argus\\_grafana\\_url](#output\\_argus\\_grafana\\_url) | n/a |\n| \u003ca name=\"output_argus_instance_id\"\u003e\u003c/a\u003e [argus\\_instance\\_id](#output\\_argus\\_instance\\_id) | n/a |\n| \u003ca name=\"output_argus_jaeger_traces_url\"\u003e\u003c/a\u003e [argus\\_jaeger\\_traces\\_url](#output\\_argus\\_jaeger\\_traces\\_url) | n/a |\n| \u003ca name=\"output_argus_jaeger_ui_url\"\u003e\u003c/a\u003e [argus\\_jaeger\\_ui\\_url](#output\\_argus\\_jaeger\\_ui\\_url) | n/a |\n| \u003ca name=\"output_argus_logs_push_url\"\u003e\u003c/a\u003e [argus\\_logs\\_push\\_url](#output\\_argus\\_logs\\_push\\_url) | n/a |\n| \u003ca name=\"output_argus_logs_url\"\u003e\u003c/a\u003e [argus\\_logs\\_url](#output\\_argus\\_logs\\_url) | n/a |\n| \u003ca name=\"output_argus_metrics_push_url\"\u003e\u003c/a\u003e [argus\\_metrics\\_push\\_url](#output\\_argus\\_metrics\\_push\\_url) | n/a |\n| \u003ca name=\"output_argus_metrics_url\"\u003e\u003c/a\u003e [argus\\_metrics\\_url](#output\\_argus\\_metrics\\_url) | n/a |\n| \u003ca name=\"output_argus_otlp_traces_url\"\u003e\u003c/a\u003e [argus\\_otlp\\_traces\\_url](#output\\_argus\\_otlp\\_traces\\_url) | n/a |\n| \u003ca name=\"output_argus_targets_url\"\u003e\u003c/a\u003e [argus\\_targets\\_url](#output\\_argus\\_targets\\_url) | n/a |\n| \u003ca name=\"output_argus_zipkin_spans_url\"\u003e\u003c/a\u003e [argus\\_zipkin\\_spans\\_url](#output\\_argus\\_zipkin\\_spans\\_url) | n/a |\n| \u003ca name=\"output_cluster_id\"\u003e\u003c/a\u003e [cluster\\_id](#output\\_cluster\\_id) | n/a |\n| \u003ca name=\"output_cluster_version\"\u003e\u003c/a\u003e [cluster\\_version](#output\\_cluster\\_version) | n/a |\n| \u003ca name=\"output_kube_config\"\u003e\u003c/a\u003e [kube\\_config](#output\\_kube\\_config) | n/a |\n\u003c!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fventx%2Fterraform-stackit-k8s","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fventx%2Fterraform-stackit-k8s","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fventx%2Fterraform-stackit-k8s/lists"}