Skip to content

Commit 59eed50

Browse files
committed
cluster autoscaler module
Signed-off-by: junior <junior@users.noreply.github.com>
1 parent 647292d commit 59eed50

File tree

4 files changed

+85
-26
lines changed

4 files changed

+85
-26
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
2+
# Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
3+
#
4+
5+
# Gets supported Kubernetes versions for node pools
6+
data "oci_containerengine_node_pool_option" "node_pool" {
7+
node_pool_option_id = "all"
8+
}

modules/oke/oke-autoscaler.tf renamed to modules/oke-cluster-autoscaler/main.tf

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,22 @@
33
#
44

55
locals {
6-
cluster_autoscaler_supported_k8s_versions = { "1.21" = "1.21.1-3", "1.22" = "1.22.2-4", "1.23" = "1.23.0-4" } # There's no API to get that list. Need to be updated manually
7-
cluster_autoscaler_image_version = lookup(local.cluster_autoscaler_supported_k8s_versions, local.k8s_major_minor_version, reverse(values(local.cluster_autoscaler_supported_k8s_versions))[0])
8-
cluster_autoscaler_default_region = "us-ashburn-1"
9-
cluster_autoscaler_image_regions = ["us-ashburn-1", "us-phoenix-1", "uk-london-1", "eu-frankfurt-1"]
10-
cluster_autoscaler_image_region = contains(local.cluster_autoscaler_image_regions, var.region) ? var.region : local.cluster_autoscaler_default_region
11-
cluster_autoscaler_image = "${local.cluster_autoscaler_image_region}.ocir.io/oracle/oci-cluster-autoscaler:${local.cluster_autoscaler_image_version}"
12-
cluster_autoscaler_log_level_verbosity = 4
13-
cluster_autoscaler_node_pool = var.create_new_oke_cluster ? oci_containerengine_node_pool.oke_node_pool[0].id : var.existent_oke_nodepool_id_for_autoscaler
14-
cluster_autoscaler_min_nodes = var.cluster_autoscaler_min_nodes
15-
cluster_autoscaler_max_nodes = var.cluster_autoscaler_max_nodes
6+
cluster_autoscaler_supported_k8s_versions = { "1.21" = "1.21.1-3", "1.22" = "1.22.2-4", "1.23" = "1.23.0-4" } # There's no API to get that list. Need to be updated manually
7+
cluster_autoscaler_image_version = lookup(local.cluster_autoscaler_supported_k8s_versions, local.k8s_major_minor_version, reverse(values(local.cluster_autoscaler_supported_k8s_versions))[0])
8+
cluster_autoscaler_default_region = "us-ashburn-1"
9+
cluster_autoscaler_image_regions = ["us-ashburn-1", "us-phoenix-1", "uk-london-1", "eu-frankfurt-1"]
10+
cluster_autoscaler_image_region = contains(local.cluster_autoscaler_image_regions, var.region) ? var.region : local.cluster_autoscaler_default_region
11+
cluster_autoscaler_image = "${local.cluster_autoscaler_image_region}.ocir.io/oracle/oci-cluster-autoscaler:${local.cluster_autoscaler_image_version}"
12+
cluster_autoscaler_log_level_verbosity = 4
13+
cluster_autoscaler_node_pools = [for map in var.oke_node_pools[*] : "--nodes=${map.node_pool_min_nodes}:${map.node_pool__max_nodes}:${map.node_pool_id}"]
14+
# cluster_autoscaler_node_pool = var.create_new_oke_cluster ? oci_containerengine_node_pool.oke_node_pool[0].id : var.existent_oke_nodepool_id_for_autoscaler
15+
# cluster_autoscaler_min_nodes = var.cluster_autoscaler_min_nodes
16+
# cluster_autoscaler_max_nodes = var.cluster_autoscaler_max_nodes
1617
cluster_autoscaler_max_node_provision_time = "25m"
1718
cluster_autoscaler_scale_down_delay_after_add = "10m"
1819
cluster_autoscaler_scale_down_unneeded_time = "10m"
1920
cluster_autoscaler_unremovable_node_recheck_timeout = "5m"
20-
cluster_autoscaler_enabled = alltrue([contains(keys(local.cluster_autoscaler_supported_k8s_versions), local.k8s_major_minor_version), var.create_new_oke_cluster]) ? var.cluster_autoscaler_enabled : false
21+
cluster_autoscaler_enabled = alltrue([contains(keys(local.cluster_autoscaler_supported_k8s_versions), local.k8s_major_minor_version)]) ? var.cluster_autoscaler_enabled : false
2122
k8s_major_minor_version = regex("\\d+(?:\\.(?:\\d+|x)(?:))", (var.k8s_version == "Latest") ? local.node_pool_k8s_latest_version : var.k8s_version)
2223
}
2324

@@ -33,8 +34,6 @@ resource "kubernetes_service_account" "cluster_autoscaler_sa" {
3334
}
3435
automount_service_account_token = true
3536

