From 3d972a5d91a56dc910503b0515504bb3788b06fa Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 13 Jun 2024 16:18:26 +0800 Subject: [PATCH 01/21] resolve issue that caused by insufficient memory. --- .../src/main/arm/createUiDefinition.json | 89 ++++++++++++------- 1 file changed, 57 insertions(+), 32 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index d42618ec9..f43c8cbdb 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -311,34 +311,6 @@ "uri": "https://aka.ms/wls-aks-well-tested-version" } } - }, - { - "name": "aksNodeCount", - "type": "Microsoft.Common.Slider", - "min": 1, - "max": 100, - "label": "Minimum node count", - "defaultValue": 3, - "showStepMarkers": false, - "toolTip": "Set the minimum node count for the cluster.", - "constraints": { - "required": true - }, - "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" - }, - { - "name": "aksNodeMaxCount", - "type": "Microsoft.Common.Slider", - "min": "[int(steps('section_aks').clusterInfo.aksNodeCount)]", - "max": 100, - "label": "Maximum node count", - "defaultValue": 5, - "showStepMarkers": false, - "toolTip": "Set the maximum node count for the cluster.", - "constraints": { - "required": true - }, - "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" }, { "name": "nodeVMSizeSelector", @@ -358,7 +330,59 @@ "osPlatform": "Linux", "count": "[steps('section_aks').clusterInfo.aksNodeCount]", "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" - } + }, + { + "name": "listVMSizes", + "type": "Microsoft.Solutions.ArmApiControl", + "request": { + "method": "GET", + "path": "[concat(subscription().id, '/providers/Microsoft.Compute/locations/',location(),'/vmSizes?api-version=2024-03-01')]" + } + }, + { + "name": "aksNodeCount", + "type": "Microsoft.Common.TextBox", + "label": "Minimum node count (The recommended value is calculated dynamically based on selected VM size)", + "toolTip": "Set the minimum node count for the cluster.", + "placeholder": "[add(1,div(16384, first(filter(steps('section_aks').clusterInfo.listVMSizes.value, (item) => equals(item.name, steps('section_aks').clusterInfo.nodeVMSizeSelector))).memoryInMB))]", + "multiLine": false, + "constraints": { + "required": true, + "validations": [ + { + "regex": "^([1-9][0-9]{0,2})$", + "message": "Only integer are allowed, and the value must be less than 1000." + }, + { + "isValid": "[greaterOrEquals(steps('section_aks').clusterInfo.aksNodeCount, add(1,div(16384, first(filter(steps('section_aks').clusterInfo.listVMSizes.value, (item) => equals(item.name, steps('section_aks').clusterInfo.nodeVMSizeSelector))).memoryInMB)))]", + "message": "Must meet the minimum requirement, please clean your input to see the recommended value." + } + ] + }, + "visible": true + }, + { + "name": "aksNodeMaxCount", + "type": "Microsoft.Common.TextBox", + "label": "Maximum node count (The recommended value is calculated dynamically based on selected VM size)", + "toolTip": "Set the maximum node count for the cluster.", + "placeholder": "[add(5,div(16384, first(filter(steps('section_aks').clusterInfo.listVMSizes.value, (item) => equals(item.name, steps('section_aks').clusterInfo.nodeVMSizeSelector))).memoryInMB))]", + "multiLine": false, + "constraints": { + "required": true, + "validations": [ + { + "regex": "^([1-9][0-9]{0,2})$", + "message": "Only integer are allowed, and the value must be less than 1000." + }, + { + "isValid": "[greaterOrEquals(steps('section_aks').clusterInfo.aksNodeMaxCount, steps('section_aks').clusterInfo.aksNodeCount)]", + "message": "The number should not be less then the minimum node count." + } + ] + }, + "visible": true + } ] }, { @@ -2024,7 +2048,8 @@ } ] }, - "visible": "[and(bool(steps('section_database').enableDB), not(and(steps('section_database').databaseConnectionInfo.enablePswlessConnection0, equals(steps('section_database').databaseConnectionInfo.databaseType, 'sqlserver'))))]" }, + "visible": "[and(bool(steps('section_database').enableDB), not(and(steps('section_database').databaseConnectionInfo.enablePswlessConnection0, equals(steps('section_database').databaseConnectionInfo.databaseType, 'sqlserver'))))]" + }, { "name": "enablePswlessConnection", "type": "Microsoft.Common.CheckBox", @@ -2258,7 +2283,7 @@ "visible": "[equals(steps('section_autoScaling').autoScalingInfo.kmsMetrics, 'memory')]" } ], - "visible": "[bool(steps('section_autoScaling').enableAutoscaling)]" + "visible": "[bool(steps('section_autoScaling').enableAutoscaling)]" } ] } @@ -2363,4 +2388,4 @@ "wlsUserName": "[basics('basicsRequired').wlsUserName]" } } -} +} \ No newline at end of file From 76f678e10127b719c2b8727596c98dce03f2e7e3 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 13 Jun 2024 16:45:40 +0800 Subject: [PATCH 02/21] fail fast for insufficient memory. --- .../inline-scripts/validateParameters.sh | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh index e80f3fe66..8ed12cd90 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh @@ -126,6 +126,28 @@ function validate_compute_resources() { echo_stdout "Check compute resources: passed!" } +# The offer deploys a WLS cluster with 3 pods (1.5GB, 250CPU) +# Ensure the cluster has enough memory resources. +# Minimum memory requirement: 16GiB +function validate_memory_resources() { + if [[ "${createAKSCluster,,}" == "true" ]]; then + local requiredMemoryinGB=16 + + local vmDetails=$(az vm list-skus --size ${aksAgentPoolVMSize} -l ${location} --query [0]) + validate_status "Query VM details of ${aksAgentPoolVMSize} in ${location}." + + local memoryGB=$(echo ${vmDetails} | jq '.capabilities[] | select(.name=="memoryGB") | .value' | tr -d "\"") + local requestedMemory=$((aksAgentPoolNodeCount * memoryGB)) + if [[ ${requestedMemory} -le ${requiredMemoryinGB} ]]; then + echo_stderr "It requires ${requiredMemoryinGB} GiB memory to create the AKS cluster, you have to select a larger VM size of increase node count." + exit 1 + fi + + fi + + echo_stdout "Check memory resources: passed!" +} + function validate_ocr_account() { # install docker cli install_docker @@ -601,6 +623,8 @@ sslCertificateKeyVaultOption="keyVaultStoredConfig" validate_compute_resources +validate_memory_resources + validate_base_image_path validate_acr_admin_enabled From 9187bf4ef36de08df32708449995649dc05f87fb Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 14 Jun 2024 09:40:14 +0800 Subject: [PATCH 03/21] caculate the memory according to replicas. --- .../arm/scripts/inline-scripts/validateParameters.sh | 9 +++++---- weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 1 + .../_deployment-scripts/_ds-validate-parameters.bicep | 5 +++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh index 8ed12cd90..bfc394a40 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh @@ -126,20 +126,21 @@ function validate_compute_resources() { echo_stdout "Check compute resources: passed!" } -# The offer deploys a WLS cluster with 3 pods (1.5GB, 250CPU) +# The offer deploys a WLS cluster with 1 + ${APP_REPLICAS} pods, each pod request 1.5GB and 0.25CPU. # Ensure the cluster has enough memory resources. -# Minimum memory requirement: 16GiB +# Minimum memory requirement: 12 + (APP_REPLICAS + 1)*1.5 GB function validate_memory_resources() { if [[ "${createAKSCluster,,}" == "true" ]]; then - local requiredMemoryinGB=16 + local requiredMemoryinGB=$((12 + (APP_REPLICAS + 1)*1.5)) local vmDetails=$(az vm list-skus --size ${aksAgentPoolVMSize} -l ${location} --query [0]) validate_status "Query VM details of ${aksAgentPoolVMSize} in ${location}." local memoryGB=$(echo ${vmDetails} | jq '.capabilities[] | select(.name=="memoryGB") | .value' | tr -d "\"") local requestedMemory=$((aksAgentPoolNodeCount * memoryGB)) + echo_stdout "Current requested memory is ${requestedMemory}GB." if [[ ${requestedMemory} -le ${requiredMemoryinGB} ]]; then - echo_stderr "It requires ${requiredMemoryinGB} GiB memory to create the AKS cluster, you have to select a larger VM size of increase node count." + echo_stderr "It requires ${requiredMemoryinGB} GiB memory to create the AKS cluster, you have to select a larger VM size or increase node count." exit 1 fi diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index e7752ed01..ac9ec9f6f 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -409,6 +409,7 @@ module validateInputs 'modules/_deployment-scripts/_ds-validate-parameters.bicep appGatewayCertificateOption: appGatewayCertificateOption appGatewaySSLCertData: appGatewaySSLCertData appGatewaySSLCertPassword: appGatewaySSLCertPassword + appReplicas: appReplicas azCliVersion: const_azcliVersion createAKSCluster: createAKSCluster createDNSZone: createDNSZone diff --git a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds-validate-parameters.bicep b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds-validate-parameters.bicep index ddf87d8e3..6b0aa0011 100644 --- a/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds-validate-parameters.bicep +++ b/weblogic-azure-aks/src/main/bicep/modules/_deployment-scripts/_ds-validate-parameters.bicep @@ -12,6 +12,7 @@ param appGatewayCertificateOption string param appGatewaySSLCertData string @secure() param appGatewaySSLCertPassword string +param appReplicas int param azCliVersion string = '' param createAKSCluster bool param createDNSZone bool @@ -121,6 +122,10 @@ resource deploymentScript 'Microsoft.Resources/deploymentScripts@${azure.apiVers name: 'AKS_VERSION' value: aksVersion } + { + name: 'APP_REPLICAS' + value: appReplicas + } { name: 'WLS_SSL_KEYVAULT_NAME' value: sslKeyVaultName From 856a26a7b172e59fedbb3cec3234ee3683c2fe58 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 14 Jun 2024 09:41:54 +0800 Subject: [PATCH 04/21] exclude B-series VM sizes. --- .../src/main/arm/createUiDefinition.json | 45 ++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index f43c8cbdb..9dba56819 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -322,7 +322,50 @@ ], "constraints": { "numAvailabilityZonesRequired": 3, - "zone": "3" + "zone": "3", + "excludedSizes": [ + "Standard_B12ms", + "Standard_B16als_v2", + "Standard_B16as_v2", + "Standard_B16ls_v2", + "Standard_B16ms", + "Standard_B16pls_v2", + "Standard_B16ps_v2", + "Standard_B16s_v2", + "Standard_B1ls", + "Standard_B1ms", + "Standard_B1s", + "Standard_B20ms", + "Standard_B2als_v2", + "Standard_B2as_v2", + "Standard_B2ats_v2", + "Standard_B2ls_v2", + "Standard_B2ms", + "Standard_B2pls_v2", + "Standard_B2ps_v2", + "Standard_B2pts_v2", + "Standard_B2s", + "Standard_B2s_v2", + "Standard_B2ts_v2", + "Standard_B32als_v2", + "Standard_B32as_v2", + "Standard_B32ls_v2", + "Standard_B32s_v2", + "Standard_B4als_v2", + "Standard_B4as_v2", + "Standard_B4ls_v2", + "Standard_B4ms", + "Standard_B4pls_v2", + "Standard_B4ps_v2", + "Standard_B4s_v2", + "Standard_B8als_v2", + "Standard_B8as_v2", + "Standard_B8ls_v2", + "Standard_B8ms", + "Standard_B8pls_v2", + "Standard_B8ps_v2", + "Standard_B8s_v2" + ] }, "options": { "hideDiskTypeFilter": false From 3851bd62c6a6061e8b4178d07138b9c37156ca55 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 14 Jun 2024 12:52:24 +0800 Subject: [PATCH 05/21] enhance the UI. --- .../src/main/arm/createUiDefinition.json | 70 +++++++------------ 1 file changed, 27 insertions(+), 43 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 9dba56819..548c1efc3 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -18,6 +18,14 @@ "type": "Microsoft.Common.Section", "label": "Credentials for WebLogic", "elements": [ + { + "name": "listVMSizes", + "type": "Microsoft.Solutions.ArmApiControl", + "request": { + "method": "GET", + "path": "[concat(subscription().id, '/providers/Microsoft.Compute/locations/',location(),'/vmSizes?api-version=2024-03-01')]" + } + }, { "name": "wlsUserName", "type": "Microsoft.Common.TextBox", @@ -374,58 +382,34 @@ "count": "[steps('section_aks').clusterInfo.aksNodeCount]", "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" }, - { - "name": "listVMSizes", - "type": "Microsoft.Solutions.ArmApiControl", - "request": { - "method": "GET", - "path": "[concat(subscription().id, '/providers/Microsoft.Compute/locations/',location(),'/vmSizes?api-version=2024-03-01')]" - } - }, { "name": "aksNodeCount", - "type": "Microsoft.Common.TextBox", - "label": "Minimum node count (The recommended value is calculated dynamically based on selected VM size)", + "type": "Microsoft.Common.Slider", + "min": "[add(1, div(add(12288, mul(if(empty(basics('basicsOptional').wlsClusterSize),5,basics('basicsOptional').wlsClusterSize), 1536)), first(filter(basics('basicsRequired').listVMSizes.value, (item) => equals(item.name, steps('section_aks').clusterInfo.nodeVMSizeSelector))).memoryInMB))]", + "defaultValue": 3, + "max": 1000, + "label": "Minimum node count", + "showStepMarkers": false, "toolTip": "Set the minimum node count for the cluster.", - "placeholder": "[add(1,div(16384, first(filter(steps('section_aks').clusterInfo.listVMSizes.value, (item) => equals(item.name, steps('section_aks').clusterInfo.nodeVMSizeSelector))).memoryInMB))]", - "multiLine": false, "constraints": { - "required": true, - "validations": [ - { - "regex": "^([1-9][0-9]{0,2})$", - "message": "Only integer are allowed, and the value must be less than 1000." - }, - { - "isValid": "[greaterOrEquals(steps('section_aks').clusterInfo.aksNodeCount, add(1,div(16384, first(filter(steps('section_aks').clusterInfo.listVMSizes.value, (item) => equals(item.name, steps('section_aks').clusterInfo.nodeVMSizeSelector))).memoryInMB)))]", - "message": "Must meet the minimum requirement, please clean your input to see the recommended value." - } - ] + "required": true }, - "visible": true - }, - { + "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" + }, + { "name": "aksNodeMaxCount", - "type": "Microsoft.Common.TextBox", - "label": "Maximum node count (The recommended value is calculated dynamically based on selected VM size)", + "type": "Microsoft.Common.Slider", + "min": "[add(5,div(add(12288, mul(if(empty(basics('basicsOptional').wlsClusterSize),5,basics('basicsOptional').wlsClusterSize), 1536)), first(filter(basics('basicsRequired').listVMSizes.value, (item) => equals(item.name, steps('section_aks').clusterInfo.nodeVMSizeSelector))).memoryInMB))]", + "defaultValue": 50, + "max": 1000, + "label": "Maximum node count", + "showStepMarkers": false, "toolTip": "Set the maximum node count for the cluster.", - "placeholder": "[add(5,div(16384, first(filter(steps('section_aks').clusterInfo.listVMSizes.value, (item) => equals(item.name, steps('section_aks').clusterInfo.nodeVMSizeSelector))).memoryInMB))]", - "multiLine": false, "constraints": { - "required": true, - "validations": [ - { - "regex": "^([1-9][0-9]{0,2})$", - "message": "Only integer are allowed, and the value must be less than 1000." - }, - { - "isValid": "[greaterOrEquals(steps('section_aks').clusterInfo.aksNodeMaxCount, steps('section_aks').clusterInfo.aksNodeCount)]", - "message": "The number should not be less then the minimum node count." - } - ] + "required": true }, - "visible": true - } + "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" + } ] }, { From 933604833dd05dff2128ebf78cfcb3edf019a738 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 14 Jun 2024 13:08:09 +0800 Subject: [PATCH 06/21] increase pom --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7b608bf12..b13b3453d 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ - 1.0.76 + 1.0.78 1.0.27 1.0.51 From f31688b7b217e34d52e307e5385c9838a58d95f8 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 14 Jun 2024 14:35:23 +0800 Subject: [PATCH 07/21] AKS restricted skus: Standard_A1_v2. --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 548c1efc3..f6f5ee2d1 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -332,6 +332,7 @@ "numAvailabilityZonesRequired": 3, "zone": "3", "excludedSizes": [ + "Standard_A1_v2", "Standard_B12ms", "Standard_B16als_v2", "Standard_B16as_v2", @@ -399,7 +400,7 @@ { "name": "aksNodeMaxCount", "type": "Microsoft.Common.Slider", - "min": "[add(5,div(add(12288, mul(if(empty(basics('basicsOptional').wlsClusterSize),5,basics('basicsOptional').wlsClusterSize), 1536)), first(filter(basics('basicsRequired').listVMSizes.value, (item) => equals(item.name, steps('section_aks').clusterInfo.nodeVMSizeSelector))).memoryInMB))]", + "min": "[add(1,div(add(12288, mul(if(empty(basics('basicsOptional').wlsClusterSize),5,basics('basicsOptional').wlsClusterSize), 1536)), first(filter(basics('basicsRequired').listVMSizes.value, (item) => equals(item.name, steps('section_aks').clusterInfo.nodeVMSizeSelector))).memoryInMB))]", "defaultValue": 50, "max": 1000, "label": "Maximum node count", From 629b771840cc229efed20f7935edca6df77f97de Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 14 Jun 2024 14:38:00 +0800 Subject: [PATCH 08/21] https://aka.ms/aks/restricted-skus --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index f6f5ee2d1..5d43cd174 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -332,7 +332,11 @@ "numAvailabilityZonesRequired": 3, "zone": "3", "excludedSizes": [ + "Standard_A0", + "Standard_A1", "Standard_A1_v2", + "Standard_F1", + "Standard_F1s", "Standard_B12ms", "Standard_B16als_v2", "Standard_B16as_v2", From d3797b7abc23140421f4a80c845f564835903ae8 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 14 Jun 2024 14:47:56 +0800 Subject: [PATCH 09/21] make sure `aksNodeMaxCount` is greaterOrEquals `aksNodeCount`. --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 5d43cd174..ed238fc4e 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -404,8 +404,8 @@ { "name": "aksNodeMaxCount", "type": "Microsoft.Common.Slider", - "min": "[add(1,div(add(12288, mul(if(empty(basics('basicsOptional').wlsClusterSize),5,basics('basicsOptional').wlsClusterSize), 1536)), first(filter(basics('basicsRequired').listVMSizes.value, (item) => equals(item.name, steps('section_aks').clusterInfo.nodeVMSizeSelector))).memoryInMB))]", - "defaultValue": 50, + "min": "[add(steps('section_aks').clusterInfo.aksNodeCount,2)]", + "defaultValue": 3, "max": 1000, "label": "Maximum node count", "showStepMarkers": false, From 8868cc7dbd443395808bf52e06a80937f615aab6 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 14 Jun 2024 15:01:50 +0800 Subject: [PATCH 10/21] for testing --- .../src/main/arm/scripts/inline-scripts/validateParameters.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh index bfc394a40..fb18fdf1c 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh @@ -622,6 +622,8 @@ checkDNSZone=${12} outputAksVersion=${constDefaultAKSVersion} sslCertificateKeyVaultOption="keyVaultStoredConfig" +exit 1 + validate_compute_resources validate_memory_resources From 8ff6a4220d40691f72a20d055b128b03cc50e16e Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 14 Jun 2024 16:05:50 +0800 Subject: [PATCH 11/21] use bc for the floating-point calculation. --- .../arm/scripts/inline-scripts/validateParameters.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh index fb18fdf1c..6198e8c44 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh @@ -131,15 +131,15 @@ function validate_compute_resources() { # Minimum memory requirement: 12 + (APP_REPLICAS + 1)*1.5 GB function validate_memory_resources() { if [[ "${createAKSCluster,,}" == "true" ]]; then - local requiredMemoryinGB=$((12 + (APP_REPLICAS + 1)*1.5)) + local requiredMemoryinGB=$(echo "12+($APP_REPLICAS+1)*1.5" | bc) local vmDetails=$(az vm list-skus --size ${aksAgentPoolVMSize} -l ${location} --query [0]) validate_status "Query VM details of ${aksAgentPoolVMSize} in ${location}." - local memoryGB=$(echo ${vmDetails} | jq '.capabilities[] | select(.name=="memoryGB") | .value' | tr -d "\"") - local requestedMemory=$((aksAgentPoolNodeCount * memoryGB)) + local memoryGB=$(echo ${vmDetails} | jq '.capabilities[] | select(.name=="MemoryGB") | .value' | tr -d "\"") + local requestedMemory=$(echo "$aksAgentPoolNodeCount*$memoryGB" | bc) echo_stdout "Current requested memory is ${requestedMemory}GB." - if [[ ${requestedMemory} -le ${requiredMemoryinGB} ]]; then + if [[ $(echo "${requestedMemory}<${requiredMemoryinGB}" | bc) -eq 1 ]]; then echo_stderr "It requires ${requiredMemoryinGB} GiB memory to create the AKS cluster, you have to select a larger VM size or increase node count." exit 1 fi @@ -622,8 +622,6 @@ checkDNSZone=${12} outputAksVersion=${constDefaultAKSVersion} sslCertificateKeyVaultOption="keyVaultStoredConfig" -exit 1 - validate_compute_resources validate_memory_resources From 40b4e9e4b2f182909bf4d372305591aba8bfe00e Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 14 Jun 2024 18:25:16 +0800 Subject: [PATCH 12/21] increase pom --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b13b3453d..b1d449c17 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ - 1.0.78 + 1.0.77 1.0.27 1.0.51 From b18979376eced377edaa161f21376804f4220557 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 14 Jun 2024 18:26:52 +0800 Subject: [PATCH 13/21] fix typos --- .../src/main/arm/scripts/inline-scripts/validateParameters.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh index 6198e8c44..e260c22d4 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/inline-scripts/validateParameters.sh @@ -126,8 +126,8 @@ function validate_compute_resources() { echo_stdout "Check compute resources: passed!" } -# The offer deploys a WLS cluster with 1 + ${APP_REPLICAS} pods, each pod request 1.5GB and 0.25CPU. # Ensure the cluster has enough memory resources. +# The offer deploys a WLS cluster with 1 + ${APP_REPLICAS} pods, each pod requestes 1.5GB and 0.25CPU. # Minimum memory requirement: 12 + (APP_REPLICAS + 1)*1.5 GB function validate_memory_resources() { if [[ "${createAKSCluster,,}" == "true" ]]; then From 20c94b939a3d913ff127e5ff12b61efa53f21542 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 14 Jun 2024 21:20:17 +0800 Subject: [PATCH 14/21] for small VM size, may need more time to provision WLS pods. --- weblogic-azure-aks/src/main/arm/scripts/common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/common.sh b/weblogic-azure-aks/src/main/arm/scripts/common.sh index 23d5ebf24..b2f5a8c44 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/common.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/common.sh @@ -3,7 +3,7 @@ # This script runs on Azure Container Instance with Alpine Linux that Azure Deployment script creates. export checkPodStatusInterval=20 # interval of checking pod status. -export checkPodStatusMaxAttemps=100 # max attempt to check pod status. +export checkPodStatusMaxAttemps=200 # max attempt to check pod status. export checkPVStateInterval=5 # interval of checking pvc status. export checkPVStateMaxAttempt=10 # max attempt to check pvc status. export checkSVCStateMaxAttempt=50 From 69fc472a5f7378f082740e3675f004daaf906821 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Tue, 18 Jun 2024 13:50:30 +0800 Subject: [PATCH 15/21] exclude the vm size that WLS does not work well in. --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index ed238fc4e..e1fca16d9 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -377,7 +377,11 @@ "Standard_B8ms", "Standard_B8pls_v2", "Standard_B8ps_v2", - "Standard_B8s_v2" + "Standard_B8s_v2", + "Standard_A2_v2", + "Standard_A4_v2", + "Standard_A2m_v2", + "Standard_A4m_v2" ] }, "options": { From 960172f84d9019428124882c007c721bf4593c8a Mon Sep 17 00:00:00 2001 From: galiacheng Date: Tue, 18 Jun 2024 15:12:13 +0800 Subject: [PATCH 16/21] add warning message. --- .../src/main/arm/createUiDefinition.json | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index e1fca16d9..4c91ffa2a 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -378,10 +378,7 @@ "Standard_B8pls_v2", "Standard_B8ps_v2", "Standard_B8s_v2", - "Standard_A2_v2", - "Standard_A4_v2", - "Standard_A2m_v2", - "Standard_A4m_v2" + "Standard_A2_v2" ] }, "options": { @@ -391,6 +388,15 @@ "count": "[steps('section_aks').clusterInfo.aksNodeCount]", "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" }, + { + "name": "vmSizeInfoBox", + "type": "Microsoft.Common.InfoBox", + "visible": "[contains(parse('[\"Standard_A4_v2\", \"Standard_A2m_v2\", \"Standard_A4m_v2\"]'),steps('section_aks').clusterInfo.nodeVMSizeSelector)]", + "options": { + "icon": "Warning", + "text": "Node sizes 'Standard_A4_v2', 'Standard_A2m_v2' and 'Standard_A4m_v2' are not recommended due to inconsistent availability." + } + }, { "name": "aksNodeCount", "type": "Microsoft.Common.Slider", From 0cc4523bb6a3f42e3f862541c3714838316ce06a Mon Sep 17 00:00:00 2001 From: galiacheng Date: Wed, 19 Jun 2024 11:04:26 +0800 Subject: [PATCH 17/21] fix corner case --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 4c91ffa2a..303d44adc 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -402,7 +402,7 @@ "type": "Microsoft.Common.Slider", "min": "[add(1, div(add(12288, mul(if(empty(basics('basicsOptional').wlsClusterSize),5,basics('basicsOptional').wlsClusterSize), 1536)), first(filter(basics('basicsRequired').listVMSizes.value, (item) => equals(item.name, steps('section_aks').clusterInfo.nodeVMSizeSelector))).memoryInMB))]", "defaultValue": 3, - "max": 1000, + "max": 998, "label": "Minimum node count", "showStepMarkers": false, "toolTip": "Set the minimum node count for the cluster.", From 5d4e4253cd47a546c1f3b34ca1c64556229463c1 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 20 Jun 2024 14:08:17 +0800 Subject: [PATCH 18/21] tune livenessProbe and readinessProbe for A-series VM sizes. --- .../src/main/arm/createUiDefinition.json | 9 --------- weblogic-azure-aks/src/main/arm/scripts/common.sh | 6 ++++++ .../src/main/arm/scripts/genDomainConfig.sh | 10 ++++++++++ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 303d44adc..852c86da4 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -388,15 +388,6 @@ "count": "[steps('section_aks').clusterInfo.aksNodeCount]", "visible": "[bool(steps('section_aks').clusterInfo.createAKSCluster)]" }, - { - "name": "vmSizeInfoBox", - "type": "Microsoft.Common.InfoBox", - "visible": "[contains(parse('[\"Standard_A4_v2\", \"Standard_A2m_v2\", \"Standard_A4m_v2\"]'),steps('section_aks').clusterInfo.nodeVMSizeSelector)]", - "options": { - "icon": "Warning", - "text": "Node sizes 'Standard_A4_v2', 'Standard_A2m_v2' and 'Standard_A4m_v2' are not recommended due to inconsistent availability." - } - }, { "name": "aksNodeCount", "type": "Microsoft.Common.Slider", diff --git a/weblogic-azure-aks/src/main/arm/scripts/common.sh b/weblogic-azure-aks/src/main/arm/scripts/common.sh index b2f5a8c44..7fa33304d 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/common.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/common.sh @@ -36,6 +36,12 @@ export constMSSQLDriverName="mssql-jdbc-10.2.1.jre8.jar" export constAzureCoreVersion="1.34.0" export constDbPodIdentitySelector="db-pod-identity" # do not change the value export constPreclassDirectoryName="preclassLibraries" +export constLivenessProbePeriodSeconds=30 +export constLivenessProbeTimeoutSeconds=5 +export constLivenessProbeFailureThreshold=20 +export constReadinessProbeProbePeriodSeconds=10 +export constReadinessProbeTimeoutSeconds=5 +export constReadinessProbeFailureThreshold=30 export curlMaxTime=120 # seconds export ocrLoginServer="container-registry.oracle.com" diff --git a/weblogic-azure-aks/src/main/arm/scripts/genDomainConfig.sh b/weblogic-azure-aks/src/main/arm/scripts/genDomainConfig.sh index 3ed926345..59850674f 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/genDomainConfig.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/genDomainConfig.sh @@ -82,6 +82,16 @@ spec: # Settings for all server pods in the domain including the introspector job pod serverPod: + # Tune for small VM sizes + # https://oracle.github.io/weblogic-kubernetes-operator/managing-domains/domain-lifecycle/liveness-readiness-probe-customization/ + livenessProbe: + periodSeconds: ${constLivenessProbePeriodSeconds} + timeoutSeconds: ${constLivenessProbeTimeoutSeconds} + failureThreshold: ${constLivenessProbeFailureThreshold} + readinessProbe: + periodSeconds: ${constReadinessProbeProbePeriodSeconds} + timeoutSeconds: ${constReadinessProbeTimeoutSeconds} + failureThreshold: ${constReadinessProbeFailureThreshold} # Optional new or overridden environment variables for the domain's pods # - This sample uses CUSTOM_DOMAIN_NAME in its image model file # to set the Weblogic domain name From aa9aa01c2a4852d680b056dd2f383bd5fe42fc37 Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 20 Jun 2024 15:08:00 +0800 Subject: [PATCH 19/21] tune ReadinessProbe --- weblogic-azure-aks/src/main/arm/scripts/common.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/arm/scripts/common.sh b/weblogic-azure-aks/src/main/arm/scripts/common.sh index 7fa33304d..0846ad8f3 100644 --- a/weblogic-azure-aks/src/main/arm/scripts/common.sh +++ b/weblogic-azure-aks/src/main/arm/scripts/common.sh @@ -41,7 +41,7 @@ export constLivenessProbeTimeoutSeconds=5 export constLivenessProbeFailureThreshold=20 export constReadinessProbeProbePeriodSeconds=10 export constReadinessProbeTimeoutSeconds=5 -export constReadinessProbeFailureThreshold=30 +export constReadinessProbeFailureThreshold=3 export curlMaxTime=120 # seconds export ocrLoginServer="container-registry.oracle.com" From bd954f1afe6848fd298d509618092c0caa08b11d Mon Sep 17 00:00:00 2001 From: galiacheng Date: Thu, 20 Jun 2024 17:17:09 +0800 Subject: [PATCH 20/21] support Standard_A2_v2. --- weblogic-azure-aks/src/main/arm/createUiDefinition.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/weblogic-azure-aks/src/main/arm/createUiDefinition.json b/weblogic-azure-aks/src/main/arm/createUiDefinition.json index 852c86da4..de2d0b6ac 100644 --- a/weblogic-azure-aks/src/main/arm/createUiDefinition.json +++ b/weblogic-azure-aks/src/main/arm/createUiDefinition.json @@ -377,8 +377,7 @@ "Standard_B8ms", "Standard_B8pls_v2", "Standard_B8ps_v2", - "Standard_B8s_v2", - "Standard_A2_v2" + "Standard_B8s_v2" ] }, "options": { From ca0de45bd183acef382054bd85b413fdbdfd4eaa Mon Sep 17 00:00:00 2001 From: galiacheng Date: Fri, 21 Jun 2024 13:26:36 +0800 Subject: [PATCH 21/21] do not validate application if no app is deployed. --- weblogic-azure-aks/src/main/bicep/mainTemplate.bicep | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep index ac9ec9f6f..04741fb30 100644 --- a/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep +++ b/weblogic-azure-aks/src/main/bicep/mainTemplate.bicep @@ -324,6 +324,7 @@ var const_hasTags = contains(resourceGroup(), 'tags') // * generate selfsigned certificate for gateway frontend TLS/SSL. var const_bCreateNewKeyVault = (!const_hasTags || !contains(resourceGroup().tags, name_tagNameForKeyVault) || empty(resourceGroup().tags.wlsKeyVault)) && ((enableCustomSSL && sslConfigurationAccessOption != const_wlsSSLCertOptionKeyVault) || (enableAppGWIngress && (appGatewayCertificateOption != const_appGatewaySSLCertOptionHaveKeyVault))) var const_bCreateStorageAccount = (createAKSCluster || !const_hasStorageAccount) && const_enablePV +var const_bValidateApplications= validateApplications && (length(appPackageUrls) > 0) var const_createNewAcr = useOracleImage && createACR var const_defaultKeystoreType = 'PKCS12' var const_enableNetworking = (length(lbSvcValues) > 0) || enableAppGWIngress @@ -821,7 +822,7 @@ module passwordlessDatasourceDeployment 'modules/_setupPasswordlessDBConnection. * To check if all the applciations in WLS cluster become ACTIVE state after all configurations are completed. * This should be the last step. */ -module validateApplciations 'modules/_deployment-scripts/_ds-validate-applications.bicep' = if (validateApplications) { +module validateApplciations 'modules/_deployment-scripts/_ds-validate-applications.bicep' = if (const_bValidateApplications) { name: 'validate-wls-application-status' params: { _artifactsLocation: _artifactsLocation