e3c51bb3ae
Add the Talos extension image and dedicated user volume configuration, point Longhorn at the mounted disk, and document rebuild and rolling-upgrade steps. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
146 lines
4.1 KiB
Terraform
146 lines
4.1 KiB
Terraform
provider "talos" {}
|
|
|
|
provider "kubernetes" {
|
|
host = talos_cluster_kubeconfig.cluster.kubernetes_client_configuration.host
|
|
client_certificate = base64decode(talos_cluster_kubeconfig.cluster.kubernetes_client_configuration.client_certificate)
|
|
client_key = base64decode(talos_cluster_kubeconfig.cluster.kubernetes_client_configuration.client_key)
|
|
cluster_ca_certificate = base64decode(talos_cluster_kubeconfig.cluster.kubernetes_client_configuration.ca_certificate)
|
|
}
|
|
|
|
provider "helm" {
|
|
kubernetes {
|
|
host = talos_cluster_kubeconfig.cluster.kubernetes_client_configuration.host
|
|
client_certificate = base64decode(talos_cluster_kubeconfig.cluster.kubernetes_client_configuration.client_certificate)
|
|
client_key = base64decode(talos_cluster_kubeconfig.cluster.kubernetes_client_configuration.client_key)
|
|
cluster_ca_certificate = base64decode(talos_cluster_kubeconfig.cluster.kubernetes_client_configuration.ca_certificate)
|
|
}
|
|
}
|
|
|
|
locals {
|
|
nodes = {
|
|
for node in var.nodes : node.name => node
|
|
}
|
|
|
|
bootstrap_nodes = [
|
|
for node in var.nodes : node
|
|
if node.bootstrap
|
|
]
|
|
|
|
bootstrap_node = one(local.bootstrap_nodes)
|
|
}
|
|
|
|
resource "talos_machine_secrets" "cluster" {
|
|
talos_version = var.talos_version
|
|
}
|
|
|
|
data "talos_client_configuration" "cluster" {
|
|
cluster_name = var.cluster_name
|
|
client_configuration = talos_machine_secrets.cluster.client_configuration
|
|
endpoints = [for node in var.nodes : node.ip]
|
|
nodes = [for node in var.nodes : node.ip]
|
|
}
|
|
|
|
data "talos_machine_configuration" "role" {
|
|
for_each = toset(["controlplane", "worker"])
|
|
|
|
cluster_name = var.cluster_name
|
|
cluster_endpoint = var.cluster_endpoint
|
|
machine_type = each.key
|
|
talos_version = var.talos_version
|
|
kubernetes_version = var.kubernetes_version
|
|
machine_secrets = talos_machine_secrets.cluster.machine_secrets
|
|
|
|
config_patches = [
|
|
yamlencode({
|
|
machine = {
|
|
install = {
|
|
disk = var.install_disk
|
|
image = var.talos_installer_image
|
|
}
|
|
}
|
|
cluster = {
|
|
network = {
|
|
cni = {
|
|
name = "none"
|
|
}
|
|
}
|
|
proxy = {
|
|
disabled = true
|
|
}
|
|
}
|
|
})
|
|
]
|
|
}
|
|
|
|
resource "talos_machine_configuration_apply" "node" {
|
|
for_each = local.nodes
|
|
|
|
client_configuration = talos_machine_secrets.cluster.client_configuration
|
|
machine_configuration_input = data.talos_machine_configuration.role[each.value.role].machine_configuration
|
|
endpoint = each.value.ip
|
|
node = each.value.ip
|
|
}
|
|
|
|
resource "talos_machine_bootstrap" "cluster" {
|
|
node = local.bootstrap_node.ip
|
|
endpoint = local.bootstrap_node.ip
|
|
client_configuration = talos_machine_secrets.cluster.client_configuration
|
|
depends_on = [talos_machine_configuration_apply.node]
|
|
}
|
|
|
|
resource "talos_cluster_kubeconfig" "cluster" {
|
|
client_configuration = talos_machine_secrets.cluster.client_configuration
|
|
node = local.bootstrap_node.ip
|
|
endpoint = local.bootstrap_node.ip
|
|
depends_on = [talos_machine_bootstrap.cluster]
|
|
}
|
|
|
|
resource "helm_release" "argocd" {
|
|
name = "argocd"
|
|
namespace = "argocd"
|
|
create_namespace = true
|
|
repository = "https://argoproj.github.io/argo-helm"
|
|
chart = "argo-cd"
|
|
version = var.argocd_chart_version
|
|
|
|
values = [yamlencode({
|
|
server = {
|
|
service = {
|
|
type = "ClusterIP"
|
|
}
|
|
}
|
|
controller = {
|
|
replicas = 1
|
|
}
|
|
repoServer = {
|
|
replicas = 1
|
|
}
|
|
applicationSet = {
|
|
replicas = 1
|
|
}
|
|
})]
|
|
|
|
depends_on = [talos_cluster_kubeconfig.cluster]
|
|
}
|
|
|
|
resource "kubernetes_secret_v1" "gitea" {
|
|
metadata {
|
|
name = "gitea-repository"
|
|
namespace = "argocd"
|
|
labels = {
|
|
"argocd.argoproj.io/secret-type" = "repository"
|
|
}
|
|
}
|
|
|
|
type = "Opaque"
|
|
|
|
data = {
|
|
type = "git"
|
|
url = var.gitea_repository_url
|
|
username = var.gitea_username
|
|
password = var.gitea_password
|
|
}
|
|
|
|
depends_on = [helm_release.argocd]
|
|
}
|