Skip to content

Commit 7f7b288

Browse files
committed
initial load
1 parent e498a1e commit 7f7b288

18 files changed

+1048
-0
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Local .terraform directories
2+
**/.terraform/*
3+
**/*.tfstate*
4+
**/*.out
5+
**/.terraform.*
6+
**/terraform.tfvars
7+
8+
# .tfstate files
9+
*.tfstate
10+
*.tfstate.*
11+
12+
# .tfvars files
13+
*.tfvars
14+
*env-vars
15+
16+
# Local Files
17+
**/.DS_Store
18+
**/crash.log
19+
**/.csv
20+
*.pem
21+
test/**
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Create a firewall
2+
resource "civo_firewall" "firewall" {
3+
name = "${var.cluster_name_prefix}-firewall"
4+
create_default_rules = false
5+
network_id = local.network_id
6+
7+
ingress_rule {
8+
label = "kubernetes-api-server"
9+
protocol = "tcp"
10+
port_range = "6443"
11+
cidr = var.kubernetes_api_access
12+
action = "allow"
13+
}
14+
egress_rule {
15+
label = "all"
16+
protocol = "tcp"
17+
port_range = "1-65535"
18+
cidr = ["0.0.0.0/0"]
19+
action = "allow"
20+
}
21+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Create a firewall
2+
resource "civo_firewall" "firewall-ingress" {
3+
name = "${var.cluster_name_prefix}-firewall-ingress"
4+
create_default_rules = false
5+
network_id = local.network_id
6+
ingress_rule {
7+
protocol = "tcp"
8+
port_range = "80"
9+
cidr = var.cluster_web_access
10+
label = "web"
11+
action = "allow"
12+
}
13+
14+
ingress_rule {
15+
protocol = "tcp"
16+
port_range = "443"
17+
cidr = var.cluster_websecure_access
18+
label = "websecure"
19+
action = "allow"
20+
}
21+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
resource "civo_object_store" "template" {
2+
count = var.object_store_enabled ? 1 : 0
3+
name = "${var.cluster_name_prefix}objectstore"
4+
max_size_gb = var.object_store_size
5+
}
6+
7+
8+
data "civo_object_store_credential" "object_store" {
9+
count = var.object_store_enabled ? 1 : 0
10+
id = civo_object_store.template[0].access_key_id
11+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Description: This file contains the configuration for deploying Grafana on Kubernetes using Helm.
2+
# Namespace
3+
resource "kubernetes_namespace" "landing_ns" {
4+
depends_on = [local_file.cluster-config]
5+
metadata {
6+
name = var.kubernetes_namespace
7+
}
8+
}
9+
10+
11+
12+
# Create namespace cluster-tools for supporting services
13+
resource "kubernetes_namespace" "cluster_tools" {
14+
metadata {
15+
name = var.cluster_tools_namespace
16+
# allow for privileged prometheus-node-exporter to scrape Hostnetwork & HostPID metrics
17+
labels = {
18+
"pod-security.kubernetes.io/enforce" = "privileged"
19+
}
20+
}
21+
22+
count = local.use_cluster_tools_namespace ? 1 : 0
23+
24+
}
25+
26+
locals {
27+
# Helm repos
28+
helm_repository = {
29+
ingress_nginx = "https://kubernetes.github.io/ingress-nginx"
30+
ingress_nginx_version = "4.11.2" #"4.6.1"
31+
jetstack = "https://charts.jetstack.io" # cert-manager
32+
jetstack_version = "1.15.3" #"1.12.0" # cert-manager
33+
grafana = "https://grafana.github.io/helm-charts"
34+
grafana_version = "8.4.8" #"8.13.1"
35+
prometheus = "https://prometheus-community.github.io/helm-charts"
36+
prometheus_version = "27.11.0" # "25.26.0"
37+
metrics_server = "https://kubernetes-sigs.github.io/metrics-server"
38+
metrics_server_version = "3.12.1" #"3.12.2"
39+
}
40+
use_cluster_tools_namespace = anytrue([var.grafana_enabled, var.prometheus_enabled]) ? true : false
41+
}
42+
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
locals {
2+
node_size = coalesce(
3+
var.cluster_node_size,
4+
var.compute_type == "ai" ? element(data.civo_size.ai.sizes, 0).name : element(data.civo_size.standard.sizes, 0).name
5+
)
6+
kubernetes_version = (
7+
length(data.civo_kubernetes_version.latest_talos.versions) > 0 ?
8+
coalesce(var.kubernetes_version, data.civo_kubernetes_version.latest_talos.versions[0].version) :
9+
var.kubernetes_version
10+
)
11+
}
12+
13+
resource "civo_kubernetes_cluster" "cluster" {
14+
name = "${var.cluster_name_prefix}-cluster"
15+
cluster_type = var.cluster_type
16+
kubernetes_version = local.kubernetes_version
17+
network_id = local.network_id # if not declare we use the default one
18+
firewall_id = civo_firewall.firewall.id
19+
region = var.region
20+
21+
cni = var.cni # Talos cluster type only support "flannel"
22+
23+
write_kubeconfig = true
24+
applications = var.cluster_type == "talos" ? "" : var.applications # "civo-cluster-autoscaler" applications = var.applications
25+
26+
pools {
27+
node_count = var.cluster_node_count
28+
size = local.node_size
29+
label = var.label # "my-pool-label" This label will be set as an annotation on the nodes in the pool
30+
# labels = var.node_pool_labels
31+
# taints = var.taints
32+
}
33+
timeouts {
34+
create = "5m"
35+
}
36+
# tags = var.tags
37+
# lifecycle {
38+
# ignore_changes = [ kubernetes_version]
39+
# }
40+
}
41+
42+
resource "local_file" "cluster-config" {
43+
content = civo_kubernetes_cluster.cluster.kubeconfig
44+
filename = "${path.module}/kubeconfig"
45+
file_permission = "0600"
46+
directory_permission = "0755"
47+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
data "civo_kubernetes_cluster" "cluster" {
2+
name = civo_kubernetes_cluster.cluster.name
3+
}
4+
5+
# Query instance sizes with 16 GB of RAM
6+
data "civo_size" "ai" {
7+
filter {
8+
key = "cpu"
9+
values = ["4"]
10+
}
11+
filter {
12+
key = "ram"
13+
values = ["16384"] # RAM in MB
14+
}
15+
16+
filter {
17+
key = "type"
18+
values = ["kubernetes"]
19+
}
20+
}
21+
22+
# Query instance sizes with 16 GB of RAM
23+
data "civo_size" "standard" {
24+
filter {
25+
key = "cpu"
26+
values = ["4"]
27+
}
28+
filter {
29+
key = "ram"
30+
values = ["8192"] # RAM in MB
31+
}
32+
33+
filter {
34+
key = "type"
35+
values = ["kubernetes"]
36+
}
37+
}
38+
39+
data "civo_kubernetes_version" "latest_talos" {
40+
filter {
41+
key = "type"
42+
values = ["talos"]
43+
}
44+
45+
filter {
46+
key = "default"
47+
values = ["true"]
48+
}
49+
sort {
50+
key = "version"
51+
direction = "desc"
52+
}
53+
}
54+
55+
# Query the Traefik service to get its load balancer hostname
56+
data "kubernetes_service" "traefik" {
57+
metadata {
58+
name = "traefik"
59+
namespace = "traefik"
60+
}
61+
depends_on = [helm_release.traefik_ingress]
62+
63+
}

0 commit comments

Comments
 (0)