diff --git a/CHANGELOG.md b/CHANGELOG.md index bd30129..d983bb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,3 +30,4 @@ and this project adheres to [Semantic Versioning v2.0.0](https://semver.org/spec - Configure ingress for Prometheus Grafana Alert manager - Fix encoding - Merge plan and plan-destroy terraform pipelines +- Configure HPA for services diff --git a/kubernetes/auth-deployment-cluster-ip/auth-deployment.yaml b/kubernetes/auth-deployment-cluster-ip/auth-deployment.yaml index ec57143..f5e595a 100644 --- a/kubernetes/auth-deployment-cluster-ip/auth-deployment.yaml +++ b/kubernetes/auth-deployment-cluster-ip/auth-deployment.yaml @@ -9,6 +9,11 @@ spec: matchLabels: app: event-triangle-auth-api replicas: 1 + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 # Create at most 1 extra pod during update + maxUnavailable: 1 # At most 1 pod can be unavailable template: metadata: labels: @@ -18,6 +23,13 @@ spec: - name: event-triangle-auth-api image: kaminome/auth-service:latest imagePullPolicy: Always + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 500m + memory: 512Mi ports: - containerPort: 80 - containerPort: 81 diff --git a/kubernetes/auth-deployment-cluster-ip/hpa.yaml b/kubernetes/auth-deployment-cluster-ip/hpa.yaml new file mode 100644 index 0000000..7a1728a --- /dev/null +++ b/kubernetes/auth-deployment-cluster-ip/hpa.yaml @@ -0,0 +1,25 @@ +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: event-triangle-auth-hpa + namespace: event-triangle +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: event-triangle-auth-deployment + minReplicas: 1 + maxReplicas: 5 + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 50 + - type: Resource + resource: + name: memory + target: + type: Utilization + averageUtilization: 70 diff --git a/kubernetes/consumer-deployment-cluster-ip/consumer-deployment.yaml b/kubernetes/consumer-deployment-cluster-ip/consumer-deployment.yaml index 833c1b4..e70a0e0 100644 --- a/kubernetes/consumer-deployment-cluster-ip/consumer-deployment.yaml +++ b/kubernetes/consumer-deployment-cluster-ip/consumer-deployment.yaml @@ -8,7 +8,12 @@ spec: selector: matchLabels: app: event-triangle-consumer-api - replicas: 1 + replicas: 3 + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 # Create at most 1 extra pod during update + maxUnavailable: 1 # At most 1 pod can be unavailable template: metadata: labels: @@ -18,6 +23,13 @@ spec: - name: event-triangle-consumer-api image: kaminome/consumer-service:latest imagePullPolicy: Always + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 500m + memory: 512Mi ports: - containerPort: 80 env: diff --git a/kubernetes/consumer-deployment-cluster-ip/hpa.yaml b/kubernetes/consumer-deployment-cluster-ip/hpa.yaml new file mode 100644 index 0000000..7116d19 --- /dev/null +++ b/kubernetes/consumer-deployment-cluster-ip/hpa.yaml @@ -0,0 +1,25 @@ +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: event-triangle-consumer-hpa + namespace: event-triangle +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: event-triangle-consumer-deployment + minReplicas: 1 + maxReplicas: 5 + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 50 + - type: Resource + resource: + name: memory + target: + type: Utilization + averageUtilization: 70 diff --git a/kubernetes/sender-deployment-cluster-ip/hpa.yaml b/kubernetes/sender-deployment-cluster-ip/hpa.yaml new file mode 100644 index 0000000..165d8d7 --- /dev/null +++ b/kubernetes/sender-deployment-cluster-ip/hpa.yaml @@ -0,0 +1,25 @@ +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: event-triangle-sender-hpa + namespace: event-triangle +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: event-triangle-sender-deployment + minReplicas: 1 + maxReplicas: 5 + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 50 + - type: Resource + resource: + name: memory + target: + type: Utilization + averageUtilization: 70 diff --git a/kubernetes/sender-deployment-cluster-ip/sender-deployment.yaml b/kubernetes/sender-deployment-cluster-ip/sender-deployment.yaml index 5edd31a..3f7c17e 100644 --- a/kubernetes/sender-deployment-cluster-ip/sender-deployment.yaml +++ b/kubernetes/sender-deployment-cluster-ip/sender-deployment.yaml @@ -8,7 +8,12 @@ spec: selector: matchLabels: app: event-triangle-sender-api - replicas: 1 + replicas: 3 + strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 # Create at most 1 extra pod during update + maxUnavailable: 1 # At most 1 pod can be unavailable template: metadata: labels: @@ -18,6 +23,13 @@ spec: - name: event-triangle-sender-api image: kaminome/sender-service:latest imagePullPolicy: Always + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 500m + memory: 512Mi ports: - containerPort: 80 - containerPort: 81 diff --git a/terraform/.tflint.hcl b/terraform/.tflint.hcl new file mode 100644 index 0000000..55f7758 --- /dev/null +++ b/terraform/.tflint.hcl @@ -0,0 +1,12 @@ +plugin "terraform" { + enabled = true + preset = "recommended" +} + +rule "terraform_unused_declarations" { + enabled = true +} + +rule "terraform_required_providers" { + enabled = true +} diff --git a/terraform/main.tf b/terraform/main.tf index aa0032a..9a60563 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -31,12 +31,11 @@ module "aks" { ] } -module "acr" { - count = var.should_deploy_acr ? 1 : 0 - source = "./modules/acr" +module "configure_acr_access" { + source = "./modules/acr-access" acr_name = var.acr_name aks_identity_principal_id = module.aks.principal_id - resource_group_name = "rg-azure-devops-acr-d01" # ACR is deployed outside AKS resource group + resource_group_name = "rg-azure-devops-acr-d01" aks_name = module.aks.name aks_resource_group = module.aks.resource_group_name diff --git a/terraform/modules/acr/main.tf b/terraform/modules/acr-access/main.tf similarity index 78% rename from terraform/modules/acr/main.tf rename to terraform/modules/acr-access/main.tf index 4a0855f..9b9340a 100644 --- a/terraform/modules/acr/main.tf +++ b/terraform/modules/acr-access/main.tf @@ -1,11 +1,3 @@ -# resource "azurerm_container_registry" "acr" { -# name = var.acr_name -# resource_group_name = var.resource_group_name -# location = var.resource_group_location -# sku = "Standard" -# admin_enabled = true -# } - data "azurerm_kubernetes_cluster" "aks" { name = var.aks_name resource_group_name = var.aks_resource_group diff --git a/terraform/modules/acr/variables.tf b/terraform/modules/acr-access/variables.tf similarity index 100% rename from terraform/modules/acr/variables.tf rename to terraform/modules/acr-access/variables.tf diff --git a/terraform/terraform.auto.tfvars.json b/terraform/terraform.auto.tfvars.json index e642697..e233dd2 100644 --- a/terraform/terraform.auto.tfvars.json +++ b/terraform/terraform.auto.tfvars.json @@ -8,7 +8,6 @@ "default_node_pool_type": "VirtualMachineScaleSets", "system_node_count": 3, "log_analytics_sku": "PerGB2018", - "should_deploy_acr": false, "should_deploy_log_analytics": false, "should_deploy_prometheus": false, "acr_name": "azuredevopsacrd01", diff --git a/terraform/variables.tf b/terraform/variables.tf index 30beb0c..797a586 100644 --- a/terraform/variables.tf +++ b/terraform/variables.tf @@ -48,11 +48,6 @@ variable "kubernetes_version" { description = "Kubernetes version" } -variable "should_deploy_acr" { - type = bool - description = "Should deploy ACR" -} - variable "should_deploy_log_analytics" { type = bool description = "Should deploy log analytics" diff --git a/terraform/versions.tf b/terraform/versions.tf index ff64132..705d863 100644 --- a/terraform/versions.tf +++ b/terraform/versions.tf @@ -15,6 +15,6 @@ terraform { version = ">=1.9.0" } } - + required_version = ">=1.11.0" backend "azurerm" {} }