An open API service indexing awesome lists of open source software.

https://github.com/glueops/opentofu-module-gluekube-hetznercloud

Managed by github-org-manager
https://github.com/glueops/opentofu-module-gluekube-hetznercloud

Last synced: 5 months ago
JSON representation

Managed by github-org-manager

Awesome Lists containing this project

README

          

# opentofu-module-GlueKube-HetznerCloud

This opentofu module deploys a Kubernetes cluster on Hetzner Cloud using GlueKube.

```hcl

module "captain" {
source = "git::https://github.com/GlueOps/opentofu-module-GlueKube-HetznerCloud.git"
gluekube_docker_image = "ghcr.io/glueops/gluekube"
gluekube_docker_tag = "v0.0.15-rc9"
vpc_cidr_block = "10.0.0.0/16"
subnet_cidr = "10.0.0.0/24"
region = var.provider_credentials.region

# control_plane_endpoint_dns = "ctrp"
provider_credentials = var.provider_credentials
autoglue = {
autoglue_cluster_name = var.autoglue_cluster_name

credentials = {
autoglue_key = var.autoglue_key
autoglue_org_secret = var.autoglue_org_secret
base_url = var.autoglue_base_url
}
route_53_config = {
aws_access_key_id = var.aws_access_key_id
aws_secret_access_key = var.aws_secret_access_key
aws_region = var.route53_region
domain_name = var.domain_name
zone_id = var.route53_zone_id
credential_id = var.autoglue_credentials_id
}
}
bastion = {
instance_type = "cpx32"
image = "ubuntu-24.04"
}

node_pools = [
{
"instance_type" : "cpx32",
"role" : "master",
"name" : "master-node-pool",
"image" : "ubuntu-24.04",
"node_count" : 3,

"kubernetes_labels" : {},
"kubernetes_taints" : []
},
{
"instance_type" : "cpx32",
"role" : "worker",
"name" : "glueops-platform-node-pool-1",
"image" : "ubuntu-24.04",

"node_count" : 2,

"kubernetes_labels" : {
"glueops.dev/role" : "glueops-platform"
},
"kubernetes_taints" : [
{
key = "glueops.dev/role"
value = "glueops-platform"
effect = "NoSchedule"
}
]
},
{
"instance_type" : "cpx32",
"role" : "worker",
"name" : "glueops-platform-node-pool-argocd-app-controller",
"node_count" : 2,
"image" : "ubuntu-24.04",

"kubernetes_labels" : {
"glueops.dev/role" : "glueops-platform-argocd-app-controller"
},
"kubernetes_taints" : [
{
key = "glueops.dev/role"
value = "glueops-platform-argocd-app-controller"
effect = "NoSchedule"
}
]
},
{
"instance_type" : "cpx32",
"role" : "worker",
"name" : "clusterwide-node-pool-1",
"image" : "ubuntu-24.04",

"node_count" : 2,

"kubernetes_labels" : {},
"kubernetes_taints" : []
},

{
"instance_type" : "cpx32",
"role" : "worker",
"name" : "node-pool-platform-loadbalancer-2",
"image" : "ubuntu-24.04",

"node_count" : 2,

"kubernetes_labels" : {
"glueops.dev/role" : "glueops-platform",
"use-as-loadbalancer" : "platform"
},
"kubernetes_taints" : []
},
{
"instance_type" : "cpx32",
"role" : "worker",
"name" : "node-pool-public-loadbalancer",
"image" : "ubuntu-24.04",

"node_count" : 2,

"kubernetes_labels" : {
"glueops.dev/role" : "glueops-platform",
"use-as-loadbalancer" : "public"
},
"kubernetes_taints" : []
},
]
}

```

## Requirements

| Name | Version |
|------|---------|
| [autoglue](#requirement\_autoglue) | 0.10.6 |
| [hcloud](#requirement\_hcloud) | 1.49.1 |

## Providers

| Name | Version |
|------|---------|
| [autoglue](#provider\_autoglue) | 0.10.6 |
| [hcloud](#provider\_hcloud) | 1.49.1 |

## Modules

| Name | Source | Version |
|------|--------|---------|
| [node\_pool](#module\_node\_pool) | ./modules/gluekube | n/a |

## Resources

| Name | Type |
|------|------|
| autoglue_cluster.cluster | resource |
| autoglue_cluster_bastion.bastion | resource |
| autoglue_cluster_captain_domain.domain | resource |
| autoglue_cluster_control_plane_record_set.ctrl_record | resource |
| autoglue_cluster_node_pools.autoglue_cluster_node_pools | resource |
| autoglue_domain.captain | resource |
| autoglue_record_set.cluster_record | resource |
| autoglue_server.bastion | resource |
| autoglue_ssh_key.bastion | resource |
| [hcloud_firewall.bastion_firewall](https://registry.terraform.io/providers/hetznercloud/hcloud/1.49.1/docs/resources/firewall) | resource |
| [hcloud_network.private_network](https://registry.terraform.io/providers/hetznercloud/hcloud/1.49.1/docs/resources/network) | resource |
| [hcloud_network_subnet.private_network_subnet](https://registry.terraform.io/providers/hetznercloud/hcloud/1.49.1/docs/resources/network_subnet) | resource |
| [hcloud_server.bastion](https://registry.terraform.io/providers/hetznercloud/hcloud/1.49.1/docs/resources/server) | resource |
| [hcloud_server_network.bastion_network](https://registry.terraform.io/providers/hetznercloud/hcloud/1.49.1/docs/resources/server_network) | resource |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| [autoglue](#input\_autoglue) | Configuration for the AutoGlue platform integration, including cluster naming, credentials, and Route53 DNS settings. |

object({
autoglue_cluster_name = string

credentials = object({
autoglue_key = string
autoglue_org_secret = string
base_url = string
})

route_53_config = object({
aws_access_key_id = string
aws_secret_access_key = string
aws_region = string
domain_name = string
zone_id = string
credential_id = string
})
})
| n/a | yes |
| [bastion](#input\_bastion) | Bastion configuration. |
object({
instance_type = string
image = string
})
| n/a | yes |
| [gluekube\_docker\_image](#input\_gluekube\_docker\_image) | n/a | `string` | `"ghcr.io/glueops/gluekube"` | no |
| [gluekube\_docker\_tag](#input\_gluekube\_docker\_tag) | n/a | `string` | `"v0.0.15-rc9"` | no |
| [node\_pools](#input\_node\_pools) | n/a |
list(object({
name = string
image = string
node_count = number
instance_type = string
role = string
kubernetes_labels = map(string)
kubernetes_taints = list(object({
key = string
value = string
effect = string
}))

}))
| n/a | yes |
| [provider\_credentials](#input\_provider\_credentials) | n/a |
object({
name = string
token = string
region = string
})
| n/a | yes |
| [region](#input\_region) | n/a | `string` | `"hel1"` | no |
| [subnet\_cidr](#input\_subnet\_cidr) | n/a | `string` | n/a | yes |
| [vpc\_cidr\_block](#input\_vpc\_cidr\_block) | The CIDR block for the VPC | `string` | n/a | yes |

## Outputs

No outputs.