Skip to content

Commit 9dd25c4

Browse files
authored
Merge pull request #36 from walkline/blueprints-v5
Migrate to aws-eks-blueprints v5
2 parents 9dd5e10 + 6eba5bc commit 9dd25c4

File tree

10 files changed

+156
-79
lines changed

10 files changed

+156
-79
lines changed

.header.md

+4-5
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ scales up and down by allowing Kubernetes to modify the Amazon EC2 Auto Scaling
140140
141141
A basic logging and monitoring stack containing Prometheus, Grafana, Loki and Promtail is available at the following URL: `https://monitoring.{domain_name}`
142142
143-
To retrieve the Grafana administrative credentials, run the following command:
143+
To retrieve the Grafana administrative credentials (with `admin` username), run the following command:
144144
145145
```
146146
terraform output -json grafana_admin_password
@@ -208,10 +208,9 @@ Otherwise, you will need to manually remove some finalizers in the namespace and
208208
To clean up your environment, run the following commands:
209209
210210
```
211-
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.ingress_nginx[0].module.helm_addon.helm_release.addon[0]" -auto-approve
212-
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.ingress_nginx[0].kubernetes_namespace_v1.this[0]" -auto-approve
213-
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.prometheus[0].module.helm_addon.helm_release.addon[0]" -auto-approve
214-
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.prometheus[0].kubernetes_namespace_v1.prometheus[0]" -auto-approve
211+
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.ingress_nginx.helm_release.this[0]" -auto-approve
212+
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.kube_prometheus_stack.helm_release.this[0]" -auto-approve
213+
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.aws_load_balancer_controller.helm_release.this[0]" -auto-approve
215214
terraform destroy -target="module.eks_blueprints_kubernetes_addons" -auto-approve
216215
terraform destroy -auto-approve
217216
```

README.md

+8-8
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ scales up and down by allowing Kubernetes to modify the Amazon EC2 Auto Scaling
141141
142142
A basic logging and monitoring stack containing Prometheus, Grafana, Loki and Promtail is available at the following URL: `https://monitoring.{domain_name}`
143143
144-
To retrieve the Grafana administrative credentials, run the following command:
144+
To retrieve the Grafana administrative credentials (with `admin` username), run the following command:
145145
146146
```
147147
terraform output -json grafana_admin_password
@@ -209,10 +209,9 @@ Otherwise, you will need to manually remove some finalizers in the namespace and
209209
To clean up your environment, run the following commands:
210210
211211
```
212-
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.ingress_nginx[0].module.helm_addon.helm_release.addon[0]" -auto-approve
213-
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.ingress_nginx[0].kubernetes_namespace_v1.this[0]" -auto-approve
214-
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.prometheus[0].module.helm_addon.helm_release.addon[0]" -auto-approve
215-
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.prometheus[0].kubernetes_namespace_v1.prometheus[0]" -auto-approve
212+
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.ingress_nginx.helm_release.this[0]" -auto-approve
213+
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.kube_prometheus_stack.helm_release.this[0]" -auto-approve
214+
terraform destroy -target="module.eks_blueprints_kubernetes_addons.module.aws_load_balancer_controller.helm_release.this[0]" -auto-approve
216215
terraform destroy -target="module.eks_blueprints_kubernetes_addons" -auto-approve
217216
terraform destroy -auto-approve
218217
```
@@ -252,8 +251,9 @@ After you deploy this Partner Solution, confirm that your resources and services
252251
|------|--------|---------|
253252
| <a name="module_container_registry"></a> [container\_registry](#module\_container\_registry) | ./modules/container-registry | n/a |
254253
| <a name="module_databases"></a> [databases](#module\_databases) | ./modules/databases | n/a |
255-
| <a name="module_eks_blueprints"></a> [eks\_blueprints](#module\_eks\_blueprints) | github.com/aws-ia/terraform-aws-eks-blueprints | v4.32.1 |
256-
| <a name="module_eks_blueprints_kubernetes_addons"></a> [eks\_blueprints\_kubernetes\_addons](#module\_eks\_blueprints\_kubernetes\_addons) | github.com/aws-ia/terraform-aws-eks-blueprints//modules/kubernetes-addons | v4.32.1 |
254+
| <a name="module_ebs_csi_driver_irsa"></a> [ebs\_csi\_driver\_irsa](#module\_ebs\_csi\_driver\_irsa) | terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks | ~> 5.20 |
255+
| <a name="module_eks_blueprints"></a> [eks\_blueprints](#module\_eks\_blueprints) | terraform-aws-modules/eks/aws | ~> 19.13 |
256+
| <a name="module_eks_blueprints_kubernetes_addons"></a> [eks\_blueprints\_kubernetes\_addons](#module\_eks\_blueprints\_kubernetes\_addons) | aws-ia/eks-blueprints-addons/aws | ~> 1.8.0 |
257257
| <a name="module_file_storage"></a> [file\_storage](#module\_file\_storage) | ./modules/file-storage | n/a |
258258
| <a name="module_monitoring"></a> [monitoring](#module\_monitoring) | ./modules/monitoring | n/a |
259259
| <a name="module_vpc"></a> [vpc](#module\_vpc) | ./modules/vpc | n/a |
@@ -287,7 +287,7 @@ After you deploy this Partner Solution, confirm that your resources and services
287287
| <a name="input_eks_cluster_name_prefix"></a> [eks\_cluster\_name\_prefix](#input\_eks\_cluster\_name\_prefix) | EKS name prefix for the new cluster | `string` | `"mendix-eks"` | no |
288288
| <a name="input_eks_node_instance_type"></a> [eks\_node\_instance\_type](#input\_eks\_node\_instance\_type) | EKS instance type | `string` | `"t3.medium"` | no |
289289
| <a name="input_environments_internal_names"></a> [environments\_internal\_names](#input\_environments\_internal\_names) | List of internal environments names | `list(string)` | <pre>[<br> "app1"<br>]</pre> | no |
290-
| <a name="input_mendix_operator_version"></a> [mendix\_operator\_version](#input\_mendix\_operator\_version) | Mendix Private Cloud Operator version | `string` | `"2.12.0"` | no |
290+
| <a name="input_mendix_operator_version"></a> [mendix\_operator\_version](#input\_mendix\_operator\_version) | Mendix Private Cloud Operator version | `string` | `"2.13.0"` | no |
291291
| <a name="input_postgres_version"></a> [postgres\_version](#input\_postgres\_version) | The version of Postgres that terraform would create. | `string` | `"14.8"` | no |
292292
293293
## Outputs

helm-values/prometheus-values.yaml

+63-8
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,66 @@
1-
server:
2-
retention: 60d
3-
persistentVolume:
4-
enabled: true
5-
size: 30Gi
1+
prometheus:
2+
prometheusSpec:
3+
additionalScrapeConfigs:
4+
- job_name: kubernetes-pods
5+
kubernetes_sd_configs:
6+
- role: pod
7+
relabel_configs:
8+
- action: keep
9+
regex: true
10+
source_labels:
11+
- __meta_kubernetes_pod_annotation_prometheus_io_scrape
12+
- action: drop
13+
regex: true
14+
source_labels:
15+
- __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow
16+
- action: replace
17+
regex: (https?)
18+
source_labels:
19+
- __meta_kubernetes_pod_annotation_prometheus_io_scheme
20+
target_label: __scheme__
21+
- action: replace
22+
regex: (.+)
23+
source_labels:
24+
- __meta_kubernetes_pod_annotation_prometheus_io_path
25+
target_label: __metrics_path__
26+
- action: replace
27+
regex: ([^:]+)(?::\d+)?;(\d+)
28+
replacement: $1:$2
29+
source_labels:
30+
- __address__
31+
- __meta_kubernetes_pod_annotation_prometheus_io_port
32+
target_label: __address__
33+
- action: labelmap
34+
regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+)
35+
replacement: __param_$1
36+
- action: labelmap
37+
regex: __meta_kubernetes_pod_label_(.+)
38+
- action: replace
39+
source_labels:
40+
- __meta_kubernetes_namespace
41+
target_label: namespace
42+
- action: replace
43+
source_labels:
44+
- __meta_kubernetes_pod_name
45+
target_label: pod
46+
- action: drop
47+
regex: Pending|Succeeded|Failed|Completed
48+
source_labels:
49+
- __meta_kubernetes_pod_phase
50+
retention: 60d
51+
storageSpec:
52+
volumeClaimTemplate:
53+
metadata:
54+
name: prometheus-server
55+
spec:
56+
storageClassName: gp2
57+
accessModes: ["ReadWriteOnce"]
58+
resources:
59+
requests:
60+
storage: 30Gi
661

7-
pushgateway:
8-
enabled: false
9-
1062
alertmanager:
1163
enabled: false
64+
65+
grafana:
66+
enabled: false

main.tf

+62-43
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ resource "random_string" "random_eks_suffix" {
99
}
1010

1111
data "aws_eks_cluster_auth" "this" {
12-
name = module.eks_blueprints.eks_cluster_id
12+
name = module.eks_blueprints.cluster_name
1313
}
1414

1515
module "vpc" {
@@ -42,7 +42,7 @@ resource "aws_iam_policy" "environment_policy" {
4242
name = "${local.cluster_name}-env-policy"
4343
description = "Environment Template Policy"
4444

45-
policy = templatefile("./iam-templates/iam_environment_policy.json.tpl", {
45+
policy = templatefile("${path.module}/iam-templates/iam_environment_policy.json.tpl", {
4646
aws_region = var.aws_region
4747
aws_account_id = data.aws_caller_identity.current.account_id
4848
db_instance_resource_ids = [for value in values(module.databases) : tostring(value.database_resource_id[0])]
@@ -54,7 +54,7 @@ resource "aws_iam_policy" "provisioner_policy" {
5454
name = "${local.cluster_name}-provisioner-policy"
5555
description = "Storage Provisioner admin Policy"
5656

57-
policy = templatefile("./iam-templates/iam_provisioner_policy.json.tpl", {
57+
policy = templatefile("${path.module}/iam-templates/iam_provisioner_policy.json.tpl", {
5858
aws_region = var.aws_region
5959
aws_account_id = data.aws_caller_identity.current.account_id
6060
db_instance_resource_ids = [for value in values(module.databases) : tostring(value.database_resource_id[0])]
@@ -107,40 +107,31 @@ resource "aws_ebs_encryption_by_default" "ebs_encryption" {
107107
}
108108

109109
module "eks_blueprints" {
110-
source = "github.com/aws-ia/terraform-aws-eks-blueprints?ref=v4.32.1"
111-
112-
node_security_group_additional_rules = {
113-
cluster_to_nginx_webhook = {
114-
description = "Cluster to ingress-nginx webhook"
115-
protocol = "tcp"
116-
from_port = 8443
117-
to_port = 8443
118-
type = "ingress"
119-
source_cluster_security_group = true
120-
}
121-
cluster_to_load_balancer_controller_webhook = {
122-
description = "Cluster to load balancer controller webhook"
123-
protocol = "tcp"
124-
from_port = 9443
125-
to_port = 9443
126-
type = "ingress"
127-
source_cluster_security_group = true
128-
}
129-
}
110+
source = "terraform-aws-modules/eks/aws"
111+
version = "~> 19.13"
130112

131113
# EKS CLUSTER
132-
cluster_name = local.cluster_name
133-
cluster_version = "1.24"
134-
vpc_id = module.vpc.vpc_id
135-
private_subnet_ids = module.vpc.vpc_private_subnets
114+
cluster_name = local.cluster_name
115+
cluster_version = "1.26"
116+
vpc_id = module.vpc.vpc_id
117+
subnet_ids = module.vpc.vpc_private_subnets
136118

137119
cluster_endpoint_public_access = true
138120
cluster_endpoint_private_access = true
139121
cluster_endpoint_public_access_cidrs = var.allowed_ips
140122

123+
create_node_security_group = false
124+
141125
# EKS MANAGED NODE GROUPS
142-
managed_node_groups = {
126+
eks_managed_node_groups = {
143127
t3_medium = {
128+
min_size = 3
129+
max_size = 3
130+
desired_size = 3
131+
132+
attach_cluster_primary_security_group = true
133+
vpc_security_group_ids = [module.eks_blueprints.cluster_primary_security_group_id]
134+
144135
node_group_name = "managed-ondemand"
145136
instance_types = [var.eks_node_instance_type]
146137
subnet_ids = module.vpc.vpc_private_subnets
@@ -151,41 +142,52 @@ module "eks_blueprints" {
151142
}
152143

153144
module "eks_blueprints_kubernetes_addons" {
154-
source = "github.com/aws-ia/terraform-aws-eks-blueprints//modules/kubernetes-addons?ref=v4.32.1"
145+
source = "aws-ia/eks-blueprints-addons/aws"
146+
version = "~> 1.8.0"
155147

156-
eks_cluster_id = module.eks_blueprints.eks_cluster_id
157-
eks_cluster_endpoint = module.eks_blueprints.eks_cluster_endpoint
158-
eks_oidc_provider = module.eks_blueprints.oidc_provider
159-
eks_cluster_version = module.eks_blueprints.eks_cluster_version
160-
eks_cluster_domain = var.domain_name
148+
cluster_name = module.eks_blueprints.cluster_name
149+
cluster_endpoint = module.eks_blueprints.cluster_endpoint
150+
oidc_provider_arn = module.eks_blueprints.oidc_provider_arn
151+
cluster_version = module.eks_blueprints.cluster_version
161152

162153
# EKS Managed Add-ons
163-
enable_amazon_eks_coredns = true
164-
enable_amazon_eks_kube_proxy = true
165-
enable_amazon_eks_aws_ebs_csi_driver = true
154+
eks_addons = {
155+
coredns = {}
156+
kube-proxy = {}
157+
aws-ebs-csi-driver = {
158+
service_account_role_arn = module.ebs_csi_driver_irsa.iam_role_arn
159+
}
160+
}
166161

167162
# Add-ons
168163
enable_aws_load_balancer_controller = true
164+
aws_load_balancer_controller = {
165+
chart_version = "1.6.1"
166+
set = [{
167+
name = "enableServiceMutatorWebhook"
168+
value = "false"
169+
}]
170+
}
169171

170172
enable_external_dns = true
171173
external_dns_route53_zone_arns = [
172174
aws_route53_zone.cluster_dns.arn
173175
]
174-
external_dns_helm_config = {
176+
external_dns = {
175177
values = [templatefile("${path.module}/helm-values/external-dns-values.yaml", {
176178
hostname = var.domain_name
177179
})]
178180
}
179181

180182
enable_ingress_nginx = true
181-
ingress_nginx_helm_config = {
183+
ingress_nginx = {
182184
values = [templatefile("${path.module}/helm-values/nginx-values.yaml", {
183185
hostname = var.domain_name
184186
})]
185187
}
186188

187189
enable_cert_manager = true
188-
cert_manager_helm_config = {
190+
cert_manager = {
189191
set_values = [
190192
{
191193
name = "extraArgs[0]"
@@ -194,9 +196,10 @@ module "eks_blueprints_kubernetes_addons" {
194196
]
195197
}
196198

197-
enable_prometheus = true
198-
prometheus_helm_config = {
199-
values = [templatefile("${path.module}/helm-values/prometheus-values.yaml", {})]
199+
enable_kube_prometheus_stack = true
200+
kube_prometheus_stack = {
201+
namespace = "prometheus"
202+
values = [templatefile("${path.module}/helm-values/prometheus-values.yaml", {})]
200203
}
201204

202205
depends_on = [module.eks_blueprints, aws_route53_zone.cluster_dns]
@@ -251,4 +254,20 @@ resource "helm_release" "mendix_installer" {
251254
]
252255

253256
depends_on = [module.eks_blueprints, module.eks_blueprints_kubernetes_addons]
257+
}
258+
259+
module "ebs_csi_driver_irsa" {
260+
source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
261+
version = "~> 5.20"
262+
263+
role_name_prefix = "${module.eks_blueprints.cluster_name}-ebs-csi-driver-"
264+
265+
attach_ebs_csi_policy = true
266+
267+
oidc_providers = {
268+
main = {
269+
provider_arn = module.eks_blueprints.oidc_provider_arn
270+
namespace_service_accounts = ["kube-system:ebs-csi-controller-sa"]
271+
}
272+
}
254273
}

modules/monitoring/dashboards/pvc_disk_space.json.tpl

+2-2
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@
127127
"uid": "PBFA97CFB590B2093"
128128
},
129129
"editorMode": "code",
130-
"expr": "kubelet_volume_stats_used_bytes{namespace=\"prometheus\",persistentvolumeclaim=\"prometheus-server\"}",
130+
"expr": "kubelet_volume_stats_used_bytes{namespace=\"prometheus\",persistentvolumeclaim=\"prometheus-server-prometheus-kube-prometheus-stack-prometheus-0\"}",
131131
"format": "time_series",
132132
"interval": "",
133133
"intervalFactor": 1,
@@ -138,7 +138,7 @@
138138
],
139139
"thresholds": [],
140140
"timeRegions": [],
141-
"title": "disk space used (PVC \"prometheus-server\")",
141+
"title": "disk space used (PVC \"prometheus-server-prometheus-kube-prometheus-stack-prometheus-0\")",
142142
"tooltip": {
143143
"shared": true,
144144
"sort": 0,

modules/monitoring/helm-values/grafana-values.yaml.tpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ datasources:
3333
datasources:
3434
- name: Prometheus
3535
type: prometheus
36-
url: http://prometheus-server.prometheus.svc.cluster.local
36+
url: http://kube-prometheus-stack-prometheus.prometheus.svc.cluster.local:9090
3737
access: proxy
3838
isDefault: true
3939
- name: Loki

modules/vpc/main.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ data "aws_availability_zones" "available" {}
22

33
module "vpc" {
44
source = "terraform-aws-modules/vpc/aws"
5-
version = "4.0.1"
5+
version = "5.1.2"
66

77
name = "${var.cluster_name}-vpc"
88
cidr = "10.0.0.0/16"

providers.tf

+4-4
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@ provider "aws" {
4343
}
4444

4545
provider "kubernetes" {
46-
host = module.eks_blueprints.eks_cluster_endpoint
47-
cluster_ca_certificate = base64decode(module.eks_blueprints.eks_cluster_certificate_authority_data)
46+
host = module.eks_blueprints.cluster_endpoint
47+
cluster_ca_certificate = base64decode(module.eks_blueprints.cluster_certificate_authority_data)
4848
token = data.aws_eks_cluster_auth.this.token
4949
}
5050

5151
provider "helm" {
5252
kubernetes {
53-
host = module.eks_blueprints.eks_cluster_endpoint
54-
cluster_ca_certificate = base64decode(module.eks_blueprints.eks_cluster_certificate_authority_data)
53+
host = module.eks_blueprints.cluster_endpoint
54+
cluster_ca_certificate = base64decode(module.eks_blueprints.cluster_certificate_authority_data)
5555
token = data.aws_eks_cluster_auth.this.token
5656
}
5757
}

0 commit comments

Comments
 (0)