Merge branch 'master' into add_output

This commit is contained in:
Karim Naufal 2022-01-13 20:29:41 +00:00 committed by GitHub
commit 68c3dba9e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 86 additions and 26 deletions

5
.gitignore vendored
View File

@ -1,6 +1,9 @@
.terraform* .terraform*
*.tfstate* *.tfstate*
crash.log crash.log
hetzner/ccm/kustomization.yaml
hetzner/csi/kustomization.yaml
kubeconfig.yaml kubeconfig.yaml
kubeconfig.yaml-e
terraform.tfvars terraform.tfvars
templates/rendered/traefik_config.yaml templates/rendered/traefik_config.yaml

View File

@ -63,7 +63,7 @@ _The Hetzner cli `hcloud` is also useful to have, mainly for debugging without h
1. Create a project in your [Hetzner Cloud Console](https://console.hetzner.cloud/), and go to **Security > API Tokens** of that project to grab the API key. Take note of the key! ✅ 1. Create a project in your [Hetzner Cloud Console](https://console.hetzner.cloud/), and go to **Security > API Tokens** of that project to grab the API key. Take note of the key! ✅
2. Generate an ssh key pair for your cluster, unless you already have one that you'd like to use (ed25519 is the ideal type). Take note of the respective paths of your private and public keys! ✅ 2. Generate an ssh key pair for your cluster, unless you already have one that you'd like to use (ed25519 is the ideal type). Take note of the respective paths of your private and public keys! ✅
3. Rename `terraform.tfvars.example` to `terraform.tfvars`, and replace the values from steps 1 and 2. ✅ 3. Copy `terraform.tfvars.example` to `terraform.tfvars`, and replace the values from steps 1 and 2. ✅
4. (Optional) There are other variables in `terraform.tfvars` that could be customized, like Hetzner region, and the node counts and sizes. 4. (Optional) There are other variables in `terraform.tfvars` that could be customized, like Hetzner region, and the node counts and sizes.
### 🎯 Installation ### 🎯 Installation
@ -134,8 +134,8 @@ kubectl label node <nodename> 'k3os.io/upgrade'-
If you want to takedown the cluster, you can proceed as follows: If you want to takedown the cluster, you can proceed as follows:
```sh ```sh
kubectl delete -k hetzer/csi kubectl delete -k hetzner/csi
kubectl delete -k hetzer/ccm kubectl delete -k hetzner/ccm
hcloud load-balancer delete traefik hcloud load-balancer delete traefik
terraform destroy -auto-approve terraform destroy -auto-approve
``` ```

16
data.tf
View File

@ -1,3 +1,19 @@
data "hcloud_load_balancer" "lb11" { data "hcloud_load_balancer" "lb11" {
name = "traefik" name = "traefik"
} }
data "github_release" "hetzner_ccm" {
repository = "hcloud-cloud-controller-manager"
owner = "hetznercloud"
retrieve_by = "latest"
}
data "github_release" "hetzner_csi" {
repository = "csi-driver"
owner = "hetznercloud"
retrieve_by = "latest"
}
data "hcloud_image" "linux" {
name = local.hcloud_image_name
}

View File

@ -1,8 +0,0 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/latest/download/ccm-networks.yaml
patchesStrategicMerge:
- patch.yaml

View File

@ -1,8 +0,0 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- https://raw.githubusercontent.com/hetznercloud/csi-driver/master/deploy/kubernetes/hcloud-csi.yml
patchesStrategicMerge:
- patch.yaml

22
main.tf
View File

@ -144,8 +144,22 @@ resource "hcloud_firewall" "k3s" {
} }
data "hcloud_image" "linux" { resource "local_file" "hetzner_ccm_config" {
name = local.hcloud_image_name content = templatefile("${path.module}/templates/hetzner_ccm.yaml.tpl", {
ccm_version = var.hetzner_ccm_version != null ? var.hetzner_ccm_version : data.github_release.hetzner_ccm.release_tag
})
filename = "${path.module}/hetzner/ccm/kustomization.yaml"
file_permission = "0644"
directory_permission = "0755"
}
resource "local_file" "hetzner_csi_config" {
content = templatefile("${path.module}/templates/hetzner_csi.yaml.tpl", {
csi_version = var.hetzner_csi_version != null ? var.hetzner_csi_version : data.github_release.hetzner_csi.release_tag
})
filename = "${path.module}/hetzner/csi/kustomization.yaml"
file_permission = "0644"
directory_permission = "0755"
} }
resource "local_file" "traefik_config" { resource "local_file" "traefik_config" {
@ -153,5 +167,7 @@ resource "local_file" "traefik_config" {
lb_server_type = var.lb_server_type lb_server_type = var.lb_server_type
location = var.location location = var.location
}) })
filename = "${path.module}/templates/rendered/traefik_config.yaml" filename = "${path.module}/templates/rendered/traefik_config.yaml"
file_permission = "0644"
directory_permission = "0755"
} }

