Utiliser des conteneurs avec SQL Server sur Linux
Les conteneurs aident les organisations à créer des installations de SQL Server flexibles et scalables.
Wide World Importers prend en charge certaines charges de travail de base de données à grande échelle qui nécessitent une architecture d’hébergement flexible et scalable. Vous souhaitez évaluer la possibilité d’héberger SQL Server dans des environnements virtuels tels que des machines virtuelles et des conteneurs.
Ici, vous allez apprendre à choisir entre des conteneurs et des machines virtuelles pour une base de données.
Comparaison des machines virtuelles et des conteneurs
La virtualisation est une technique que les administrateurs utilisent pour héberger plusieurs serveurs virtuels sur un seul serveur physique. Quand vous utilisez la virtualisation, vous pouvez facilement déployer des instances supplémentaires de, par exemple, SQL Server sans acheter ni installer de matériel supplémentaire. Il existe deux approches courantes de la virtualisation :
- Machines virtuelles : quand vous utilisez des machines virtuelles, chaque instance est un serveur virtuel complet, avec son propre système d’exploitation et son propre matériel.
- Conteneurs : quand vous utilisez des conteneurs, chaque instance partage un système d’exploitation et des ressources matérielles avec l’ordinateur hôte.
Les machines virtuelles et les conteneurs fournissent un environnement isolé dans lequel des applications telles que SQL Server peuvent s’exécuter comme si elles étaient sur un ordinateur physique distinct.
Les machines virtuelles sont plus volumineuses et plus longues à créer mais, étant donné qu’elles disposent de leur propre système d’exploitation, elles utilisent une configuration et un matériel différents de ceux de l’ordinateur hôte. Vous pouvez également combiner des machines virtuelles dotées de différents systèmes d’exploitation sur un même hôte. Par exemple, sur un hôte Linux, vous pouvez installer une machine virtuelle exécutant Linux et Apache pour héberger un site web. Il peut également y avoir une autre machine virtuelle exécutant Windows et SQL Server pour héberger une base de données.
Les conteneurs étant plus petits, ils sont chargés bien plus rapidement que les machines virtuelles. Toutefois, si votre hôte exécute Linux Ubuntu, par exemple, tous les conteneurs sur cet ordinateur doivent exécuter la même version d’Ubuntu. Sur un hôte Linux, vous pouvez installer un conteneur exécutant Linux et Apache, mais votre conteneur de base de données doit également exécuter Linux. C’est possible si vous exécutez SQL Server 2017 ou ultérieur.
Sur l’ordinateur hôte, vous devez installer un logiciel comme Hyper-V ou VirtualBox pour héberger des machines virtuelles. Pour les conteneurs, vous pouvez utiliser le système Docker, CRI-O, rkt ou d’autres hôtes de conteneur.
Raisons d’utiliser des machines virtuelles
Il existe toujours des situations dans lesquelles les conteneurs ne constituent pas la meilleure solution. Comme les conteneurs s’exécutent sur un même système d’exploitation et partagent les ressources système, la sécurité est une préoccupation. Si un attaquant obtient des privilèges de superutilisateur, certains vecteurs peuvent permettre l’accès aux applications. Dans les conteneurs, les applications doivent s’exécuter sur le même système d’exploitation que l’ordinateur hôte. Vous ne pouvez pas exécuter des applications basées sur Linux dans des conteneurs Windows. Avec les machines virtuelles, vous pouvez héberger une machine Linux sur Windows ou une machine Windows sur macOS, ce qui vous offre une plus grande flexibilité. Les machines virtuelles vous permettent d’héberger plusieurs applications avec une intégration étroite sur une même machine virtuelle. Les conteneurs n’hébergent traditionnellement que des applications uniques.
Les machines virtuelles sont moins efficaces que les conteneurs. Sur un ensemble de matériel donné, vous pouvez exécuter au moins deux fois plus d’applications dans des conteneurs qu’avec des machines virtuelles. Une machine virtuelle utilise davantage de ressources, car elle a besoin d’une copie complète du système d’exploitation ainsi que de versions virtualisées de tout le matériel pour prendre en charge le système d’exploitation invité.
Raisons d’utiliser des conteneurs
Les conteneurs sont plus légers et vous permettent d’empaqueter des applications dans un encombrement plus réduit. Puisque les conteneurs ne sont hébergés que sur un seul système d’exploitation, les tâches administratives sont moins nombreuses. Les correctifs et les mises à jour ne doivent être appliqués qu’à un seul système d’exploitation, et non à tous les systèmes d’exploitation invités de chaque machine virtuelle. Les conteneurs étant plus petits et plus simples, ils peuvent être démarrés en quelques secondes, alors que plusieurs minutes sont nécessaires au démarrage d’une machine virtuelle.
Orchestration
Vous pouvez utiliser Docker Swarm, Kubernetes et d’autres solutions pour orchestrer des conteneurs. Les orchestrateurs permettent de superviser les applications et de les mettre à l’échelle avec des conteneurs, et offrent un niveau de reprise d’activité après sinistre. Microsoft fournit des outils et des exemples d’utilisation de Kubernetes. C’est donc un bon choix pour conteneuriser SQL Server sur Linux. Une image conteneur SQL Server sur Linux est disponible pour être utilisée avec Kubernetes.
SQL Server sur Linux conteneurisé
Le problème que présentent les bases de données qui s’exécutent dans des conteneurs est le stockage persistant. Vous devez fournir un emplacement de stockage en dehors du conteneur, dans lequel la base de données pourra conserver les fichiers de base de données. Les modifications seront ensuite disponibles pour tous les conteneurs d’un cluster. Si vous utilisez Kubernetes, vous pouvez utiliser un volume persistant pour cet emplacement.
Commencez par créer un volume persistant, puis ajoutez une revendication de volume persistant. Créez un manifeste de déploiement pour SQL Server sur Linux qui utilise l’image conteneur mssql-server-linux
créée par Microsoft. Le manifeste contient également des définitions pour la revendication de volume persistant et un équilibreur de charge pour le service, afin de garantir une adresse IP cohérente. Créez le déploiement et vérifiez que SQL Server s’exécute à l’intérieur d’un pod. Une fois cette configuration terminée, Kubernetes démarre une nouvelle instance en cas de défaillance du nœud. Un test simple consiste à supprimer ce pod et à vérifier qu’un nouveau pod démarre automatiquement.