Skip to content

Commit 4fe13e6

Browse files
authored
Merge pull request #3 from karimzakzouk/Marwan-HPA-1
HPA Added
2 parents 3a550df + 3b4162e commit 4fe13e6

File tree

8 files changed

+97
-40
lines changed

8 files changed

+97
-40
lines changed

Terraform/1-provider.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# Configure the AWS Provider
22
provider "aws" {
33
region = "us-east-1"
4-
}
4+
}

Terraform/3-main.tf

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
module "vpc" {
2-
source = "./modules/vpc"
3-
4-
vpc_cidr = var.vpc_cidr
5-
availability_zones = var.availability_zones
6-
public_subnet_cidrs = var.public_subnet_cidrs
7-
private_subnet_cidrs = var.private_subnet_cidrs
8-
cluster_name = var.cluster_name
2+
source = "./modules/vpc"
3+
4+
vpc_cidr = var.vpc_cidr
5+
availability_zones = var.availability_zones
6+
public_subnet_cidrs = var.public_subnet_cidrs
7+
private_subnet_cidrs = var.private_subnet_cidrs
8+
cluster_name = var.cluster_name
99
}
1010

1111
module "eks" {
12-
source = "./modules/eks"
13-
14-
cluster_name = var.cluster_name
15-
cluster_version = var.cluster_version
16-
vpc_id = module.vpc.vpc_id
17-
subnet_ids = module.vpc.private_subnet_ids
18-
node_groups = var.node_groups
12+
source = "./modules/eks"
13+
14+
cluster_name = var.cluster_name
15+
cluster_version = var.cluster_version
16+
vpc_id = module.vpc.vpc_id
17+
subnet_ids = module.vpc.private_subnet_ids
18+
node_groups = var.node_groups
19+
}
20+
21+
# EKS Addon: metrics-server (enables HPA CPU/memory metrics)
22+
resource "aws_eks_addon" "metrics_server" {
23+
cluster_name = module.eks.cluster_name
24+
addon_name = "metrics-server"
25+
addon_version = null
26+
resolve_conflicts = "OVERWRITE"
1927
}

