3. 环境准备:安装Kubernetes集群(Minikube/Kind)、安装KEDA、安装Prometheus与Grafana

在开始KEDA自定义Metric触发器开发之前,需要搭建一套完整的实验环境。本章将指导你完成以下三个核心组件的安装与配置:Kubernetes集群(Minikube或Kind)、KEDA(Kubernetes Event-driven Autoscaling)、Prometheus与Grafana(监控与可视化平台)。

环境选择建议: 本地开发推荐使用Kind(轻量、启动快),需要完整Kubernetes体验或跨节点测试时选择Minikube。本课程后续示例均兼容两种集群。

3.1 整体架构概览

下图展示了本章将要搭建的完整实验环境组件及其关系:

KEDA 实验环境组件架构 Kubernetes 集群(Minikube / Kind) Node 1 | Node 2 | Control Plane KEDA Operator ScaledObject | ScaledJob | TriggerAuthentication Prometheus 指标采集 · 存储 · 查询 Grafana 仪表盘 · 告警 · 可视化 KEDA 通过 ScaledObject 监听 Prometheus 指标,动态调整 Deployment/StatefulSet 的副本数

3.2 安装 Kubernetes 集群

选择 Minikube 或 Kind 之一即可。下表对比了两者的核心差异:

特性 Minikube Kind (Kubernetes in Docker)
底层技术 虚拟机(VirtualBox/HyperKit) Docker 容器
启动速度 较慢(需启动 VM) 快速(秒级)
多节点支持 支持(需指定节点数) 支持(通过配置文件)
资源占用 较高 较低
适用场景 完整 K8s 体验、跨节点测试 CI/CD、本地快速开发

3.2.1 安装 Kind(推荐)

  1. 安装 Kind CLI
# macOS (Homebrew)
brew install kind

# Linux (curl 下载)
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

# 验证安装
kind version
  1. 创建集群配置文件 kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
  - role: worker
  - role: worker
  1. 启动集群
kind create cluster --config kind-config.yaml --name keda-demo

# 验证集群状态
kubectl cluster-info --context kind-keda-demo
kubectl get nodes

3.2.2 安装 Minikube(备选)

# macOS (Homebrew)
brew install minikube

# Linux (curl 下载)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 启动集群(指定 2 个 worker 节点)
minikube start --nodes 3 --cpus 4 --memory 8192 --driver hyperkit

# 验证
minikube status
kubectl get nodes
注意: Minikube 默认使用 VirtualBox 驱动,macOS 建议使用 --driver hyperkit 或 --driver docker。确保 Docker Desktop 已安装并运行。

3.3 安装 KEDA

KEDA 作为 Kubernetes 的 Operator,通过 Helm Chart 或 YAML 清单安装。本课程使用 Helm 方式,便于版本管理和配置更新。

3.3.1 安装 Helm(如未安装)

# macOS
brew install helm

# Linux
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# 验证
helm version

3.3.2 添加 KEDA Helm 仓库并安装

# 添加 KEDA Helm 仓库
helm repo add kedacore https://kedacore.github.io/charts
helm repo update

# 创建命名空间
kubectl create namespace keda

# 安装 KEDA(v2.12 稳定版)
helm install keda kedacore/keda \
  --namespace keda \
  --version 2.12.0 \
  --set podIdentity.provider=none \
  --set metricsServer.useHostNetwork=true

# 验证安装
kubectl get pods -n keda
kubectl get crd | grep keda

安装成功后,你会看到以下 Pod 运行在 keda 命名空间中:

Pod 名称 组件 功能
keda-operator-xxx KEDA Operator 核心控制器,管理 ScaledObject/ScaledJob
keda-metrics-apiserver-xxx Metrics Server 暴露自定义指标给 HPA
keda-admission-webhooks-xxx Admission Webhook 验证 ScaledObject 配置

3.4 安装 Prometheus

Prometheus 负责采集和存储自定义指标,KEDA 通过 Prometheus Scaler 查询这些指标来驱动弹性伸缩。

3.4.1 使用 Helm 安装 Prometheus Stack

# 添加 Prometheus 社区 Helm 仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

# 创建监控命名空间
kubectl create namespace monitoring

# 安装 kube-prometheus-stack(包含 Prometheus、Alertmanager、Grafana)
helm install prometheus prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --set grafana.enabled=true \
  --set grafana.service.type=ClusterIP \
  --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false

# 验证安装
kubectl get pods -n monitoring

3.4.2 验证 Prometheus 指标采集

# 端口转发 Prometheus Web UI
kubectl port-forward -n monitoring svc/prometheus-operated 9090:9090 &

# 访问 http://localhost:9090,在查询框中输入 up 查看指标
关键配置说明: serviceMonitorSelectorNilUsesHelmValues=false 允许 KEDA 创建的 ServiceMonitor 被 Prometheus 自动发现,这是后续自定义指标采集的前提。

3.5 安装 Grafana

Grafana 用于可视化 Prometheus 中的指标数据,方便调试和观察弹性伸缩效果。

3.5.1 获取 Grafana 访问信息

# 获取 Grafana 管理员密码
kubectl get secret -n monitoring prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 --decode

# 端口转发 Grafana Web UI
kubectl port-forward -n monitoring svc/prometheus-grafana 3000:80 &

# 访问 http://localhost:3000,用户名: admin,密码: 上一步获取的值

3.5.2 配置 Prometheus 数据源

Grafana 默认已自动配置 Prometheus 数据源(指向 http://prometheus-operated:9090)。验证步骤:

  1. 登录 Grafana → 左侧齿轮图标 → Data Sources
  2. 确认 Prometheus 数据源状态为 OK
  3. 点击 Explore,输入 up 查询,确认能返回数据

3.6 环境验证清单

完成上述安装后,执行以下命令验证所有组件是否正常运行:

# 1. 验证 Kubernetes 集群
kubectl cluster-info
kubectl get nodes

# 2. 验证 KEDA
kubectl get pods -n keda
kubectl get crd | grep -E "scaledobject|scaledjob|triggerauthentication"

# 3. 验证 Prometheus
kubectl get pods -n monitoring | grep prometheus
curl -s http://localhost:9090/api/v1/query?query=up | jq .

# 4. 验证 Grafana
curl -s http://localhost:3000/api/health | jq .

如果所有命令均返回正常状态,说明实验环境已准备就绪。下表总结了各组件的访问方式:

组件 端口 访问方式 默认凭据
Kubernetes API 6443 kubectl kubeconfig
Prometheus UI 9090 kubectl port-forward 无
Grafana 3000 kubectl port-forward admin / 自动生成密码
KEDA Metrics API 443 集群内部访问 无