Abilitazione della raccolta dei parametri di un gruppo con scalabilità automatica - Amazon EKS

Aiutaci a migliorare questa pagina

Vuoi contribuire a questa guida per l'utente? Scorri fino alla fine di questa pagina e seleziona Modifica questa pagina su GitHub. I tuoi contributi contribuiranno a rendere la nostra guida utente migliore per tutti.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Abilitazione della raccolta dei parametri di un gruppo con scalabilità automatica

Questo argomento descrive come abilitare la raccolta dei parametri di un gruppo con scalabilità automatica utilizzando AWS Lambda e AWS CloudTrail. Amazon EKS non abilita automaticamente la raccolta dei parametri di gruppo per i gruppi con scalabilità automatica creati per nodi gestiti.

Puoi utilizzare i parametri di un gruppo con scalabilità automatica per tracciare le modifiche in un gruppo con scalabilità automatica e impostare allarmi sui valori soglia. Le metriche del gruppo Auto Scaling sono disponibili nella console Auto Scaling o nella console Amazon. CloudWatch Una volta abilitato, il gruppo Auto Scaling invia dati campionati ad Amazon CloudWatch ogni minuto. L'abilitazione di questi parametri non prevede alcun costo.

Abilitando la raccolta dei parametri di un gruppo con scalabilità automatica, potrai monitorare la scalabilità dei gruppi di nodi gestiti. I parametri di un gruppo con scalabilità automatica riportano la dimensione minima, massima e desiderata di un gruppo con scalabilità automatica. Puoi creare un allarme se il numero di nodi in un gruppo di nodi scende al di sotto della dimensione minima, fatto che indicherebbe un gruppo di nodi non integro. Il tracciamento delle dimensioni dei gruppi di nodi è utile anche per regolare il numero massimo in modo che il piano dati non esaurisca la capacità.

Quando crei un gruppo di nodi gestito, AWS CloudTrail invia un CreateNodegroup evento ad Amazon EventBridge. Creando una EventBridge regola Amazon che corrisponde all'CreateNodegroupevento, attivi una funzione Lambda per abilitare la raccolta di metriche di gruppo per il gruppo Auto Scaling associato al gruppo di nodi gestiti.

