26 octobre 2023
By Lionel Gurret.
Dans le cadre de la gestion d’une infrastructure Azure Kubernetes Service (AKS), il est essentiel de déterminer, comprendre et optimiser les coûts. Ce processus permet de maximiser l’efficacité tout en minimisant les dépenses. Dans cette démarche, nous explorerons les différents éléments facturés, les composants gratuits, et des stratégies d’optimisation pour un budget maîtrisé.
Pour déterminer le coût d’un cluster Azure Kubernetes Service (AKS) et réfléchir ensemble aux différents leviers nous permettant d’optimiser sa facture mensuelle, il est essentiel de comprendre dans un premier temps quels éléments seront facturés directement ou indirectement.
Dans une infrastructure AKS, certains composants sont fournis gratuitement par Microsoft.
Le plan de contrôle (Control Plane), qui gère l’orchestration et la gestion des nœuds, est l’un de ces éléments.
Tout comme l’Identité gérée (Managed Identity) nécessaire pour les opérations de sécurité et d’authentification est également offerte sans frais supplémentaires.
Enfin, les extensions AKS telles que Open Cluster Management (OCM) et les pilotes Container Storage Interface (CSI) sont incluses sans coût supplémentaire.
Les Machines Virtuelles, qu’elles soient utilisées pour les charges système ou utilisateur, engendrent des coûts en fonction de leur taille et de leur quantité.
Les équilibreurs de charge (Load Balancer) et les adresses IPs associées sont également facturés dans le cas d’un cluster publique.
De même, le traffic réseau entre les zones de disponibilité (Availability Zones) est sujette à des frais, tout comme l’utilisation d’un plan Standard pour le plan de contrôle.
En cas d’utilisation d’un cluster privé, les frais de trafic vers les points de terminaison privés (Endpoints) doivent également être pris en compte.
D’autres coûts qui ne doivent pas être négligés incluent les frais liés à la mise en place de peering de réseaux virtuels (VNET Peering) avec un réseau central (Hub network.)
Il faudra également considérer dans notre facture, l’utilisation éventuelle de la passerelle d’application (Application Gateway) en tant que contrôleur d’entrée (Ingress Controller), le stockage de secrets et de certificats dans Azure Key Vault, ainsi que les coûts associés à la collecte de logs et de métriques.
De plus, l’utilisation de volumes persistants basés sur Azure Disk, Blob ou File entraîne des frais, tout comme la sauvegarde du cluster elle-même !
Ces coût peuvent être estimés avant de vous lancer via le Azure Princing Calculator.
Maintenant que nous avons énuméré les différents coûts obligatoires et possibles d’un cluster AKS, passons à l’optimisation de notre facture dans une démarche FinOps.
Pour optimiser les frais directement associés à votre environnement Kubernetes, la gestion efficace des images Docker est essentielle. En réduisant la taille et en améliorant les performances de vos images, vous pouvez réduire la consommation de stockage et d’utilisation des ressources, ce qui se traduit par des économies à long terme.
Documentation liée à cette optimisation |
---|
How to build small images |
Ensuite, l’auto-scalabilité des pods (Horizontal Pod Autoscaling – HPA) est un outil puissant pour optimiser les ressources Kubernetes. En configurant des règles d’auto-scalabilité basées sur la charge de travail, vous permettez au cluster de s’adapter dynamiquement aux besoins de vos applications.
De plus, l’auto-scalabilité des nœuds (Node Autoscaling) est une fonctionnalité importante à exploiter. Dans AKS, vous pouvez configurer l’auto-scaling des pools de nœuds (nodepools) en fonction de la demande de vos applications.
En ajustant automatiquement le nombre de pods et de nœuds en réponse à la charge de travail, vous assurez une utilisation optimale des ressources et évitez de payer celles inutilisées.
Vertical Pod Autoscaler (VPA) est une fonctionnalité mal connue qui pourrait aussi aider dans cette situation. Ainsi, au lieu de coder en dur les valeurs de CPU/Memoire dans votre déploiement YAML (ou toute autre ressource Kubernetes), VPA trouvera la bonne valeur basée sur les percentiles 90 (P90) en utilisant les métriques internes ou celles de Prometheus.
Documentation liée à ces optimisations |
---|
HPA avec KEDA |
Autoscaling des nœuds sur AKS |
Vertical Pod Autoscaler dans Azure |
Une pratique essentielle pour optimiser l’utilisation des ressources Kubernetes est d’utiliser les limites (limits) et les requêtes (requests) au niveau des conteneurs. En définissant des limites pour la quantité maximale de CPU et de mémoire qu’un conteneur peut utiliser, vous évitez que des conteneurs gourmands en ressources ne monopolisent les ressources du cluster.
Vous pouvez configurer ces paramètres directement dans vos manifestes :
Il est également possible de tirer à profit des Azure Policies pour mettre en place des normes et de la compliance afin de se protéger de la surutilisation des ressources.
Ci-dessous, cette policy peut être utilisée, afin de veiller à ce que les limites des ressources de processeur et de mémoire des conteneurs ne dépassent pas les limites spécifiées.
Documentation liée à cette optimisation |
---|
Kubernetes.io |
Resource quota azure policy |
Un autre élément clé pour optimiser les coûts de Kubernetes est l’utilisation d’outils de surveillance et de gestion des coûts tels que Kubecost.
Kubecost vous permet de suivre précisément les coûts liés aux ressources Kubernetes, d’identifier les goulots d’étranglement et les opportunités d’optimisation, et de prendre des décisions éclairées pour réduire les dépenses.
Documentation liée à cette optimisation |
---|
Kubecost |
L’une des étapes cruciales pour optimiser les coûts de votre cluster Azure Kubernetes Service (AKS) consiste à choisir judicieusement les gabarits de machines pour vos groupes de nœuds. La majeure partie de votre facturation provient de l’exécution de machines virtuelles, et il est essentiel de sélectionner les gabarits adaptés en fonction de vos besoins spécifiques.
Vous pouvez par exemple vous baser sur ce tableau de décision : | Type de Workload | Gabarit Recommandé |
---|---|---|
Peu gourmand en ressources | Série B | |
Besoin de plus de mémoire | Série E | |
Intensif en calcul | Série F |
De plus, il est à noter que vous pouvez bénéficier de promotions temporaires en choisissant des machines virtuelles en fonction de votre budget avec la commande az vm list-usage
.
Il est également important de prendre en considération le type de processeurs, qu’il s’agisse des processeurs Arm (plus abordables) ou Intel, selon vos exigences.
Enfin, la localisation géographique de votre cluster AKS joue un rôle crucial dans la maîtrise des coûts. Optez pour une région qui répond à la fois à vos besoins et à votre budget.
Documentation liée à cette optimisation |
---|
Taille des machines virtuelles |
Azure Kubernetes Service (AKS) propose deux options de tarification pour le management du control plane : le SKU Gratuit et le SKU Standard. Le choix dépend principalement de l’utilisation que vous envisagez pour votre cluster AKS.
SKU Gratuit (Free) : Le SKU Gratuit d’AKS est une option unique qui vous permet de ne payer que pour les machines virtuelles, le stockage associé et les ressources réseau consommées. Le control plane Kubernetes géré est inclus gratuitement. Cette offre vous permet de déployer des clusters de test illimités sans coût pour évaluer si AKS correspond à vos besoins. Vous pouvez également configurer et tester votre infrastructure avant de lancer des charges de travail critiques. Le SKU Gratuit est recommandé pour les clusters de moins de 10 nœuds et convient aux expérimentations, à l’apprentissage et aux tests simples.
SKU Standard : Le SKU Standard est la solution de gestion du control plane recommandée pour les déploiements en production et les environnements exigeants. Il offre des ressources de control plane accrues, une évolutivité améliorée et le support de disponibilité garantie (SLA). Le SKU Standard non seulement inclut le SLA de disponibilité, mais offre également des fonctionnalités supplémentaires telles que la prise en charge de jusqu’à 5000 nœuds par cluster et la mise à l’échelle automatique du serveur API.
Documentation liée à cette optimisation |
---|
Niveaux tarifaires pour AKS |
L’utilisation d’Ephemeral OS Disk est activé par défaut et recommandé pour les VM groupe de nœud. Il n’y a donc rien à configurer pour se point si ce n’est de vérifier votre configuration.
Cependant, pour les données stockées via des volumes persistants, il est important de bien choisir son type de stockage. Il est possible de stocker ses données sur des disques managés, Azure Files ou Azure Blob storage.
En outre, on peut constater sur l’image suivante, que plusieurs classes de stockage sont préconfigurées sur les clusters AKS et que celle utilisée par défaut (Azure disk managed), utilise du stockage de type SSD :
Il peut être donc intéressant de basculer sur une classe de stockage proposant du stockage de type HDD dans un environnement de test ou de développement.
Enfin, la gestion dynamique ou statique des volumes ainsi que la stratégie de récupération (Reclaim Policy) doivent être pris en compte par l’administrateur du cluster dans notre démarche FinOps.
Documentation liée à cette optimisation |
---|
AKS Storage Classes |
L’utilisation d’un groupe de nœuds utilisant des instances Spot d’Azure peut permettre d’effectuer des économies significatives (jusqu’à 80%). Cette solution est idéale pour les charges de travail qui peuvent gérer des interruptions, des terminaisons anticipées et des évictions. Par exemple, les tâches de traitement par lots (batch), les environnements de développement et de test, ainsi que les charges de calcul intensif peuvent être de bons candidats pour être planifiés sur un groupe de nœud Spot.
D’autre part, si vous avez correctement planifié votre capacité et que votre charge de travail est prévisible et s’étend sur une période prolongée, envisagez de vous inscrire aux instances réservées Azure (Azure Reserved Instances). Cette option vous permet de réduire davantage les coûts de ressources (70% de réduction) en vous engageant sur un gabarit d’instance pour une durée de 1,3 ou 5 ans.
Documentation liée à cette optimisation |
---|
Spot Instances |
Reservations |
Un moyen simple à mettre en place pour diminuer votre facture AKS est de planifier l’arrêt de vos clusters de développement en dehors des heures d’utilisation. Vous pouvez pour cela utiliser dans vos pipeline la commande suivante pour éteindre de façon automatique votre cluster :
az aks stop --name myAKSCluster --resource-group myResourceGroup
Gardez à l’esprit que cette méthode permet d’économiser sur les ressources groupes de nœuds, mais pas sur les coûts liés aux équilibreurs de charge, aux adresses IP, et autres ressources.
Documentation liée à cette optimisation |
---|
Stop and Start AKS |
La collecte des logs de ressources pour un cluster Azure Kubernetes Service (AKS) peut entraîner des coûts substantiels, en particulier pour les logs kube-audit. Pour réduire la quantité de données collectées et ainsi maîtriser les coûts, il est recommandé de suivre les conseils suivants :
Désactivez la collecte des logs kube-audit lorsque cela n’est pas nécessaire. Les logs kube-audit, qui enregistrent les événements de surveillance de Kubernetes, peuvent rapidement générer un volume considérable de données.
Activez la collecte depuis kube-audit-admin. Cela permet d’exclure les événements de type "get" et "list" des audits. Ces événements sont fréquents et peuvent contribuer de manière significative à la croissance des logs
Activez les logs spécifiques aux ressources. Plutôt que de collecter tous les types de logs de manière générique, configurez votre cluster AKS pour collecter spécifiquement les logs de ressources qui sont essentiels pour votre suivi. Parallèlement, configurez le stockage des logs AKSAudit en tant que logs de base pour réduire les coûts.
Documentation liée à cette optimisation |
---|
Monitor AKS |
Pour ce faire, il est recommandé d’utiliser Azure Cost Management + Billing, un outil puissant qui vous permet de suivre et d’analyser vos dépenses dans le cloud.
Avec Azure Cost Management, vous pouvez établir des budgets et surveiller les coûts mensuels de vos ressources AKS.
Ces derniers vous permettront de détecter des anomalies mais aussi de vous avertir en cas de dépassement.
L’envoi de rapports mensuels à votre équipe FinOps vous permettra de réagir rapidement aux fluctuations des coûts et d’ajuster votre utilisation en conséquence.
Documentation liée à cette optimisation |
---|
Cost Management + Billing |
Pour terminer, les opérations manuelles étant également couteuses, certains processus de mise à jour peuvent être automatisés et vous permettre ainsi de réduire les coûts de management de votre entreprise.
Pour cela vous pouvez commencer par utiliser la fonctionnalité AKS NodeImage qui vous offre un contrôle exclusif sur les mises à jour de sécurité du système d’exploitation de vos nœuds. .
Ensuite, pour la mise à jour de vos clusters de développement AKS, essayez la fonctionnalité auto upgrade qui vous permettra de vous assurer que vos clusters sont à jour et que vous ne manquez pas les dernières fonctionnalités ou correctifs d’AKS !
Documentation liée à cette optimisation |
---|
AKS node auto upgrade |
Node Image |
Enfin, n’oubliez pas de vous poser les bonnes questions quand au service retenu pour faire tourner vos conteneurs. Certains services comme ACA, ACI peuvent être considérés comme de bonnes alternatives en fonction du niveau d’orchestration recherché et de l’intérêt à utiliser l’API Kubernetes. En effet, de nombreuses fonctionnalités primordiales, jugées longtemps comme bloquantes ont récemment été rendu disponibles pour ces services évoqués. Le choix du service peut être déterminant pour votre facture Cloud !
Consultez les liens suivants liés à cet article de blog et découvrez comment SoKube peut vous aider :