This directory contains a sample Amazon SQS application to test out k8s-cloudwatch-adapter. SQS
producer and consumer are provided, together with the YAML files for deploying the consumer, metric
configuration and HPA.
Both the producer and consumer will use an Amazon SQS queue named helloworld. This queue will be
created by the producer if it does not exist.
Before starting, you need to first grant permissions to your Kubernetes worker nodes to interact with Amazon SQS queues. For simplicity, we will allow all SQS actions here, please do not do so on a production environment.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sqs:*",
"Resource": "*"
}
]
}Now we can start deploying our consumer
$ kubectl apply -f deploy/consumer-deployment.yamlYou can verify the consumer is running by executing this command.
$ kubectl get deploy
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
sqs-consumer 1 1 1 0 5sNext we will need to create an ExternalMetric resource for Amazon CloudWatch metric. This resource
will tell the adapter how to retrieve metric data from Amazon CloudWatch. Here in
deploy/externalmetric.yaml defined the query parameters used to retrieve the
ApproximateNumberOfMessagesVisible for a SQS queue named helloworld. For details about how
metric data query works, please refer to CloudWatch GetMetricData
API.
apiVersion: metrics.aws/v1alpha1
kind: ExternalMetric
metadata:
name: hello-queue-length
spec:
name: hello-queue-length
queries:
- id: sqs_helloworld
metricStat:
metric:
namespace: "AWS/SQS"
metricName: "ApproximateNumberOfMessagesVisible"
dimensions:
- name: QueueName
value: "helloworld"
period: 60
stat: Average
unit: Count
returnData: trueCreate the ExternalMetric resource
$ kubectl apply -f deploy/externalmetric.yamlThen setup the HPA for our consumer.
$ kubectl apply -f deploy/hpa.yamlFinally, we can start generating messages to the queue.
$ make producer
$ ./bin/producerOn a separate terminal, you can now watch your HPA retrieving the queue length and start scaling the replicas. Amazon SQS now supports metrics at 1-minute interval, so you should start to see the deployment scale pretty quickly.
$ kubectl get hpa sqs-consumer-scaler -wOnce you are done with this experiment, you can delete the Kubernetes deployment and respective resources.
Press ctrl+c to terminate the producer if it is still running.
Execute the following commands to remove the consumer, external metric, HPA and Amazon SQS queue.
$ kubectl delete -f deploy/hpa.yaml
$ kubectl delete -f deploy/externalmetric.yaml
$ kubectl delete -f deploy/consumer-deployment.yaml
$ aws sqs delete-queue helloworld