@@ -10,7 +10,7 @@ function connect_aks(){
10
10
}
11
11
12
12
function enable_promethues_metrics(){
13
- az extension remove --name aks-preview
13
+ # See https://learn.microsoft.com/en-us/azure/azure-monitor/containers/kubernetes-monitoring-enable?tabs=cli#enable-prometheus-and-grafana
14
14
az extension add --name k8s-extension
15
15
16
16
# ## Use existing Azure Monitor workspace
@@ -22,6 +22,9 @@ function enable_promethues_metrics(){
22
22
23
23
utility_validate_status " Enable Promethues Metrics."
24
24
25
+ az extension add --name aks-preview
26
+ az extension remove --name k8s-extension
27
+
25
28
# Verify that the DaemonSet was deployed properly on the Linux node pools
26
29
# https://learn.microsoft.com/en-us/azure/azure-monitor/containers/kubernetes-monitoring-enable?tabs=cli#managed-prometheus
27
30
kubectl get ds ama-metrics-node --namespace=kube-system
@@ -31,6 +34,19 @@ function enable_promethues_metrics(){
31
34
32
35
# https://learn.microsoft.com/en-us/azure/azure-monitor/containers/prometheus-metrics-scrape-configuration
33
36
function deploy_customize_scraping(){
37
+ # https://learn.microsoft.com/en-us/azure/azure-monitor/containers/prometheus-metrics-scrape-configuration?tabs=CRDConfig%2CCRDScrapeConfig#basic-authentication
38
+ local wlsPswBase64=$( echo -n " ${WLS_ADMIN_PASSWORD} " | base64)
39
+ cat << EOF | kubectl apply -f -
40
+ apiVersion: v1
41
+ kind: Secret
42
+ metadata:
43
+ name: ama-metrics-mtls-secret
44
+ namespace: kube-system
45
+ type: Opaque
46
+ data:
47
+ password1: ${wlsPswBase64}
48
+ EOF
49
+
34
50
# create scrape config file
35
51
cat << EOF >prometheus-config
36
52
global:
@@ -43,7 +59,7 @@ scrape_configs:
43
59
names: [${WLS_NAMESPACE} ]
44
60
basic_auth:
45
61
username: ${WLS_ADMIN_USERNAME}
46
- password: ${WLS_ADMIN_PASSWORD}
62
+ password_file: /etc/prometheus/certs/password1
47
63
EOF
48
64
49
65
# validate the scrape config file
@@ -76,7 +92,7 @@ function get_wls_monitoring_exporter_image_url() {
76
92
curl -m ${curlMaxTime} --retry ${retryMaxAttempt} -fsL " ${gitUrl4WLSToolingFamilyJsonFile} " -o ${wlsToolingFamilyJsonFile}
77
93
if [ $? -eq 0 ]; then
78
94
imageURL=$( cat ${wlsToolingFamilyJsonFile} | jq " .items[] | select(.key==\" WME\" ) | .imageURL" | tr -d " \" " )
79
- echo " well tested monitoring exporter image url: ${imageURL} "
95
+ echo_stdout " well tested monitoring exporter image url: ${imageURL} "
80
96
fi
81
97
82
98
echo_stdout " Use monitoring exporter image: ${imageURL} "
@@ -200,6 +216,11 @@ function wait_for_keda_ready(){
200
216
echo_stdout " Check if KEDA is ready, attempt: ${attempt} ."
201
217
ready=true
202
218
219
+ local podCount=$( kubectl get pods -n ${KEDA_NAMESPACE} -o json | jq -r ' .items | length' )
220
+ if [ $podCount -lt 3 ]; then
221
+ ready=false
222
+ fi
223
+
203
224
local podnames=$( kubectl get pods -n ${KEDA_NAMESPACE} -o json | jq -r ' .items[].metadata.name' )
204
225
for podname in ${podnames}
205
226
do
@@ -219,14 +240,49 @@ function wait_for_keda_ready(){
219
240
exit 1
220
241
fi
221
242
222
- echo " KEDA is running."
243
+ echo_stderr " KEDA is running."
244
+ }
245
+
246
+ function get_keda_latest_version() {
247
+ local kedaVersion
248
+ kedaVersion=$( helm search repo kedacore/keda --versions | awk ' /^kedacore\/keda/ {print $2; exit}' )
249
+ export KEDA_VERSION=" ${kedaVersion} "
250
+ echo_stderr " Use latest KEDA. KEDA version: ${KEDA_VERSION} "
251
+ }
252
+
253
+
254
+ function get_keda_version() {
255
+ local versionJsonFileName=" aks_tooling_well_tested_version.json"
256
+ local kedaWellTestedVersion
257
+
258
+ # Download the version JSON file
259
+ curl -L " ${gitUrl4AksToolingWellTestedVersionJsonFile} " --retry " ${retryMaxAttempt} " -o " ${versionJsonFileName} "
260
+
261
+ # Extract KEDA version from JSON
262
+ kedaWellTestedVersion=$( jq -r ' .items[] | select(.key == "keda") | .version' " ${versionJsonFileName} " )
263
+
264
+ # Check if version is available
265
+ if [ $? -ne 0 ]; then
266
+ get_keda_latest_version
267
+ return 0
268
+ fi
269
+
270
+ # Print KEDA well-tested version
271
+ echo_stderr " KEDA well-tested version: ${kedaWellTestedVersion} "
272
+
273
+ # Search for KEDA version in Helm repo
274
+ if ! helm search repo kedacore/keda --versions | grep -q " ${kedaWellTestedVersion} " ; then
275
+ get_keda_latest_version
276
+ return 0
277
+ fi
278
+
279
+ # Export KEDA version
280
+ export KEDA_VERSION=" ${kedaWellTestedVersion} "
281
+ echo_stderr " KEDA version: ${KEDA_VERSION} "
223
282
}
224
283
225
284
# https://learn.microsoft.com/en-us/azure/azure-monitor/containers/integrate-keda
226
285
function enable_keda_addon() {
227
- az extension remove --name k8s-extension
228
- az extension add --name aks-preview
229
-
230
286
local oidcEnabled=$( az aks show --resource-group $AKS_CLUSTER_RG_NAME --name $AKS_CLUSTER_NAME --query oidcIssuerProfile.enabled)
231
287
local workloadIdentity=$( az aks show --resource-group $AKS_CLUSTER_RG_NAME --name $AKS_CLUSTER_NAME --query securityProfile.workloadIdentity)
232
288
@@ -266,13 +322,19 @@ EOF
266
322
helm repo add kedacore https://kedacore.github.io/charts
267
323
helm repo update
268
324
325
+ get_keda_version
326
+
269
327
helm install keda kedacore/keda \
270
328
--namespace ${KEDA_NAMESPACE} \
271
- --set serviceAccount.create=false \
272
- --set serviceAccount.name=${KEDA_SERVICE_ACCOUNT_NAME} \
329
+ --set serviceAccount.operator. create=false \
330
+ --set serviceAccount.operator. name=${KEDA_SERVICE_ACCOUNT_NAME} \
273
331
--set podIdentity.azureWorkload.enabled=true \
274
332
--set podIdentity.azureWorkload.clientId=$KEDA_UAMI_CLIENT_ID \
275
- --set podIdentity.azureWorkload.tenantId=$tenantId
333
+ --set podIdentity.azureWorkload.tenantId=$tenantId \
334
+ --set app.kubernetes.io/managed-by=Helm \
335
+ --set meta.helm.sh/release-name=keda \
336
+ --set meta.helm.sh/release-namespace=${KEDA_NAMESPACE} \
337
+ --version ${KEDA_VERSION}
276
338
277
339
# validate
278
340
wait_for_keda_ready
@@ -346,4 +408,4 @@ deploy_customize_scraping
346
408
347
409
enable_keda_addon
348
410
349
- output
411
+ output
0 commit comments