Diagramma che mostra il gruppo di nodi gestiti e il componente CloudTrail EventBridge
Come abilitare la raccolta dei parametri di un gruppo con scalabilità automatica
  1. Crea un ruolo IAM per Lambda.

    LAMBDA_ROLE=$(aws iam create-role \ --role-name lambda-asg-enable-metrics \ --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}' \ --output text \ --query 'Role.Arn') echo $LAMBDA_ROLE
  2. Crea una policy che consenta di descrivere i gruppi di nodi Amazon EKS e abilitare la raccolta dei parametri di un gruppo con scalabilità automatica.

    cat > /tmp/lambda-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "eks:DescribeNodegroup", "autoscaling:EnableMetricsCollection" ], "Resource": [ "*" ] } ] } EOF LAMBDA_POLICY_ARN=$(aws iam create-policy \ --policy-name lambda-asg-enable-metrics-policy \ --policy-document file:///tmp/lambda-policy.json \ --output text \ --query 'Policy.Arn') echo $LAMBDA_POLICY_ARN
  3. Collega la policy al ruolo IAM per Lambda.

    aws iam attach-role-policy \ --policy-arn $LAMBDA_POLICY_ARN \ --role-name lambda-asg-enable-metrics
  4. Aggiungi la politica AWSLambdaBasicExecutionRole gestita, che dispone delle autorizzazioni necessarie alla funzione per scrivere i log in Logs. CloudWatch

    aws iam attach-role-policy \ --role-name lambda-asg-enable-metrics \ --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
  5. Crea il codice Lambda.

    cat > /tmp/lambda-handler.py <<EOF import json import boto3 import time import logging eks = boto3.client('eks') autoscaling = boto3.client('autoscaling') logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): ASG_METRICS_COLLLECTION_TAG_NAME = "ASG_METRICS_COLLLECTION_ENABLED" initial_retry_delay = 10 attempts = 0 #print(event) if not event["detail"]["eventName"] == "CreateNodegroup": print("invalid event.") return -1 clusterName = event["detail"]["requestParameters"]["name"] nodegroupName = event["detail"]["requestParameters"]["nodegroupName"] try: metricsCollectionEnabled = event["detail"]["requestParameters"]["tags"][ASG_METRICS_COLLLECTION_TAG_NAME] except KeyError: print(ASG_METRICS_COLLLECTION_TAG_NAME, "tag not found.") return # Check if metrics collection is enabled in tags if metricsCollectionEnabled.lower() != "true": print("Metrics collection is not enabled in nodegroup tags.") return # Get the name of the associated autoscaling group print("Getting the autoscaling group name for nodegroup=", nodegroupName, ", cluster=", clusterName ) for i in range(0,10): try: autoScalingGroup = eks.describe_nodegroup(clusterName=clusterName,nodegroupName=nodegroupName)["nodegroup"]["resources"]["autoScalingGroups"][0]["name"] except: attempts += 1 print("Failed to obtain the associated autoscaling group for nodegroup", nodegroupName, "Retrying in", initial_retry_delay*attempts, "seconds.") time.sleep(initial_retry_delay*attempts) else: break print("Enabling metrics collection on autoscaling group ", autoScalingGroup) # Enable metrics collection in the autoscaling group try: enableMetricsCollection = autoscaling.enable_metrics_collection(AutoScalingGroupName=autoScalingGroup,Granularity="1Minute") except: print("Unable to enable metrics collection on nodegroup=",nodegroup) print("Enabled metrics collection on nodegroup", nodegroupName) EOF
  6. Crea un pacchetto di implementazione.

    cd /tmp zip function.zip lambda-handler.py
  7. Creazione di una funzione Lambda.

    LAMBDA_ARN=$(aws lambda create-function --function-name asg-enable-metrics-collection \ --zip-file fileb://function.zip --handler lambda-handler.lambda_handler \ --runtime python3.9 \ --timeout 600 \ --role $LAMBDA_ROLE \ --output text \ --query 'FunctionArn') echo $LAMBDA_ARN
  8. Crea una regola. EventBridge

    RULE_ARN=$(aws events put-rule --name CreateNodegroupRuleToLambda \ --event-pattern "{\"source\":[\"aws.eks\"],\"detail-type\":[\"AWS API Call via CloudTrail\"],\"detail\":{\"eventName\":[\"CreateNodegroup\"],\"eventSource\":[\"eks.amazonaws.com\"]}}" \ --output text \ --query 'RuleArn') echo $RULE_ARN
  9. Aggiungi la funzione Lambda come destinazione.

    aws events put-targets --rule CreateNodegroupRuleToLambda \ --targets "Id"="1","Arn"="$LAMBDA_ARN"
  10. Aggiungi una politica che EventBridge consenta di richiamare la funzione Lambda.

    aws lambda add-permission \ --function-name asg-enable-metrics-collection \ --statement-id CreateNodegroupRuleToLambda \ --action 'lambda:InvokeFunction' \ --principal events.amazonaws.com \ --source-arn $RULE_ARN

La funzione Lambda abilita la raccolta dei parametri di un gruppo con scalabilità automatica per ogni gruppo di nodi gestiti con tag ASG_METRICS_COLLLECTION_ENABLED impostati su TRUE. Per accertarti che Auto Scaling group metrics collection (Raccolta dei parametri di un gruppo con scalabilità automatica) sia abilitata, accedi al gruppo con scalabilità automatica associato nella console Amazon EC2. Nella scheda Monitoring (Monitoraggio) dovresti vedere che la casella di controllo Enable (Attiva) è attivata.