mirror of
https://github.com/optim-enterprises-bv/terraform-talos.git
synced 2025-11-01 02:38:31 +00:00
av-zones support
This commit is contained in:
@@ -21,5 +21,5 @@ create-deployments: ## create templates
|
|||||||
# helm template --namespace=local-path-storage -f vars/local-path-storage.yaml local-path-provisioner \
|
# helm template --namespace=local-path-storage -f vars/local-path-storage.yaml local-path-provisioner \
|
||||||
# ~/work/sergelogvinov/local-path-provisioner/deploy/chart/local-path-provisioner > vars/local-path-storage-result.yaml
|
# ~/work/sergelogvinov/local-path-provisioner/deploy/chart/local-path-provisioner > vars/local-path-storage-result.yaml
|
||||||
|
|
||||||
helm template --namespace=ingress-nginx --version=4.6.0 -f vars/ingress.yaml ingress-nginx \
|
helm template --namespace=ingress-nginx --version=4.7.0 -f vars/ingress.yaml ingress-nginx \
|
||||||
ingress-nginx/ingress-nginx > vars/ingress-result.yaml
|
ingress-nginx/ingress-nginx > vars/ingress-result.yaml
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ apiVersion: v1
|
|||||||
kind: ServiceAccount
|
kind: ServiceAccount
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: ingress-nginx-4.6.0
|
helm.sh/chart: ingress-nginx-4.7.0
|
||||||
app.kubernetes.io/name: ingress-nginx
|
app.kubernetes.io/name: ingress-nginx
|
||||||
app.kubernetes.io/instance: ingress-nginx
|
app.kubernetes.io/instance: ingress-nginx
|
||||||
app.kubernetes.io/version: "1.7.0"
|
app.kubernetes.io/version: "1.8.0"
|
||||||
app.kubernetes.io/part-of: ingress-nginx
|
app.kubernetes.io/part-of: ingress-nginx
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
app.kubernetes.io/component: controller
|
app.kubernetes.io/component: controller
|
||||||
@@ -20,10 +20,10 @@ apiVersion: v1
|
|||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: ingress-nginx-4.6.0
|
helm.sh/chart: ingress-nginx-4.7.0
|
||||||
app.kubernetes.io/name: ingress-nginx
|
app.kubernetes.io/name: ingress-nginx
|
||||||
app.kubernetes.io/instance: ingress-nginx
|
app.kubernetes.io/instance: ingress-nginx
|
||||||
app.kubernetes.io/version: "1.7.0"
|
app.kubernetes.io/version: "1.8.0"
|
||||||
app.kubernetes.io/part-of: ingress-nginx
|
app.kubernetes.io/part-of: ingress-nginx
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
app.kubernetes.io/component: controller
|
app.kubernetes.io/component: controller
|
||||||
@@ -66,10 +66,10 @@ apiVersion: rbac.authorization.k8s.io/v1
|
|||||||
kind: ClusterRole
|
kind: ClusterRole
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: ingress-nginx-4.6.0
|
helm.sh/chart: ingress-nginx-4.7.0
|
||||||
app.kubernetes.io/name: ingress-nginx
|
app.kubernetes.io/name: ingress-nginx
|
||||||
app.kubernetes.io/instance: ingress-nginx
|
app.kubernetes.io/instance: ingress-nginx
|
||||||
app.kubernetes.io/version: "1.7.0"
|
app.kubernetes.io/version: "1.8.0"
|
||||||
app.kubernetes.io/part-of: ingress-nginx
|
app.kubernetes.io/part-of: ingress-nginx
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
name: ingress-nginx
|
name: ingress-nginx
|
||||||
@@ -150,10 +150,10 @@ apiVersion: rbac.authorization.k8s.io/v1
|
|||||||
kind: ClusterRoleBinding
|
kind: ClusterRoleBinding
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: ingress-nginx-4.6.0
|
helm.sh/chart: ingress-nginx-4.7.0
|
||||||
app.kubernetes.io/name: ingress-nginx
|
app.kubernetes.io/name: ingress-nginx
|
||||||
app.kubernetes.io/instance: ingress-nginx
|
app.kubernetes.io/instance: ingress-nginx
|
||||||
app.kubernetes.io/version: "1.7.0"
|
app.kubernetes.io/version: "1.8.0"
|
||||||
app.kubernetes.io/part-of: ingress-nginx
|
app.kubernetes.io/part-of: ingress-nginx
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
name: ingress-nginx
|
name: ingress-nginx
|
||||||
@@ -171,10 +171,10 @@ apiVersion: rbac.authorization.k8s.io/v1
|
|||||||
kind: Role
|
kind: Role
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: ingress-nginx-4.6.0
|
helm.sh/chart: ingress-nginx-4.7.0
|
||||||
app.kubernetes.io/name: ingress-nginx
|
app.kubernetes.io/name: ingress-nginx
|
||||||
app.kubernetes.io/instance: ingress-nginx
|
app.kubernetes.io/instance: ingress-nginx
|
||||||
app.kubernetes.io/version: "1.7.0"
|
app.kubernetes.io/version: "1.8.0"
|
||||||
app.kubernetes.io/part-of: ingress-nginx
|
app.kubernetes.io/part-of: ingress-nginx
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
app.kubernetes.io/component: controller
|
app.kubernetes.io/component: controller
|
||||||
@@ -264,10 +264,10 @@ apiVersion: rbac.authorization.k8s.io/v1
|
|||||||
kind: RoleBinding
|
kind: RoleBinding
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: ingress-nginx-4.6.0
|
helm.sh/chart: ingress-nginx-4.7.0
|
||||||
app.kubernetes.io/name: ingress-nginx
|
app.kubernetes.io/name: ingress-nginx
|
||||||
app.kubernetes.io/instance: ingress-nginx
|
app.kubernetes.io/instance: ingress-nginx
|
||||||
app.kubernetes.io/version: "1.7.0"
|
app.kubernetes.io/version: "1.8.0"
|
||||||
app.kubernetes.io/part-of: ingress-nginx
|
app.kubernetes.io/part-of: ingress-nginx
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
app.kubernetes.io/component: controller
|
app.kubernetes.io/component: controller
|
||||||
@@ -288,10 +288,10 @@ kind: Service
|
|||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: ingress-nginx-4.6.0
|
helm.sh/chart: ingress-nginx-4.7.0
|
||||||
app.kubernetes.io/name: ingress-nginx
|
app.kubernetes.io/name: ingress-nginx
|
||||||
app.kubernetes.io/instance: ingress-nginx
|
app.kubernetes.io/instance: ingress-nginx
|
||||||
app.kubernetes.io/version: "1.7.0"
|
app.kubernetes.io/version: "1.8.0"
|
||||||
app.kubernetes.io/part-of: ingress-nginx
|
app.kubernetes.io/part-of: ingress-nginx
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
app.kubernetes.io/component: controller
|
app.kubernetes.io/component: controller
|
||||||
@@ -325,10 +325,10 @@ apiVersion: apps/v1
|
|||||||
kind: DaemonSet
|
kind: DaemonSet
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: ingress-nginx-4.6.0
|
helm.sh/chart: ingress-nginx-4.7.0
|
||||||
app.kubernetes.io/name: ingress-nginx
|
app.kubernetes.io/name: ingress-nginx
|
||||||
app.kubernetes.io/instance: ingress-nginx
|
app.kubernetes.io/instance: ingress-nginx
|
||||||
app.kubernetes.io/version: "1.7.0"
|
app.kubernetes.io/version: "1.8.0"
|
||||||
app.kubernetes.io/part-of: ingress-nginx
|
app.kubernetes.io/part-of: ingress-nginx
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
app.kubernetes.io/component: controller
|
app.kubernetes.io/component: controller
|
||||||
@@ -352,10 +352,10 @@ spec:
|
|||||||
prometheus.io/port: "10254"
|
prometheus.io/port: "10254"
|
||||||
prometheus.io/scrape: "true"
|
prometheus.io/scrape: "true"
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: ingress-nginx-4.6.0
|
helm.sh/chart: ingress-nginx-4.7.0
|
||||||
app.kubernetes.io/name: ingress-nginx
|
app.kubernetes.io/name: ingress-nginx
|
||||||
app.kubernetes.io/instance: ingress-nginx
|
app.kubernetes.io/instance: ingress-nginx
|
||||||
app.kubernetes.io/version: "1.7.0"
|
app.kubernetes.io/version: "1.8.0"
|
||||||
app.kubernetes.io/part-of: ingress-nginx
|
app.kubernetes.io/part-of: ingress-nginx
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
app.kubernetes.io/component: controller
|
app.kubernetes.io/component: controller
|
||||||
@@ -363,7 +363,7 @@ spec:
|
|||||||
dnsPolicy: ClusterFirstWithHostNet
|
dnsPolicy: ClusterFirstWithHostNet
|
||||||
containers:
|
containers:
|
||||||
- name: controller
|
- name: controller
|
||||||
image: "registry.k8s.io/ingress-nginx/controller:v1.7.0@sha256:7612338342a1e7b8090bef78f2a04fffcadd548ccaabe8a47bf7758ff549a5f7"
|
image: "registry.k8s.io/ingress-nginx/controller:v1.8.0@sha256:744ae2afd433a395eeb13dc03d3313facba92e96ad71d9feaafc85925493fee3"
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
lifecycle:
|
lifecycle:
|
||||||
preStop:
|
preStop:
|
||||||
@@ -376,6 +376,9 @@ spec:
|
|||||||
- --controller-class=k8s.io/ingress-nginx
|
- --controller-class=k8s.io/ingress-nginx
|
||||||
- --ingress-class=nginx
|
- --ingress-class=nginx
|
||||||
- --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
|
- --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
|
||||||
|
- --enable-topology-aware-routing=true
|
||||||
|
- --post-shutdown-grace-period=30
|
||||||
|
- --report-node-internal-ip-address=true
|
||||||
securityContext:
|
securityContext:
|
||||||
capabilities:
|
capabilities:
|
||||||
drop:
|
drop:
|
||||||
@@ -455,10 +458,10 @@ apiVersion: networking.k8s.io/v1
|
|||||||
kind: IngressClass
|
kind: IngressClass
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
helm.sh/chart: ingress-nginx-4.6.0
|
helm.sh/chart: ingress-nginx-4.7.0
|
||||||
app.kubernetes.io/name: ingress-nginx
|
app.kubernetes.io/name: ingress-nginx
|
||||||
app.kubernetes.io/instance: ingress-nginx
|
app.kubernetes.io/instance: ingress-nginx
|
||||||
app.kubernetes.io/version: "1.7.0"
|
app.kubernetes.io/version: "1.8.0"
|
||||||
app.kubernetes.io/part-of: ingress-nginx
|
app.kubernetes.io/part-of: ingress-nginx
|
||||||
app.kubernetes.io/managed-by: Helm
|
app.kubernetes.io/managed-by: Helm
|
||||||
app.kubernetes.io/component: controller
|
app.kubernetes.io/component: controller
|
||||||
|
|||||||
@@ -66,6 +66,11 @@ controller:
|
|||||||
prometheus.io/scrape: "true"
|
prometheus.io/scrape: "true"
|
||||||
prometheus.io/port: "10254"
|
prometheus.io/port: "10254"
|
||||||
|
|
||||||
|
extraArgs:
|
||||||
|
report-node-internal-ip-address: "true"
|
||||||
|
enable-topology-aware-routing: "true"
|
||||||
|
post-shutdown-grace-period: 30
|
||||||
|
|
||||||
extraEnvs:
|
extraEnvs:
|
||||||
- name: NODE_NAME
|
- name: NODE_NAME
|
||||||
valueFrom:
|
valueFrom:
|
||||||
|
|||||||
@@ -3,19 +3,3 @@ provider "azurerm" {
|
|||||||
features {}
|
features {}
|
||||||
subscription_id = local.subscription_id
|
subscription_id = local.subscription_id
|
||||||
}
|
}
|
||||||
|
|
||||||
# data "azurerm_virtual_machine_size" "size" {
|
|
||||||
# name = "Standard_D2pls_v5"
|
|
||||||
# location = "westeurope"
|
|
||||||
# }
|
|
||||||
|
|
||||||
# resource "azurerm_linux_virtual_machine_scale_set" "worker" {
|
|
||||||
|
|
||||||
# source_image_reference {
|
|
||||||
# location = "westeurope"
|
|
||||||
# publisher = "Canonical"
|
|
||||||
# offer = "0001-com-ubuntu-server-jammy"
|
|
||||||
# sku = "22_04-lts-${data.azurerm_virtual_machine_size.size.architecture == "Arm64" ? "arm64" : "gen2"}"
|
|
||||||
# version = "latest"
|
|
||||||
# }
|
|
||||||
# }
|
|
||||||
|
|||||||
@@ -298,8 +298,10 @@ spec:
|
|||||||
- --cloud-provider=azure
|
- --cloud-provider=azure
|
||||||
- --namespace=kube-system
|
- --namespace=kube-system
|
||||||
- --node-group-auto-discovery=label:cluster-autoscaler-enabled=true,cluster-autoscaler-name=talos-uksouth
|
- --node-group-auto-discovery=label:cluster-autoscaler-enabled=true,cluster-autoscaler-name=talos-uksouth
|
||||||
|
- --balance-similar-node-groups=true
|
||||||
- --cloud-config=/etc/azure/azure.json
|
- --cloud-config=/etc/azure/azure.json
|
||||||
- --logtostderr=true
|
- --logtostderr=true
|
||||||
|
- --node-delete-delay-after-taint=30s
|
||||||
- --regional=true
|
- --regional=true
|
||||||
- --stderrthreshold=info
|
- --stderrthreshold=info
|
||||||
- --v=3
|
- --v=3
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ autoDiscovery:
|
|||||||
extraArgs:
|
extraArgs:
|
||||||
cloud-config: /etc/azure/azure.json
|
cloud-config: /etc/azure/azure.json
|
||||||
regional: true
|
regional: true
|
||||||
|
balance-similar-node-groups: true
|
||||||
|
node-delete-delay-after-taint: 30s
|
||||||
logtostderr: true
|
logtostderr: true
|
||||||
stderrthreshold: info
|
stderrthreshold: info
|
||||||
v: 3
|
v: 3
|
||||||
|
|||||||
@@ -22,8 +22,8 @@ spec:
|
|||||||
run: overprovisioning
|
run: overprovisioning
|
||||||
spec:
|
spec:
|
||||||
nodeSelector:
|
nodeSelector:
|
||||||
node.cloudprovider.kubernetes.io/platform: azure
|
# node.cloudprovider.kubernetes.io/platform: azure
|
||||||
project.io/node-pool: web
|
project.io/node-pool: worker
|
||||||
affinity:
|
affinity:
|
||||||
podAntiAffinity:
|
podAntiAffinity:
|
||||||
requiredDuringSchedulingIgnoredDuringExecution:
|
requiredDuringSchedulingIgnoredDuringExecution:
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ resource "azurerm_availability_set" "controlplane" {
|
|||||||
resource_group_name = local.resource_group
|
resource_group_name = local.resource_group
|
||||||
|
|
||||||
platform_update_domain_count = 1
|
platform_update_domain_count = 1
|
||||||
platform_fault_domain_count = 3
|
platform_fault_domain_count = 2
|
||||||
|
|
||||||
tags = merge(var.tags, { type = "infra" })
|
tags = merge(var.tags, { type = "infra" })
|
||||||
}
|
}
|
||||||
@@ -22,7 +22,7 @@ locals {
|
|||||||
region : region
|
region : region
|
||||||
availability_set : azurerm_availability_set.controlplane[region].id
|
availability_set : azurerm_availability_set.controlplane[region].id
|
||||||
|
|
||||||
image : data.azurerm_shared_image_version.talos[length(regexall("^Standard_[DE][\\d+]p", lookup(try(var.controlplane[region], {}), "db_type", ""))) > 0 ? "Arm64" : "x64"].id
|
image : data.azurerm_shared_image_version.talos[length(regexall("^Standard_[DE][\\d+]p", lookup(try(var.controlplane[region], {}), "type", ""))) > 0 ? "Arm64" : "x64"].id
|
||||||
type : lookup(try(var.controlplane[region], {}), "type", "Standard_B2ms")
|
type : lookup(try(var.controlplane[region], {}), "type", "Standard_B2ms")
|
||||||
|
|
||||||
ip : 11 + inx
|
ip : 11 + inx
|
||||||
@@ -117,7 +117,7 @@ resource "local_file" "controlplane" {
|
|||||||
for_each = local.controlplanes
|
for_each = local.controlplanes
|
||||||
|
|
||||||
content = templatefile("${path.module}/templates/controlplane.yaml.tpl",
|
content = templatefile("${path.module}/templates/controlplane.yaml.tpl",
|
||||||
merge(var.kubernetes, {
|
merge(var.kubernetes, var.acr, {
|
||||||
name = each.value.name
|
name = each.value.name
|
||||||
labels = local.controlplane_labels
|
labels = local.controlplane_labels
|
||||||
certSANs = flatten([
|
certSANs = flatten([
|
||||||
@@ -170,7 +170,7 @@ resource "azurerm_linux_virtual_machine" "controlplane" {
|
|||||||
admin_username = "talos"
|
admin_username = "talos"
|
||||||
admin_ssh_key {
|
admin_ssh_key {
|
||||||
username = "talos"
|
username = "talos"
|
||||||
public_key = file("~/.ssh/terraform.pub")
|
public_key = var.ssh_public_key
|
||||||
}
|
}
|
||||||
|
|
||||||
source_image_id = length(each.value.image) > 0 ? each.value.image : null
|
source_image_id = length(each.value.image) > 0 ? each.value.image : null
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ resource "azurerm_linux_virtual_machine_scale_set" "db" {
|
|||||||
provision_vm_agent = false
|
provision_vm_agent = false
|
||||||
overprovision = false
|
overprovision = false
|
||||||
platform_fault_domain_count = 5
|
platform_fault_domain_count = 5
|
||||||
proximity_placement_group_id = azurerm_proximity_placement_group.common[each.key].id
|
proximity_placement_group_id = length(var.zones) == 1 ? azurerm_proximity_placement_group.common[each.key].id : null
|
||||||
|
|
||||||
# zone_balance = true
|
zone_balance = true
|
||||||
# zones = ["0", "1", "2"]
|
zones = var.zones
|
||||||
|
|
||||||
network_interface {
|
network_interface {
|
||||||
name = "db-${lower(each.key)}"
|
name = "db-${lower(each.key)}"
|
||||||
@@ -47,7 +47,7 @@ resource "azurerm_linux_virtual_machine_scale_set" "db" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
custom_data = base64encode(templatefile("${path.module}/templates/worker.yaml.tpl",
|
custom_data = base64encode(templatefile("${path.module}/templates/worker.yaml.tpl",
|
||||||
merge(var.kubernetes, {
|
merge(var.kubernetes, var.acr, {
|
||||||
lbv4 = try(local.network_controlplane[each.key].controlplane_lb[0], "")
|
lbv4 = try(local.network_controlplane[each.key].controlplane_lb[0], "")
|
||||||
labels = local.db_labels
|
labels = local.db_labels
|
||||||
nodeSubnets = [local.network_public[each.key].cidr[0]]
|
nodeSubnets = [local.network_public[each.key].cidr[0]]
|
||||||
@@ -57,7 +57,7 @@ resource "azurerm_linux_virtual_machine_scale_set" "db" {
|
|||||||
admin_username = "talos"
|
admin_username = "talos"
|
||||||
admin_ssh_key {
|
admin_ssh_key {
|
||||||
username = "talos"
|
username = "talos"
|
||||||
public_key = file("~/.ssh/terraform.pub")
|
public_key = var.ssh_public_key
|
||||||
}
|
}
|
||||||
|
|
||||||
os_disk {
|
os_disk {
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ resource "azurerm_linux_virtual_machine_scale_set" "web" {
|
|||||||
provision_vm_agent = false
|
provision_vm_agent = false
|
||||||
overprovision = false
|
overprovision = false
|
||||||
platform_fault_domain_count = 5
|
platform_fault_domain_count = 5
|
||||||
proximity_placement_group_id = azurerm_proximity_placement_group.common[each.key].id
|
proximity_placement_group_id = length(var.zones) == 1 ? azurerm_proximity_placement_group.common[each.key].id : null
|
||||||
|
|
||||||
# zone_balance = false
|
zone_balance = length(var.zones) > 0
|
||||||
# zones = ["1"]
|
zones = var.zones
|
||||||
|
|
||||||
# health_probe_id = local.network_public[each.key].sku != "Basic" ? azurerm_lb_probe.web[each.key].id : null
|
# health_probe_id = local.network_public[each.key].sku != "Basic" ? azurerm_lb_probe.web[each.key].id : null
|
||||||
# automatic_instance_repair {
|
# automatic_instance_repair {
|
||||||
@@ -53,7 +53,7 @@ resource "azurerm_linux_virtual_machine_scale_set" "web" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
custom_data = base64encode(templatefile("${path.module}/templates/worker.yaml.tpl",
|
custom_data = base64encode(templatefile("${path.module}/templates/worker.yaml.tpl",
|
||||||
merge(var.kubernetes, {
|
merge(var.kubernetes, var.acr, {
|
||||||
lbv4 = try(local.network_controlplane[each.key].controlplane_lb[0], "")
|
lbv4 = try(local.network_controlplane[each.key].controlplane_lb[0], "")
|
||||||
labels = local.web_labels
|
labels = local.web_labels
|
||||||
nodeSubnets = [local.network_public[each.key].cidr[0]]
|
nodeSubnets = [local.network_public[each.key].cidr[0]]
|
||||||
@@ -63,7 +63,7 @@ resource "azurerm_linux_virtual_machine_scale_set" "web" {
|
|||||||
admin_username = "talos"
|
admin_username = "talos"
|
||||||
admin_ssh_key {
|
admin_ssh_key {
|
||||||
username = "talos"
|
username = "talos"
|
||||||
public_key = file("~/.ssh/terraform.pub")
|
public_key = var.ssh_public_key
|
||||||
}
|
}
|
||||||
|
|
||||||
os_disk {
|
os_disk {
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ resource "azurerm_linux_virtual_machine_scale_set" "worker" {
|
|||||||
provision_vm_agent = false
|
provision_vm_agent = false
|
||||||
overprovision = false
|
overprovision = false
|
||||||
platform_fault_domain_count = 5
|
platform_fault_domain_count = 5
|
||||||
proximity_placement_group_id = azurerm_proximity_placement_group.common[each.key].id
|
proximity_placement_group_id = length(var.zones) == 1 ? azurerm_proximity_placement_group.common[each.key].id : null
|
||||||
|
|
||||||
# zone_balance = false
|
zone_balance = length(var.zones) > 0
|
||||||
# zones = ["1"]
|
zones = var.zones
|
||||||
|
|
||||||
# extension_operations_enabled = true
|
# extension_operations_enabled = true
|
||||||
# extension {
|
# extension {
|
||||||
@@ -65,7 +65,7 @@ resource "azurerm_linux_virtual_machine_scale_set" "worker" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
custom_data = base64encode(templatefile("${path.module}/templates/worker.yaml.tpl",
|
custom_data = base64encode(templatefile("${path.module}/templates/worker.yaml.tpl",
|
||||||
merge(var.kubernetes, {
|
merge(var.kubernetes, var.acr, {
|
||||||
lbv4 = try(local.network_controlplane[each.key].controlplane_lb[0], "")
|
lbv4 = try(local.network_controlplane[each.key].controlplane_lb[0], "")
|
||||||
labels = local.worker_labels
|
labels = local.worker_labels
|
||||||
nodeSubnets = [local.network_private[each.key].cidr[0]]
|
nodeSubnets = [local.network_private[each.key].cidr[0]]
|
||||||
@@ -75,13 +75,13 @@ resource "azurerm_linux_virtual_machine_scale_set" "worker" {
|
|||||||
admin_username = "talos"
|
admin_username = "talos"
|
||||||
admin_ssh_key {
|
admin_ssh_key {
|
||||||
username = "talos"
|
username = "talos"
|
||||||
public_key = file("~/.ssh/terraform.pub")
|
public_key = var.ssh_public_key
|
||||||
}
|
}
|
||||||
|
|
||||||
os_disk {
|
os_disk {
|
||||||
caching = "ReadOnly"
|
caching = "ReadOnly"
|
||||||
storage_account_type = lookup(try(var.instances[each.key], {}), "worker_os_ephemeral", false) ? "Standard_LRS" : "StandardSSD_LRS"
|
storage_account_type = lookup(try(var.instances[each.key], {}), "worker_os_ephemeral", false) ? "Standard_LRS" : "StandardSSD_LRS"
|
||||||
disk_size_gb = lookup(try(var.instances[each.key], {}), "worker_os_ephemeral", false) ? 32 : 50
|
disk_size_gb = lookup(try(var.instances[each.key], {}), "worker_os_ephemeral", false) ? try(var.instances[each.key].worker_os_disk_size, 64) : 50
|
||||||
|
|
||||||
dynamic "diff_disk_settings" {
|
dynamic "diff_disk_settings" {
|
||||||
for_each = lookup(try(var.instances[each.key], {}), "worker_os_ephemeral", false) ? ["Local"] : []
|
for_each = lookup(try(var.instances[each.key], {}), "worker_os_ephemeral", false) ? ["Local"] : []
|
||||||
@@ -115,3 +115,99 @@ resource "azurerm_linux_virtual_machine_scale_set" "worker" {
|
|||||||
ignore_changes = [instances, admin_username, admin_ssh_key, source_image_id]
|
ignore_changes = [instances, admin_username, admin_ssh_key, source_image_id]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resource "azurerm_linux_virtual_machine_scale_set" "worker_as" {
|
||||||
|
for_each = { for idx, name in local.regions : name => idx }
|
||||||
|
location = each.key
|
||||||
|
|
||||||
|
instances = lookup(try(var.instances[each.key], {}), "worker_count", 0)
|
||||||
|
name = "worker-${lower(each.key)}-as"
|
||||||
|
computer_name_prefix = "worker-${lower(each.key)}-as-"
|
||||||
|
resource_group_name = local.resource_group
|
||||||
|
sku = lookup(try(var.instances[each.key], {}), "worker_type", "Standard_B2s")
|
||||||
|
provision_vm_agent = false
|
||||||
|
overprovision = false
|
||||||
|
platform_fault_domain_count = 1
|
||||||
|
proximity_placement_group_id = length(var.zones) == 1 ? azurerm_proximity_placement_group.common[each.key].id : null
|
||||||
|
|
||||||
|
zone_balance = length(var.zones) > 0
|
||||||
|
zones = var.zones
|
||||||
|
|
||||||
|
eviction_policy = "Delete"
|
||||||
|
priority = "Spot"
|
||||||
|
|
||||||
|
network_interface {
|
||||||
|
name = "worker-${lower(each.key)}-as"
|
||||||
|
primary = true
|
||||||
|
network_security_group_id = local.network_secgroup[each.key].common
|
||||||
|
|
||||||
|
enable_accelerated_networking = true
|
||||||
|
ip_configuration {
|
||||||
|
name = "worker-${lower(each.key)}-as-v4"
|
||||||
|
primary = true
|
||||||
|
version = "IPv4"
|
||||||
|
subnet_id = local.network_private[each.key].network_id
|
||||||
|
}
|
||||||
|
ip_configuration {
|
||||||
|
name = "worker-${lower(each.key)}-as-v6"
|
||||||
|
version = "IPv6"
|
||||||
|
subnet_id = local.network_private[each.key].network_id
|
||||||
|
|
||||||
|
dynamic "public_ip_address" {
|
||||||
|
for_each = local.network_private[each.key].sku == "Standard" ? ["IPv6"] : []
|
||||||
|
content {
|
||||||
|
name = "worker-${lower(each.key)}-as-v6"
|
||||||
|
version = public_ip_address.value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
custom_data = base64encode(templatefile("${path.module}/templates/worker.yaml.tpl",
|
||||||
|
merge(var.kubernetes, var.acr, {
|
||||||
|
lbv4 = try(local.network_controlplane[each.key].controlplane_lb[0], "")
|
||||||
|
labels = local.worker_labels
|
||||||
|
nodeSubnets = [local.network_private[each.key].cidr[0]]
|
||||||
|
})
|
||||||
|
))
|
||||||
|
|
||||||
|
admin_username = "talos"
|
||||||
|
admin_ssh_key {
|
||||||
|
username = "talos"
|
||||||
|
public_key = var.ssh_public_key
|
||||||
|
}
|
||||||
|
|
||||||
|
os_disk {
|
||||||
|
caching = "ReadOnly"
|
||||||
|
storage_account_type = "Standard_LRS"
|
||||||
|
disk_size_gb = try(var.instances[each.key].worker_os_disk_size, 64)
|
||||||
|
|
||||||
|
diff_disk_settings {
|
||||||
|
option = "Local"
|
||||||
|
placement = "ResourceDisk"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
source_image_id = data.azurerm_shared_image_version.talos[length(regexall("^Standard_[DE][\\d+]p", lookup(try(var.instances[each.key], {}), "worker_type", ""))) > 0 ? "Arm64" : "x64"].id
|
||||||
|
# source_image_reference {
|
||||||
|
# publisher = "talos"
|
||||||
|
# offer = "Talos"
|
||||||
|
# sku = "1.0-dev"
|
||||||
|
# version = "latest"
|
||||||
|
# }
|
||||||
|
|
||||||
|
tags = merge(var.tags, {
|
||||||
|
type = "worker",
|
||||||
|
"cluster-autoscaler-enabled" = "true",
|
||||||
|
"cluster-autoscaler-name" = "${local.resource_group}-${lower(each.key)}",
|
||||||
|
"min" = 0,
|
||||||
|
"max" = 3,
|
||||||
|
|
||||||
|
"k8s.io_cluster-autoscaler_node-template_label_project.io_node-pool" = "worker"
|
||||||
|
})
|
||||||
|
|
||||||
|
boot_diagnostics {}
|
||||||
|
lifecycle {
|
||||||
|
ignore_changes = [instances, admin_username, admin_ssh_key, source_image_id]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -6,8 +6,13 @@ resource "azurerm_public_ip" "web_v4" {
|
|||||||
resource_group_name = local.resource_group
|
resource_group_name = local.resource_group
|
||||||
sku = local.network_public[each.key].sku
|
sku = local.network_public[each.key].sku
|
||||||
allocation_method = local.network_public[each.key].sku == "Standard" ? "Static" : "Dynamic"
|
allocation_method = local.network_public[each.key].sku == "Standard" ? "Static" : "Dynamic"
|
||||||
|
zones = local.network_public[each.key].sku == "Standard" ? var.zones : []
|
||||||
|
|
||||||
tags = merge(var.tags, { type = "web" })
|
tags = merge(var.tags, { type = "web" })
|
||||||
|
|
||||||
|
lifecycle {
|
||||||
|
ignore_changes = [zones]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "azurerm_lb" "web" {
|
resource "azurerm_lb" "web" {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ output "controlplane_endpoint_public" {
|
|||||||
value = try(one([for ip in azurerm_public_ip.controlplane_v4 : ip.ip_address if ip.ip_address != ""]), "127.0.0.1")
|
value = try(one([for ip in azurerm_public_ip.controlplane_v4 : ip.ip_address if ip.ip_address != ""]), "127.0.0.1")
|
||||||
}
|
}
|
||||||
|
|
||||||
# output "web_endpoint" {
|
output "web_endpoint" {
|
||||||
# description = "Kubernetes controlplane endpoint"
|
description = "Kubernetes controlplane endpoint"
|
||||||
# value = compact([for lb in azurerm_public_ip.web_v4 : lb.ip_address])
|
value = compact([for lb in azurerm_public_ip.web_v4 : lb.ip_address])
|
||||||
# }
|
}
|
||||||
|
|||||||
9
azure/services/outputs.tf
Normal file
9
azure/services/outputs.tf
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
output "registry" {
|
||||||
|
value = "${azurerm_container_registry.registry.name}.azurecr.io"
|
||||||
|
}
|
||||||
|
|
||||||
|
output "registry_token" {
|
||||||
|
value = azurerm_container_registry_token_password.containerd.password1[0].value
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
33
azure/services/registry.tf
Normal file
33
azure/services/registry.tf
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
|
||||||
|
resource "random_id" "registry" {
|
||||||
|
byte_length = 8
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_container_registry" "registry" {
|
||||||
|
name = "registry${random_id.registry.hex}"
|
||||||
|
resource_group_name = local.resource_group
|
||||||
|
location = local.regions[0]
|
||||||
|
sku = "Basic"
|
||||||
|
admin_enabled = false
|
||||||
|
|
||||||
|
tags = var.tags
|
||||||
|
}
|
||||||
|
|
||||||
|
data "azurerm_container_registry_scope_map" "pull" {
|
||||||
|
name = "_repositories_pull"
|
||||||
|
resource_group_name = local.resource_group
|
||||||
|
container_registry_name = azurerm_container_registry.registry.name
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_container_registry_token" "containerd" {
|
||||||
|
name = "containerd"
|
||||||
|
resource_group_name = local.resource_group
|
||||||
|
container_registry_name = azurerm_container_registry.registry.name
|
||||||
|
scope_map_id = data.azurerm_container_registry_scope_map.pull.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "azurerm_container_registry_token_password" "containerd" {
|
||||||
|
container_registry_token_id = azurerm_container_registry_token.containerd.id
|
||||||
|
|
||||||
|
password1 {}
|
||||||
|
}
|
||||||
@@ -3,8 +3,8 @@ terraform {
|
|||||||
required_providers {
|
required_providers {
|
||||||
azurerm = {
|
azurerm = {
|
||||||
source = "hashicorp/azurerm"
|
source = "hashicorp/azurerm"
|
||||||
version = "~> 3.40.0"
|
version = "~> 3.62.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
required_version = ">= 1.2"
|
required_version = ">= 1.5"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,6 +57,14 @@ machine:
|
|||||||
- os:reader
|
- os:reader
|
||||||
allowedKubernetesNamespaces:
|
allowedKubernetesNamespaces:
|
||||||
- kube-system
|
- kube-system
|
||||||
|
%{if acrRepo != "" }
|
||||||
|
registries:
|
||||||
|
config:
|
||||||
|
${acrRepo}:
|
||||||
|
auth:
|
||||||
|
username: ${acrUsername}
|
||||||
|
password: ${acrPassword}
|
||||||
|
%{endif}
|
||||||
cluster:
|
cluster:
|
||||||
adminKubeconfig:
|
adminKubeconfig:
|
||||||
certLifetime: 8h0m0s
|
certLifetime: 8h0m0s
|
||||||
@@ -102,6 +110,7 @@ cluster:
|
|||||||
manifests:
|
manifests:
|
||||||
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/_deployments/vars/talos-cloud-controller-manager-result.yaml
|
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/_deployments/vars/talos-cloud-controller-manager-result.yaml
|
||||||
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/azure/deployments/azure-cloud-controller-manager.yaml
|
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/azure/deployments/azure-cloud-controller-manager.yaml
|
||||||
|
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/azure/deployments/azure-autoscaler-result.yaml
|
||||||
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/azure/deployments/azuredisk-csi-driver-result.yaml
|
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/azure/deployments/azuredisk-csi-driver-result.yaml
|
||||||
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/azure/deployments/azuredisk-storage.yaml
|
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/azure/deployments/azuredisk-storage.yaml
|
||||||
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/_deployments/vars/metrics-server-result.yaml
|
- https://raw.githubusercontent.com/sergelogvinov/terraform-talos/main/_deployments/vars/metrics-server-result.yaml
|
||||||
|
|||||||
@@ -59,6 +59,14 @@ machine:
|
|||||||
keys:
|
keys:
|
||||||
- nodeID: {}
|
- nodeID: {}
|
||||||
slot: 0
|
slot: 0
|
||||||
|
%{if acrRepo != "" }
|
||||||
|
registries:
|
||||||
|
config:
|
||||||
|
${acrRepo}:
|
||||||
|
auth:
|
||||||
|
username: ${acrUsername}
|
||||||
|
password: ${acrPassword}
|
||||||
|
%{endif}
|
||||||
cluster:
|
cluster:
|
||||||
id: ${clusterID}
|
id: ${clusterID}
|
||||||
secret: ${clusterSecret}
|
secret: ${clusterSecret}
|
||||||
|
|||||||
@@ -73,6 +73,27 @@ variable "kubernetes" {
|
|||||||
sensitive = true
|
sensitive = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
variable "acr" {
|
||||||
|
type = map(string)
|
||||||
|
default = {
|
||||||
|
acrRepo = ""
|
||||||
|
acrUsername = ""
|
||||||
|
acrPassword = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "zones" {
|
||||||
|
description = "The Azure zones"
|
||||||
|
type = list(string)
|
||||||
|
default = ["1", "3"]
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "ssh_public_key" {
|
||||||
|
description = "The SSH-RSA public key, ssh-keygen -t rsa -b 2048 -f ~/.ssh/terraform -C 'terraform'"
|
||||||
|
type = string
|
||||||
|
default = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBx2qCSLlZ03TYqHm88pXZPyqZ3fvR1p2jWvsLt3uX+mBMr6B8S4vkX3oEBv43IEgi1bkIrdjJ50QvXNWS6fSOo6G0wZ0FHRCan3t4Kq2U+qoWkDsb5K0Kdgd9DZuaNM9412J2dWldYK7iD3hhQ3wh/E1gPlqrYb2AsPAarK+VA59n63QCDrpmGCW/Pki69e8Mt7HH/A1uw+4wvlrtaytrx6C3Y3/mQfBoas4XJliWHeTgEKeVdIzlOf9XrDnZ85pmvmQbFAtRtaRlfwCHMksVEwunYbg1RPrvQ8/YsSv6sFHwwvqjrJ7hdJcaa3afS3rUyAy7vkO0OXm4KdOEgE8X terraform"
|
||||||
|
}
|
||||||
|
|
||||||
variable "instances" {
|
variable "instances" {
|
||||||
description = "Map of region's properties"
|
description = "Map of region's properties"
|
||||||
type = map(any)
|
type = map(any)
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ spec:
|
|||||||
priorityClassName: overprovisioning
|
priorityClassName: overprovisioning
|
||||||
containers:
|
containers:
|
||||||
- name: reserve-resources
|
- name: reserve-resources
|
||||||
image: registry.k8s.io/pause:3.6
|
image: registry.k8s.io/pause:3.9
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: "700m"
|
cpu: "700m"
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ spec:
|
|||||||
priorityClassName: overprovisioning
|
priorityClassName: overprovisioning
|
||||||
containers:
|
containers:
|
||||||
- name: reserve-resources
|
- name: reserve-resources
|
||||||
image: registry.k8s.io/pause:3.6
|
image: registry.k8s.io/pause:3.9
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: "700m"
|
cpu: "700m"
|
||||||
|
|||||||
Reference in New Issue
Block a user