Terraform/modules/eks/main.tf

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
resource "aws_eks_cluster" "main" {
2-
name = var.cluster_name
3-
version = var.cluster_version
4-
role_arn = aws_iam_role.cluster.arn
2+
name = var.cluster_name
3+
version = var.cluster_version
4+
role_arn = aws_iam_role.cluster.arn
55

66
access_config {
7-
authentication_mode = "API_AND_CONFIG_MAP"
8-
bootstrap_cluster_creator_admin_permissions = true
7+
authentication_mode = "API_AND_CONFIG_MAP"
8+
bootstrap_cluster_creator_admin_permissions = true
99
}
1010

1111
vpc_config {
@@ -72,11 +72,11 @@ resource "aws_iam_role_policy_attachment" "node_policy" {
7272

7373

7474
resource "aws_eks_node_group" "main" {
75-
for_each = var.node_groups
76-
cluster_name = aws_eks_cluster.main.name
77-
node_group_name = each.key
78-
node_role_arn = aws_iam_role.node.arn
79-
subnet_ids = var.subnet_ids
75+
for_each = var.node_groups
76+
cluster_name = aws_eks_cluster.main.name
77+
node_group_name = each.key
78+
node_role_arn = aws_iam_role.node.arn
79+
subnet_ids = var.subnet_ids
8080

8181
scaling_config {
8282
desired_size = each.value.scaling_config.desired_size
@@ -92,4 +92,3 @@ resource "aws_eks_node_group" "main" {
9292
aws_iam_role_policy_attachment.node_policy
9393
]
9494
}
95-

argocd/application.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@ metadata:
66
spec:
77
project: default
88
source:
9-
repoURL: 'https://github.com/KarimZakzouk/Graduation-Project-Devops'
9+
repoURL: "https://github.com/KarimZakzouk/Graduation-Project-Devops"
1010
targetRevision: main
1111
path: helm
1212
helm:
1313
valueFiles:
1414
- values.yaml
15+
parameters:
16+
- name: namespace
17+
value: ${APP_NAMESPACE}
1518
destination:
1619
server: https://kubernetes.default.svc
1720
namespace: ${APP_NAMESPACE}

backend/main.tf

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ resource "aws_s3_bucket" "terraform_state" {
2020

2121
# DynamoDB Table for state locking
2222
resource "aws_dynamodb_table" "terraform_locks" {
23-
name = "solar-system-terraform-locks"
24-
billing_mode = "PAY_PER_REQUEST"
25-
hash_key = "LockID"
23+
name = "solar-system-terraform-locks"
24+
billing_mode = "PAY_PER_REQUEST"
25+
hash_key = "LockID"
2626

2727
attribute {
2828
name = "LockID"
@@ -37,8 +37,8 @@ resource "aws_dynamodb_table" "terraform_locks" {
3737
# IAM OIDC Provider for GitHub
3838
# ----------------------------
3939
resource "aws_iam_openid_connect_provider" "github" {
40-
url = "https://token.actions.githubusercontent.com"
41-
client_id_list = ["sts.amazonaws.com"]
40+
url = "https://token.actions.githubusercontent.com"
41+
client_id_list = ["sts.amazonaws.com"]
4242
thumbprint_list = ["1c58a3a8518e8759bf075b76b750d4f2df264fcd"]
4343
}
4444

@@ -96,7 +96,7 @@ resource "aws_iam_role_policy" "github_actions_infra_policy" {
9696
"s3:DeleteBucket",
9797
"s3:GetBucketLocation",
9898
"s3:ListAllMyBuckets",
99-
99+
100100
# DynamoDB for state locking
101101
"dynamodb:GetItem",
102102
"dynamodb:PutItem",
@@ -107,13 +107,13 @@ resource "aws_iam_role_policy" "github_actions_infra_policy" {
107107
"dynamodb:TagResource",
108108
"dynamodb:UntagResource",
109109
"dynamodb:ListTagsOfResource",
110-
110+
111111
# EC2/VPC permissions
112112
"ec2:*",
113-
113+
114114
# EKS permissions
115115
"eks:*",
116-
116+
117117
# IAM permissions (be more specific in production)
118118
"iam:CreateRole",
119119
"iam:DeleteRole",
@@ -146,7 +146,7 @@ resource "aws_iam_role_policy" "github_actions_infra_policy" {
146146
"iam:TagRole",
147147
"iam:UntagRole",
148148
"iam:ListRoleTags",
149-
149+
150150
# Additional permissions for EKS
151151
"autoscaling:*",
152152
"logs:*",
@@ -156,4 +156,4 @@ resource "aws_iam_role_policy" "github_actions_infra_policy" {
156156
}
157157
]
158158
})
159-
}
159+
}

helm/templates/deployment.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ kind: Deployment
33
metadata:
44
name: {{ .Release.Name }}
55
spec:
6+
{{- if not .Values.autoscaling.enabled }}
67
replicas: {{ .Values.replicaCount }}
8+
{{- end }}
79
selector:
810
matchLabels:
911
app: {{ .Release.Name }}
@@ -33,4 +35,4 @@ spec:
3335
valueFrom:
3436
secretKeyRef:
3537
name: mongo-secrets
36-
key: MONGO_PASSWORD
38+
key: MONGO_PASSWORD

helm/templates/hpa.yaml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
apiVersion: autoscaling/v2
2+
3+
kind: HorizontalPodAutoscaler
4+
5+
metadata:
6+
name: {{ .Release.Name }}
7+
namespace: {{ .Release.Namespace }}
8+
9+
spec:
10+
scaleTargetRef:
11+
apiVersion: apps/v1
12+
kind: Deployment
13+
name: {{ .Release.Name }}
14+
15+
minReplicas: {{ .Values.autoscaling.minReplicas }}
16+
maxReplicas: {{ .Values.autoscaling.maxReplicas }}
17+
18+
metrics:
19+
- type: Resource
20+
resource:
21+
name: cpu
22+
target:
23+
type: Utilization
24+
averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }}
25+
- type: Resource
26+
resource:
27+
name: memory
28+
target:
29+
type: Utilization
30+
averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }}

helm/values.yaml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,19 @@ service:
1111
port: 80
1212
targetPort: 3000
1313

14-
namespace: ""
14+
namespace: ""
15+
16+
resources:
17+
requests:
18+
cpu: 100m
19+
memory: 128Mi
20+
limits:
21+
cpu: 500m
22+
memory: 512Mi
23+
24+
autoscaling:
25+
enabled: true
26+
minReplicas: 1
27+
maxReplicas: 10
28+
targetCPUUtilizationPercentage: 80
29+
targetMemoryUtilizationPercentage: 80

0 commit comments

Comments
 (0)