Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Terraform tfvars dist

Ici nous allons nous attarder sur le fichier de distribution tfvars dont le contenu est le suivant:

#######################
#     YOU CAN EDIT    #
#######################
control_plane = [
  {
    name = "control-plane-nbg"
    # 10.0.1.0/24 range
    private_ip = "10.0.1.10"
    location   = "nbg1"
    model      = "cax11"
    image      = "ubuntu-24.04"
    # place is_main where you want the main control plane
    is_main = true
  },
  {
    name = "control-plane-fsn"
    # 10.0.1.0/24 range
    private_ip = "10.0.1.11"
    location   = "fsn1"
    model      = "cax11"
    image      = "ubuntu-24.04"
  },
  {
    name = "control-plane-hel"
    # 10.0.1.0/24 range
    private_ip = "10.0.1.12"
    location   = "hel1"
    model      = "cax11"
    image      = "ubuntu-24.04"
  }
]

node = [
  # Pool Graine
  {
    name = "terre"
    # 10.0.1.0/24 range
    private_ip = "10.0.1.20"
    location   = "nbg1"
    model      = "cax21"
    image      = "ubuntu-24.04"
    pool       = "graine"
  },
  {
    name = "eau"
    # 10.0.1.0/24 range
    private_ip = "10.0.1.30"
    location   = "nbg1"
    model      = "cax21"
    image      = "ubuntu-24.04"
    pool       = "graine"
  }
]

cluster_name         = "graine"
kubernetes_version   = "1.34"
lb_kube_api_location = "nbg1"
lb_kube_api_model    = "lb11"
lb_traefik_location  = "nbg1"
lb_traefik_model     = "lb11"
local_ssh_key_name   = "graine_ed25519"
placement_group_name = "graine-placement-group"
private_network_name = "graine-private-network"
ssh_keys             = ["graine"]

# Set the vault and item names
op_vault_kubeconfig = "graine"
op_item_kubeconfig  = "iac_kubeconfig"

# From 1Password
hetzner_token = "{{op://graine/iac_hetzner_token/HETZNER_TOKEN}}"
sshd_port     = "{{op://graine/iac_vps_sshd_port/VPS_SSH_PORT}}"

###################################
# !!! DO NOT EDIT, ADMIN ONLY !!! #
###################################
lb_kube_api_name       = "lb-kube-api"
lb_kube_api_private_ip = "10.0.1.2"
lb_traefik_name        = "lb-traefik"
lb_traefik_private_ip  = "10.0.1.4"
pod_network_cidr       = "10.244.0.0/16"
private_network_range  = "10.0.1.0/24"

Liste control_plane

control_planeest la liste contenant les specs de nos VPS Control plan.

variable "control_plane" {
  description = "List of Control Planes"
  type = list(object({
    name       = string
    private_ip = string
    location   = string
    model      = string
    image      = string
    ipv4_id    = optional(string)
    pool       = optional(string, "control-plane")
    is_main    = optional(bool, false)
    is_backup  = optional(bool, false)
    is_amd     = optional(bool, false)
    workload   = optional(string, "")
  }))
}

name

Nom du control plan

private_ip

IPv4 privée assignée au control plan, dont le range est 10.0.1.0/24, définit par la variable private_network_range

location

Localisation du datacenter parmis les choix fixes suivants: nbg1, fns1 et hel1

model

Model du VPS. Exemple pour les VPS ARM: CAX11, CAX21, CAX31 et CAX41

image

Image de l’OS à utiliser parmis un large choix comme ubuntu-24.04, debian-13 etc

ipv4_id

Optionnel, uniquement si vous possédeez déjà des Primary IPv4

pool

Optionnel, uniquement si vous souhaitez associer vos control plan à un pool. la valeur par défaut est control-plane

is_main

Semi-optionnel. Au moins un control plan doit avoir cette valeur à true. Ce sera le control plan où l’initialisation se lancée.

is_backup

N’est utile que pour le merge présent dans 04-vps-common-setup.tf

is_amd

N’est utile que pour le merge présent dans 04-vps-common-setup.tf

workload

N’est utile que pour le merge présent dans 04-vps-common-setup.tf


Liste node

nodeest la liste contenant les specs de nos VPS Worker.

Identique à la liste control_plane, seul les valeurs strictes ou possibles sont expliquées.

variable "node" {
  description = "List of Nodes"
  type = list(object({
    name       = string
    private_ip = string
    location   = string
    model      = string
    image      = string
    ipv4_id    = optional(string)
    pool       = string
    is_main    = optional(bool, false)
    is_backup  = optional(bool, false)
    is_amd     = optional(bool, false)
    workload   = optional(string, "")
  }))
}

pool

Le nom du pool auquel appartient le worker.

is_main

N’est utile que pour le merge présent dans 04-vps-common-setup.tf

is_backup

Optionnel. Uniquement si vous déployez des worker de backup sur des datacenter différent.

is_amd

Optionnel. Uniquement si vous déployez des worker dont le vCPU est de type AMD.

workload

Optionnel. Uniquement si le worker appartient à un pool dédié à des montées en charge fréquentes par exemple.


Variables

cluster_name

Nom du cluster. Impact kubernetes_config_context d’Hetzner Base

kubernetes_version

Version de Kubernetes à utiliser, sous la forme "MAJOR.MINOR". Exemple: "1.33", "1.34"

lb_kube_api_location

Localisation du load balancer Kube API parmis les choix fixes suivants: nbg1, fns1 et hel1

lb_kube_api_model

Model du load balancer Kube API parmis les choix fixes suivants: lb11, lb21 et lb31

lb_traefik_location

Localisation du load balancer Traefik parmis les choix fixes suivants: nbg1, fns1 et hel1

lb_traefik_model

Model du load balancer TRaefik parmis les choix fixes suivants: lb11, lb21 et lb31

local_ssh_key_name

Nom local de la clé ssh privée. Les lignes 16 et 17 de Taskfile doit être modifiée en conséquence.

placement_group_name

Nom du groupe de placement

ssh_keys

Nom de la clé SSH saisie lors des prérequis Hetzner

op_vault_kubeconfig

Nom du coffre 1Password contenant l’objet kubeconfig

op_item_kubeconfig

Nom de l’objet 1Password qui recevra le fichier kubeconfig généré

hetzner_token

Chemin 1Password pour récupérer la valeur du token Hetzner. Exemple: "{{op://graine/iac_hetzner_token/HETZNER_TOKEN}}"

sshd_port

Chemin 1Password pour récupérer la valeur du port SSH. Exemple: "{{op://graine/iac_vps_sshd_port/VPS_SSH_PORT}}"


Caution

Les variables suivantes sont à éditer en connaissance et avec précaution !

lb_kube_api_name

Nom du load balancer Kube API. En minuscule et sans espaces.

lb_kube_api_private_ip

IPv4 privée du load balancer Kube API

lb_traefik_name

Nom du load balancer Traefik. En minuscule et sans espaces. Impact lb_traefik_name d’Hetzner Base

lb_traefik_private_ip

IPv4 privée du load balancer Traefik

pod_network_cidr

Range CIDR assigné au Pods

private_network_name

Nom du réseau privée. En minuscule et sans espaces. Impact private_network_name d’Hetzner Base

private_network_range

Range du réseau privée. Impact control_plane, node, lb_kube_api_private_ip et lb_traefik_private_ip