Comment mettre à l’échelle automatiquement vos charges de travail sur DigitalOcean Kubernetes

introduction

Lorsqu’ils travaillent avec une application créée sur Kubernetes, les développeurs ont souvent besoin de planifier des https://kubernetes.io/docs/concepts supplémentaires. / workloads / pods / pod / [pods] pour gérer les périodes de pointe du trafic ou de traitement de charge accrue. Par défaut, la planification de ces modules supplémentaires est une étape manuelle. le développeur doit modifier le nombre souhaité de replicas dans la page https://kubernetes.io/docs/concepts/workloads/controllers/deployment/ objet de déploiement] pour prendre en compte l’augmentation du trafic, puis modifiez-le lorsque les modules supplémentaires ne sont plus nécessaires. Cette dépendance à une intervention manuelle peut être moins qu’idéale dans de nombreux scénarios. Par exemple, votre charge de travail peut atteindre les heures de pointe au milieu de la nuit lorsque personne n’est réveillé pour redimensionner les modules, ou votre site Web peut connaître une augmentation inattendue du trafic lorsqu’une réponse manuelle ne serait pas assez rapide pour gérer la charge. Dans ces situations, l’approche la plus efficace et la moins sujette aux erreurs consiste à automatiser la mise à l’échelle de vos clusters avec Horizontal Pod Autoscaler (HPA) .

En utilisant les informations du Metrics Server, le HPA détecte une utilisation accrue des ressources et répond en mettant à l’échelle votre charge de travail. Ceci est particulièrement utile avec les architectures de microservices et donnera à votre cluster Kubernetes la possibilité de redimensionner votre déploiement en fonction de métriques telles que l’utilisation du processeur. Combinée à DigitalOcean Kubernetes (DOKS), une offre gérée de Kubernetes offrant aux développeurs une plate-forme de déploiement d’applications conteneurisées, à l’aide de HPA, permet de créer une infrastructure automatisée qui s’ajuste rapidement aux changements de trafic et de charge.

Dans ce didacticiel, vous allez configurer un exemple de déploiement sur DOKS Nginx pouvant effectuer une mise à l’échelle automatique afin de prendre en compte l’augmentation de la charge du processeur. Pour ce faire, vous déployerez Metrics Server dans votre cluster afin de rassembler les métriques de pod que HPA utilisera pour déterminer le moment propice à la mise à l’échelle.

Conditions préalables

Avant de commencer ce guide, vous aurez besoin des éléments suivants:

  • Un cluster DigitalOcean Kubernetes avec votre connexion configurée avec la valeur par défaut + kubectl +. Les instructions sur la façon de configurer + kubectl + sont indiquées dans l’étape * Connexion à votre cluster * lorsque vous créez votre cluster. Pour créer un cluster Kubernetes sur DigitalOcean, voir Kubernetes Quickstart.

  • Le gestionnaire de paquets Helm installé sur votre ordinateur local et Tiller installé sur votre cluster. Pour ce faire, effectuez les étapes 1 et 2 de la How Pour installer le logiciel sur les clusters Kubernetes avec le gestionnaire de paquets Helm.

Étape 1 - Création d’un déploiement de test

Afin de montrer l’effet de la HPA, vous allez d’abord déployer une application que vous utiliserez pour une mise à l’échelle automatique. Ce tutoriel utilise une image nginx Docker standard en tant que déploiement car il est parfaitement capable de fonctionner en parallèle. Il est largement utilisé dans Kubernetes avec des outils tels que le https. : //github.com/kubernetes/ingress-nginx [Contrôleur Nginx Ingress], et est léger à configurer. Ce déploiement de Nginx servira une page statique * Welcome to Nginx! *, Fournie en standard dans l’image de base. Si vous avez déjà un déploiement que vous souhaitez adapter, n’hésitez pas à utiliser ce déploiement et à ignorer cette étape.

Créez l’exemple de déploiement à l’aide de l’image de base Nginx en exécutant la commande suivante. Vous pouvez remplacer le nom ++ si vous souhaitez attribuer un nom différent à votre déploiement:

kubectl create deployment  --image=nginx:latest

Le drapeau + - image = nginx: latest + créera le déploiement à partir de la dernière version de l’image de base Nginx.

Après quelques secondes, votre pod ++ va démarrer. Pour voir ce pod, exécutez la commande suivante, qui vous montrera les pods s’exécutant dans l’espace de noms actuel:

kubectl get pods

Cela vous donnera une sortie similaire à celle-ci:

OutputNAME                                                   READY   STATUS             RESTARTS   AGE
                                  1/1     Running            0          11s

Notez qu’il n’y a qu’un seul module déployé à l’origine. Une fois la mise à l’échelle automatique déclenchée, plus de modules se dérouleront automatiquement.

Vous avez maintenant un déploiement de base opérationnel au sein du cluster. C’est le déploiement que vous allez configurer pour le calibrage automatique. L’étape suivante consiste à configurer ce déploiement pour définir ses demandes de ressources et ses limites.

Étape 2 - Définition des limites et des demandes de CPU sur votre déploiement

Dans cette étape, vous allez définir requests et limites sur l’utilisation du processeur pour votre déploiement. Les limites dans Kubernetes sont définies sur le déploiement pour décrire la quantité maximale de ressource (processeur ou mémoire) que le pod peut utiliser. Requests sont définis sur le déploiement pour décrire la quantité de cette ressource nécessaire sur un nœud pour que ce nœud soit considéré comme un nœud valide pour la planification. Par exemple, si votre demande de mémoire sur votre serveur Web est définie sur 1 Go, seuls les nœuds disposant d’au moins 1 Go de mémoire disponible seront pris en compte pour la planification. Pour la mise à l’échelle automatique, il est nécessaire de définir ces limites et ces demandes, car le HPA devra disposer de ces informations lors de la prise de décision de dimensionnement et de planification.

Pour définir les demandes et les limites, vous devez modifier le déploiement que vous venez de créer. Ce didacticiel utilisera la commande k + kubectl edit + ` pour modifier la configuration de l’objet API stockée dans le cluster. La commande `+ kubectl edit +