mirror of
https://github.com/puppetmaster/typhoon.git
synced 2024-12-27 06:29:33 +01:00
b3c384fbc0
* Previously: Typhoon provisions clusters with kube-system components like CoreDNS, kube-proxy, and a chosen CNI provider (among flannel, Calico, or Cilium) pre-installed. This is convenient since clusters come with "batteries included". But it also means upgrading these components is generally done in lock-step, by upgrading to a new Typhoon / Kubernetes release * It can be valuable to manage these components with a separate plan/apply process or through automations and deploy systems. For example, this allows managing CoreDNS separately from the cluster's lifecycle. * These "components" will continue to be pre-installed by default, but a new `components` variable allows them to be disabled and managed as "addons", components you apply after cluster creation and manage on a rolling basis. For some of these, we may provide Terraform modules to aide in managing these components. ``` module "cluster" { # defaults components = { enable = true coredns = { enable = true } kube_proxy = { enable = true } # Only the CNI set in var.networking will be installed flannel = { enable = true } calico = { enable = true } cilium = { enable = true } } } ``` An earlier variable `install_container_networking = true/false` has been removed, since it can now be achieved with this more extensible and general components mechanism by setting the chosen networking provider enable field to false.
193 lines
5.4 KiB
HCL
193 lines
5.4 KiB
HCL
variable "cluster_name" {
|
|
type = string
|
|
description = "Unique cluster name"
|
|
}
|
|
|
|
# bare-metal
|
|
|
|
variable "matchbox_http_endpoint" {
|
|
type = string
|
|
description = "Matchbox HTTP read-only endpoint (e.g. http://matchbox.example.com:8080)"
|
|
}
|
|
|
|
variable "os_channel" {
|
|
type = string
|
|
description = "Channel for a Flatcar Linux (flatcar-stable, flatcar-beta, flatcar-alpha)"
|
|
|
|
validation {
|
|
condition = contains(["flatcar-stable", "flatcar-beta", "flatcar-alpha"], var.os_channel)
|
|
error_message = "The os_channel must be flatcar-stable, flatcar-beta, or flatcar-alpha."
|
|
}
|
|
}
|
|
|
|
variable "os_version" {
|
|
type = string
|
|
description = "Version of Flatcar Linux to PXE and install (e.g. 2079.5.1)"
|
|
}
|
|
|
|
# machines
|
|
|
|
variable "controllers" {
|
|
type = list(object({
|
|
name = string
|
|
mac = string
|
|
domain = string
|
|
}))
|
|
description = <<EOD
|
|
List of controller machine details (unique name, identifying MAC address, FQDN)
|
|
[{ name = "node1", mac = "52:54:00:a1:9c:ae", domain = "node1.example.com"}]
|
|
EOD
|
|
}
|
|
|
|
variable "workers" {
|
|
type = list(object({
|
|
name = string
|
|
mac = string
|
|
domain = string
|
|
}))
|
|
description = <<EOD
|
|
List of worker machine details (unique name, identifying MAC address, FQDN)
|
|
[
|
|
{ name = "node2", mac = "52:54:00:b2:2f:86", domain = "node2.example.com"},
|
|
{ name = "node3", mac = "52:54:00:c3:61:77", domain = "node3.example.com"}
|
|
]
|
|
EOD
|
|
default = []
|
|
}
|
|
|
|
variable "snippets" {
|
|
type = map(list(string))
|
|
description = "Map from machine names to lists of Container Linux Config snippets"
|
|
default = {}
|
|
}
|
|
|
|
variable "worker_node_labels" {
|
|
type = map(list(string))
|
|
description = "Map from worker names to lists of initial node labels"
|
|
default = {}
|
|
}
|
|
|
|
variable "worker_node_taints" {
|
|
type = map(list(string))
|
|
description = "Map from worker names to lists of initial node taints"
|
|
default = {}
|
|
}
|
|
|
|
# configuration
|
|
|
|
variable "k8s_domain_name" {
|
|
type = string
|
|
description = "Controller DNS name which resolves to a controller instance. Workers and kubeconfig's will communicate with this endpoint (e.g. cluster.example.com)"
|
|
}
|
|
|
|
variable "ssh_authorized_key" {
|
|
type = string
|
|
description = "SSH public key for user 'core'"
|
|
}
|
|
|
|
variable "networking" {
|
|
type = string
|
|
description = "Choice of networking provider (flannel, calico, or cilium)"
|
|
default = "cilium"
|
|
}
|
|
|
|
variable "network_mtu" {
|
|
type = number
|
|
description = "CNI interface MTU (applies to calico only)"
|
|
default = 1480
|
|
}
|
|
|
|
variable "network_ip_autodetection_method" {
|
|
type = string
|
|
description = "Method to autodetect the host IPv4 address (applies to calico only)"
|
|
default = "first-found"
|
|
}
|
|
|
|
variable "pod_cidr" {
|
|
type = string
|
|
description = "CIDR IPv4 range to assign Kubernetes pods"
|
|
default = "10.2.0.0/16"
|
|
}
|
|
|
|
variable "service_cidr" {
|
|
type = string
|
|
description = <<EOD
|
|
CIDR IPv4 range to assign Kubernetes services.
|
|
The 1st IP will be reserved for kube_apiserver, the 10th IP will be reserved for coredns.
|
|
EOD
|
|
default = "10.3.0.0/16"
|
|
}
|
|
|
|
# optional
|
|
|
|
variable "download_protocol" {
|
|
type = string
|
|
description = "Protocol iPXE should use to download the kernel and initrd. Defaults to https, which requires iPXE compiled with crypto support. Unused if cached_install is true."
|
|
default = "https"
|
|
}
|
|
|
|
variable "cached_install" {
|
|
type = bool
|
|
description = "Whether Flatcar Linux should PXE boot and install from matchbox /assets cache. Note that the admin must have downloaded the os_version into matchbox assets."
|
|
default = false
|
|
}
|
|
|
|
variable "install_disk" {
|
|
type = string
|
|
default = "/dev/sda"
|
|
description = "Disk device to which the install profiles should install Flatcar Linux (e.g. /dev/sda)"
|
|
}
|
|
|
|
variable "kernel_args" {
|
|
type = list(string)
|
|
description = "Additional kernel arguments to provide at PXE boot."
|
|
default = []
|
|
}
|
|
|
|
variable "enable_reporting" {
|
|
type = bool
|
|
description = "Enable usage or analytics reporting to upstreams (Calico)"
|
|
default = false
|
|
}
|
|
|
|
variable "enable_aggregation" {
|
|
type = bool
|
|
description = "Enable the Kubernetes Aggregation Layer"
|
|
default = true
|
|
}
|
|
|
|
variable "oem_type" {
|
|
type = string
|
|
description = <<EOD
|
|
An OEM type to install with flatcar-install. Find available types by looking for Flatcar image files
|
|
ending in `image.bin.bz2`. The OEM identifier is contained in the filename.
|
|
E.g., `flatcar_production_vmware_raw_image.bin.bz2` leads to `vmware_raw`.
|
|
See: https://www.flatcar.org/docs/latest/installing/bare-metal/installing-to-disk/#choose-a-channel
|
|
EOD
|
|
default = ""
|
|
}
|
|
|
|
# unofficial, undocumented, unsupported
|
|
|
|
variable "cluster_domain_suffix" {
|
|
type = string
|
|
description = "Queries for domains with the suffix will be answered by coredns. Default is cluster.local (e.g. foo.default.svc.cluster.local) "
|
|
default = "cluster.local"
|
|
}
|
|
|
|
variable "components" {
|
|
description = "Configure pre-installed cluster components"
|
|
# Component configs are passed through to terraform-render-bootstrap,
|
|
# which handles type enforcement and defines defaults
|
|
# https://github.com/poseidon/terraform-render-bootstrap/blob/main/variables.tf#L95
|
|
type = object({
|
|
enable = optional(bool)
|
|
coredns = optional(map(any))
|
|
kube_proxy = optional(map(any))
|
|
flannel = optional(map(any))
|
|
calico = optional(map(any))
|
|
cilium = optional(map(any))
|
|
})
|
|
default = null
|
|
}
|