本主题介绍如何在 GKE on VMware 中为 Pod 横向自动扩缩 (HPA) 配置用户定义的指标。
为用户应用启用 Logging 和 Monitoring
Logging 和 Monitoring 的配置保存在名为 stackdriver
的 Stackdriver 对象中。
打开要修改的
stackdriver
对象:kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
将 USER_CLUSTER_KUBECONFIG 替换为用户集群 kubeconfig 文件的路径。
在
spec
下,将enableStackdriverForApplications
和enableCustomMetricsAdapter
设置为true
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: project-id clusterName: cluster-name clusterLocation: cluster-location proxyConfigSecretName: secret-name enableStackdriverForApplications: true enableCustomMetricsAdapter: true scalableMonitoring: true enableVPC: stackdriver-enable-VPC optimizedMetrics: true
保存并关闭修改后的文件。
完成这些步骤后,所有用户应用日志都会发送到 Cloud Logging。
下一步是为用户应用添加注解以收集指标。
为用户应用添加注解以收集指标
如需为要抓取的用户应用以及发送到 Cloud Monitoring 的日志添加注解,您必须将相应的 annotations
添加到服务、Pod 和端点的元数据中。
metadata: name: "example-monitoring" namespace: "default" annotations: prometheus.io/scrape: "true" prometheus.io/path: "" - Overriding metrics path (default "/metrics")
部署示例用户应用
在本部分中,您将部署一个包含日志和与 Prometheus 兼容的指标的示例应用。
- 将以下 Service 和 Deployment 清单保存到名为
my-app.yaml
的文件中。请注意,Service 具有注解prometheus.io/scrape: "true"
:
kind: Service
apiVersion: v1
metadata:
name: "example-monitoring"
namespace: "default"
annotations:
prometheus.io/scrape: "true"
spec:
selector:
app: "example-monitoring"
ports:
- name: http
port: 9090
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: "example-monitoring"
namespace: "default"
labels:
app: "example-monitoring"
spec:
replicas: 1
selector:
matchLabels:
app: "example-monitoring"
template:
metadata:
labels:
app: "example-monitoring"
spec:
containers:
- image: gcr.io/google-samples/prometheus-example-exporter:latest
name: prometheus-example-exporter
imagePullPolicy: Always
command:
- /bin/sh
- -c
- ./prometheus-example-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090
resources:
requests:
cpu: 100m
创建 Deployment 和 Service:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
使用 HPA 中的自定义指标
部署 HPA 对象以使用上一步中公开的指标。如需详细了解不同类型的自定义指标,请参阅针对多个指标和自定义指标的自动扩缩。
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: example-monitoring-hpa namespace: default spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: example-monitoring minReplicas: 1 maxReplicas: 5 metrics: - type: Pods pods: metric: name: example_monitoring_up target: type: AverageValue averageValue: 20
Pod 类型指标具有针对目标 Pod 标签的默认指标选择器,这是 kube-controller-maneger 的工作原理。在此示例中,您可以使用目标 Pod 中提供的 {matchLabels: {app: example-monitoring}}
选择器查询 example_monitoring_up 指标。指定的其他任何选择器都会添加到列表中。如需避免使用默认选择器,您可以移除目标 Pod 上的所有标签或使用“对象类型”指标。
检查 HPA 是否使用了用户定义的应用指标
检查 HPA 是否使用了用户定义的应用指标:
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG describe hpa example-monitoring-hpa
输出将如下所示:
Name: example-monitoring-hpa Namespace: default Labels:Annotations: CreationTimestamp: Mon, 19 Jul 2021 16:00:40 -0800 Reference: Deployment/example-monitoring Metrics: ( current / target ) "example_monitoring_up" on pods: 1 / 20 Min replicas: 1 Max replicas: 5 Deployment pods: 1 current / 1 desired Conditions: Type Status Reason Message
AbleToScale True ReadyForNewScale recommended size matches current size ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric example_monitoring_up ScalingLimited False DesiredWithinRange the desired count is within the acceptable range
费用
使用 HPA 自定义指标不会产生任何额外费用。用户只需为应用指标和日志付费。如需了解详情,请参阅 Google Cloud 可观测性价格。用于启用自定义指标的 Pod 会额外占用 15m CPU 和 20 MB 内存。