Comment configurer Cluster Autoscaler sur Amazon EKS ?

Dernière mise à jour : 13/08/2020

Je souhaite configurer Cluster Autoscaler sur Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Cluster Autoscaler est un outil qui ajuste automatiquement la taille d'un cluster Kubernetes dans l'un des cas suivants :

  • Il existe des pods dont l'exécution échoue dans le cluster lorsque les ressources sont insuffisantes.
  • Il existe des nœuds dans le cluster qui sont sous-utilisés pendant une période prolongée et leurs pods peuvent être placés dans d'autres nœuds existants.

Cluster Autoscaler met à l'échelle les nœuds de travail dans les groupes Auto Scaling définis et s'exécute comme déploiement dans votre cluster.

Remarque : la solution suivante suppose que vous disposez d'un cluster Amazon EKS actif associé à des nœuds de travail créés par un modèle AWS CloudFormation. La résolution utilise la configuration de découverte automatique, mais vous pouvez également configurer Cluster Autoscaler en spécifiant un ou plusieurs groupes Auto Scaling.

Résolution

Configurer la découverte automatique

1.    Ouvrez la console AWS CloudFormation, sélectionnez votre pile, puis choisissez l'onglet Resources (Ressources).

2.    Pour rechercher la ressource Auto Scaling créée par votre pile, recherchez le groupe de nœuds dans la colonne ID logique. Pour plus d'informations, consultez Lancement de nœuds Amazon Linux 2 autogérés.

3.    Ouvrez la console Amazon Elastic Compute Cloud (Amazon EC2), puis choisissez Groupes Auto Scaling dans le volet de navigation.

4.    Choisissez l'onglet Tags (Balises), puis Add/Edit tags.(Ajouter/Modifier des balises).

5.    Dans la fenêtre Ajouter/Modifier des balises de groupe Auto Scaling, entrez les balises suivantes en remplaçant awsExampleClusterName par le nom de votre cluster Amazon EKS. Sélectionnez ensuite Enregistrer.

Key: k8s.io/cluster-autoscaler/enabled
Key: k8s.io/cluster-autoscaler/awsExampleClusterName

Remarque : les clés des balises que vous avez saisies n'ont pas de valeurs. Cluster Autoscaler ignore les valeurs définies pour les clés.

Créer une stratégie IAM

1.    Créez une stratégie AWS Identity and Access Management (IAM) appelée ClusterAutoScaler sur la base de l'exemple suivant. Cela donne au nœud de travail exécutant Cluster Autoscaler accès aux ressources et aux actions requises.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "autoscaling:DescribeAutoScalingGroups",
                "autoscaling:DescribeAutoScalingInstances",
                "autoscaling:DescribeLaunchConfigurations",
                "autoscaling:DescribeTags",
                "autoscaling:SetDesiredCapacity",
                "autoscaling:TerminateInstanceInAutoScalingGroup",
                "ec2:DescribeLaunchTemplateVersions"
            ],
            "Resource": "*"
        }
    ]
}

Remarque : en ajoutant la stratégie précédente au rôle des nœuds de travail, vous permettez à tous les pods ou applications qui s'exécutent sur les instances EC2 respectives d'utiliser les autorisations IAM supplémentaires.

2.    Associez la nouvelle stratégie au rôle d'instance attaché à vos nœuds de travail Amazon EKS.

Déployer Cluster Autoscaler

1.    Pour télécharger un exemple de fichier de déploiement fourni par le projet Cluster Autoscaler sur GitHub, exécutez la commande suivante :

wget https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml

2.    Ouvrez le fichier YAML téléchargé et définissez le nom du cluster (AWSExampleClusterName) en fonction de l'exemple suivant. Enfin, enregistrez les modifications.

...          
          command:
            - ./cluster-autoscaler
            - --v=4
            - --stderrthreshold=info
            - --cloud-provider=aws
            - --skip-nodes-with-local-storage=false
            - --expander=least-waste
            - --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/awsExampleClusterName
...

3.    Pour créer un déploiement Cluster Autoscaler, exécutez la commande suivante :

kubectl apply -f cluster-autoscaler-autodiscover.yaml

4.    Pour recherchez les erreurs de déploiement dans les journaux de déploiement Cluster Autoscaler, exécutez la commande suivante :

kubectl logs -f deployment/cluster-autoscaler -n kube-system

Tester la mise à l'échelle des nœuds de travail

1.    Pour connaître le nombre actuel de nœuds de travail, exécutez la commande suivante :

kubectl get nodes

2.    Pour augmenter le nombre de nœuds de travail, exécutez les commandes suivante :

kubectl create deployment autoscaler-demo --image=nginx
kubectl scale deployment autoscaler-demo --replicas=50

Remarque : la commande précédente crée le déploiement autoscaler-demo en utilisant une image NGINX directement dans le cluster Kubernetes, puis lance 50 pods.

3.    Pour vérifier le statut du déploiement et voir le nombre de pods augmenter, exécutez la commande suivante :

kubectl get deployment autoscaler-demo --watch

4.    Lorsque le nombre de pods disponibles atteint 50, vérifiez le nombre de nœuds de travail en exécutant la commande suivante :

kubectl get nodes

Nettoyer le déploiement de test

1.    Pour réduire les nœuds de travail en supprimant le déploiement autoscaler-demo qui a été créé auparavant, exécutez la commande suivante :

kubectl delete deployment autoscaler-demo

2.    Pour voir le nombre de nœuds de travail, attendez environ 10 minutes, puis exécutez la commande suivante :

kubectl get nodes

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?