36-
depends_on = [oci_containerengine_node_pool.oke_node_pool]
37-
3837
count = local.cluster_autoscaler_enabled ? 1 : 0
3938
}
4039
resource "kubernetes_cluster_role" "cluster_autoscaler_cr" {
@@ -114,8 +113,6 @@ resource "kubernetes_cluster_role" "cluster_autoscaler_cr" {
114113
verbs = ["get", "update"]
115114
}
116115

117-
depends_on = [oci_containerengine_node_pool.oke_node_pool]
118-
119116
count = local.cluster_autoscaler_enabled ? 1 : 0
120117
}
121118
resource "kubernetes_role" "cluster_autoscaler_role" {
@@ -140,8 +137,6 @@ resource "kubernetes_role" "cluster_autoscaler_role" {
140137
verbs = ["delete", "get", "update", "watch"]
141138
}
142139

143-
depends_on = [oci_containerengine_node_pool.oke_node_pool]
144-
145140
count = local.cluster_autoscaler_enabled ? 1 : 0
146141
}
147142
resource "kubernetes_cluster_role_binding" "cluster_autoscaler_crb" {
@@ -164,8 +159,6 @@ resource "kubernetes_cluster_role_binding" "cluster_autoscaler_crb" {
164159
namespace = "kube-system"
165160
}
166161

167-
depends_on = [oci_containerengine_node_pool.oke_node_pool]
168-
169162
count = local.cluster_autoscaler_enabled ? 1 : 0
170163
}
171164
resource "kubernetes_role_binding" "cluster_autoscaler_rb" {
@@ -189,8 +182,6 @@ resource "kubernetes_role_binding" "cluster_autoscaler_rb" {
189182
namespace = "kube-system"
190183
}
191184

192-
depends_on = [oci_containerengine_node_pool.oke_node_pool]
193-
194185
count = local.cluster_autoscaler_enabled ? 1 : 0
195186
}
196187
resource "kubernetes_deployment" "cluster_autoscaler_deployment" {
@@ -239,13 +230,12 @@ resource "kubernetes_deployment" "cluster_autoscaler_deployment" {
239230
memory = "300Mi"
240231
}
241232
}
242-
command = [
233+
command = concat([
243234
"./cluster-autoscaler",
244235
"--v=${local.cluster_autoscaler_log_level_verbosity}",
245236
"--stderrthreshold=info",
246237
"--cloud-provider=oci",
247238
"--max-node-provision-time=${local.cluster_autoscaler_max_node_provision_time}",
248-
"--nodes=${local.cluster_autoscaler_min_nodes}:${local.cluster_autoscaler_max_nodes}:${local.cluster_autoscaler_node_pool}",
249239
"--scale-down-delay-after-add=${local.cluster_autoscaler_scale_down_delay_after_add}",
250240
"--scale-down-unneeded-time=${local.cluster_autoscaler_scale_down_unneeded_time}",
251241
"--unremovable-node-recheck-timeout=${local.cluster_autoscaler_unremovable_node_recheck_timeout}",
@@ -254,7 +244,8 @@ resource "kubernetes_deployment" "cluster_autoscaler_deployment" {
254244
"--balancing-ignore-label=hostname",
255245
"--balancing-ignore-label=internal_addr",
256246
"--balancing-ignore-label=oci.oraclecloud.com/fault-domain"
257-
]
247+
],
248+
local.cluster_autoscaler_node_pools)
258249
image_pull_policy = "Always"
259250
env {
260251
name = "OKE_USE_INSTANCE_PRINCIPAL"
@@ -271,7 +262,5 @@ resource "kubernetes_deployment" "cluster_autoscaler_deployment" {
271262

272263
wait_for_rollout = false
273264

274-
depends_on = [oci_containerengine_node_pool.oke_node_pool]
275-
276265
count = local.cluster_autoscaler_enabled ? 1 : 0
277266
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
2+
# Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
3+
#
4+
5+
terraform {
6+
required_version = ">= 1.1"
7+
required_providers {
8+
oci = {
9+
source = "oracle/oci"
10+
version = "~> 4"
11+
# https://registry.terraform.io/providers/oracle/oci/
12+
}
13+
kubernetes = {
14+
source = "hashicorp/kubernetes"
15+
version = "~> 2"
16+
# https://registry.terraform.io/providers/hashicorp/kubernetes/
17+
}
18+
local = {
19+
source = "hashicorp/local"
20+
version = "~> 2"
21+
# https://registry.terraform.io/providers/hashicorp/local/
22+
}
23+
}
24+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved.
2+
# Licensed under the Universal Permissive License v 1.0 as shown at http://oss.oracle.com/licenses/upl.
3+
#
4+
5+
# OKE Variables
6+
## OKE Autoscaler
7+
variable "cluster_autoscaler_enabled" {
8+
default = true
9+
description = "Enables OKE cluster autoscaler. Node pools will auto scale based on the resources usage"
10+
}
11+
variable "cluster_autoscaler_min_nodes" {
12+
default = 3
13+
description = "Minimum number of nodes on the node pool to be scheduled by the Kubernetes"
14+
}
15+
variable "cluster_autoscaler_max_nodes" {
16+
default = 10
17+
description = "Maximum number of nodes on the node pool to be scheduled by the Kubernetes"
18+
}
19+
20+
## OKE Node Pool Details
21+
variable "oke_node_pools" {
22+
type = list(any)
23+
24+
default = []
25+
description = "Node pools (id, min_nodes, max_nodes) to use with Cluster Autoscaler"
26+
}
27+
variable "k8s_version" {
28+
default = "Latest"
29+
description = "Kubernetes version installed on your worker nodes"
30+
}
31+
32+
# OCI Provider
33+
variable "region" {}
34+
35+
# Get OKE options
36+
locals {
37+
node_pool_k8s_latest_version = reverse(sort(data.oci_containerengine_node_pool_option.node_pool.kubernetes_versions))[0]
38+
}

0 commit comments

Comments
 (0)