mirror of
https://gitea.com/mcereda/oam.git
synced 2026-02-10 06:04:24 +00:00
127 lines
3.8 KiB
Bash
127 lines
3.8 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
## tested on macosx using minikube 1.17.0 and k8s v1.20.2 on Docker 20.10.2
|
|
|
|
set -ex
|
|
|
|
minikube start --cpus 4 --memory 4GiB --vm
|
|
minikube addons enable metrics-server
|
|
minikube addons enable ingress
|
|
|
|
kubectl patch deployments.apps --namespace kube-system ingress-nginx-controller --patch '
|
|
spec:
|
|
template:
|
|
metadata:
|
|
annotations:
|
|
prometheus.io/port: "10254"
|
|
prometheus.io/scrape: "true"
|
|
'
|
|
|
|
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
|
|
helm repo add grafana https://grafana.github.io/helm-charts
|
|
helm repo add kedacore https://kedacore.github.io/charts
|
|
helm repo update
|
|
|
|
cat > /tmp/demo.keda.grafana.values.yaml <<EOF
|
|
adminPassword: qwerty
|
|
ingress:
|
|
enabled: true
|
|
hosts:
|
|
- grafana
|
|
EOF
|
|
|
|
helm upgrade --install --namespace monitoring --create-namespace prometheus prometheus-community/prometheus --wait
|
|
helm upgrade --install --namespace monitoring --create-namespace grafana grafana/grafana --values /tmp/demo.keda.grafana.values.yaml --wait
|
|
helm upgrade --install --namespace scaling --create-namespace keda kedacore/keda --version 2.0.0 --wait
|
|
|
|
cat > /tmp/demo.keda.scaledobject.yaml <<EOF
|
|
apiVersion: keda.sh/v1alpha1
|
|
kind: ScaledObject
|
|
metadata:
|
|
name: grafana
|
|
namespace: monitoring
|
|
spec:
|
|
scaleTargetRef:
|
|
name: grafana
|
|
minReplicaCount: 1
|
|
maxReplicaCount: 5
|
|
pollingInterval: 2
|
|
advanced:
|
|
restoreToOriginalReplicaCount: true
|
|
horizontalPodAutoscalerConfig:
|
|
behavior:
|
|
scaleDown:
|
|
stabilizationWindowSeconds: 3
|
|
policies:
|
|
- type: Percent
|
|
value: 100
|
|
periodSeconds: 5
|
|
scaleUp:
|
|
stabilizationWindowSeconds: 3
|
|
policies:
|
|
- type: Percent
|
|
value: 100
|
|
periodSeconds: 5
|
|
triggers:
|
|
- type: prometheus
|
|
metadata:
|
|
serverAddress: http://prometheus-server.monitoring
|
|
metricName: nginx_ingress_controller_requests
|
|
query: sum(rate(nginx_ingress_controller_requests{ingress="grafana"}[2m]))
|
|
threshold: '10'
|
|
EOF
|
|
# HPA behavior is available from K8S v1.18.0. Delete the
|
|
# spec.advanced.horizontalPodAutoscalerConfig key if using a previous version
|
|
if [[ $(kubectl version --short --output json | jq -r '.serverVersion.minor' -) -lt 18 ]]; then
|
|
yq -y 'del(.spec.advanced.horizontalPodAutoscalerConfig)' /tmp/demo.keda.scaledobject.yaml | kubectl apply --filename -
|
|
else
|
|
kubectl apply --filename /tmp/demo.keda.scaledobject.yaml
|
|
fi
|
|
watch "kubectl get scaledobject.keda.sh/grafana --namespace monitoring"
|
|
watch "kubectl get horizontalpodautoscalers.autoscaling --namespace monitoring keda-hpa-grafana"
|
|
|
|
echo "$(minikube ip) grafana" | sudo tee -a /etc/hosts
|
|
while true; do ab -n 750 -c 1 http://grafana/; sleep 10; done
|
|
|
|
exit 0
|
|
|
|
# ---------------
|
|
# troubleshooting
|
|
# ---------------
|
|
|
|
# check the query on prometheus
|
|
kubectl apply --filename - <<EOF
|
|
apiVersion: networking.k8s.io/v1
|
|
kind: Ingress
|
|
metadata:
|
|
name: prometheus
|
|
namespace: monitoring
|
|
spec:
|
|
rules:
|
|
- host: prometheus
|
|
http:
|
|
paths:
|
|
- path: /
|
|
pathType: Prefix
|
|
backend:
|
|
service:
|
|
name: prometheus-server
|
|
port:
|
|
number: 80
|
|
EOF
|
|
open http://prometheus
|
|
|
|
# check the deployment is being watched
|
|
kubectl logs --namespace scaling $(kubectl get pods --namespace scaling | grep -v metrics-apiserver | sed 1d | cut -d ' ' -f 1)
|
|
|
|
# check grafana's ingress stats
|
|
curl "http://grafana/api/datasources" --request POST --user admin:qwerty --header "Content-Type: application/json" --data '{
|
|
"name": "Prometheus",
|
|
"type": "prometheus",
|
|
"access": "proxy",
|
|
"url": "http://prometheus-server"
|
|
}'
|
|
curl "https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/grafana/dashboards/nginx.json" | pbcopy
|
|
open http://grafana/
|
|
# import a dashboard pasting the clipboard's content
|