View File

@ -52,9 +52,9 @@ resource "hcloud_server" "first_control_plane" {
provisioner "local-exec" { provisioner "local-exec" {
command = <<-EOT command = <<-EOT
kubectl -n kube-system create secret generic hcloud --from-literal=token=${var.hcloud_token} --from-literal=network=${hcloud_network.k3s.name} --kubeconfig ${path.module}/kubeconfig.yaml kubectl -n kube-system create secret generic hcloud --from-literal=token=${var.hcloud_token} --from-literal=network=${hcloud_network.k3s.name} --kubeconfig ${path.module}/kubeconfig.yaml
kubectl apply -k ${path.module}/hetzner/ccm --kubeconfig ${path.module}/kubeconfig.yaml kubectl apply -k ${dirname(local_file.hetzner_ccm_config.filename)} --kubeconfig ${path.module}/kubeconfig.yaml
kubectl -n kube-system create secret generic hcloud-csi --from-literal=token=${var.hcloud_token} --kubeconfig ${path.module}/kubeconfig.yaml kubectl -n kube-system create secret generic hcloud-csi --from-literal=token=${var.hcloud_token} --kubeconfig ${path.module}/kubeconfig.yaml
kubectl apply -k ${path.module}/hetzner/csi --kubeconfig ${path.module}/kubeconfig.yaml kubectl apply -k ${dirname(local_file.hetzner_csi_config.filename)} --kubeconfig ${path.module}/kubeconfig.yaml
EOT EOT
} }

View File

@ -1,3 +1,7 @@
provider "github" {}
provider "hcloud" { provider "hcloud" {
token = var.hcloud_token token = var.hcloud_token
} }
provider "local" {}

View File

@ -0,0 +1,8 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- "https://github.com/hetznercloud/hcloud-cloud-controller-manager/releases/download/${ccm_version}/ccm-networks.yaml"
patchesStrategicMerge:
- patch.yaml

View File

@ -0,0 +1,8 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- "https://raw.githubusercontent.com/hetznercloud/csi-driver/${csi_version}/deploy/kubernetes/hcloud-csi.yml"
patchesStrategicMerge:
- patch.yaml

View File

@ -1,6 +1,7 @@
variable "hcloud_token" { variable "hcloud_token" {
description = "Hetzner API tokey" description = "Hetzner Cloud API Token"
type = string type = string
sensitive = true
} }
variable "public_key" { variable "public_key" {
@ -42,3 +43,15 @@ variable "agents_num" {
description = "Number of agent nodes." description = "Number of agent nodes."
type = number type = number
} }
variable "hetzner_ccm_version" {
type = string
default = null
description = "Version of Kubernetes Cloud Controller Manager for Hetzner Cloud"
}
variable "hetzner_csi_version" {
type = string
default = null
description = "Version of Container Storage Interface driver for Hetzner Cloud"
}

View File

@ -1,8 +1,16 @@
terraform { terraform {
required_providers { required_providers {
github = {
source = "integrations/github"
version = ">= 4.0.0, < 5.0.0"
}
hcloud = { hcloud = {
source = "hetznercloud/hcloud" source = "hetznercloud/hcloud"
version = ">= 1.0.0, < 2.0.0" version = ">= 1.0.0, < 2.0.0"
} }
local = {
source = "hashicorp/local"
version = ">= 2.0.0, < 3.0.0"
}
} }
} }