Lorsque vous souhaitez utiliser Linux pour fournir des services à une entreprise, ces services doivent être sécurisés, résilients et évolutifs. Mots gentils, mais qu’entendons-nous par eux?
‘Garantir’ signifie que les utilisateurs peuvent accéder aux données dont ils ont besoin, qu’il s’agisse d’un accès en lecture seule ou d’un accès en écriture. Dans le même temps, aucune donnée n’est exposée à une partie qui’n’est pas autorisé à le voir. La sécurité est trompeuse: vous pouvez penser que tout est protégé uniquement pour découvrir plus tard qu’il y a des trous. Concevoir en sécurité dès le début d’un projet est beaucoup plus facile que d’essayer de le modifier ultérieurement.
‘Résilient’ signifie que vos services tolèrent les pannes au sein de l’infrastructure. Un échec peut être un contrôleur de disque serveur qui ne peut plus accéder à aucun disque, rendant les données inaccessibles. Ou bien l’échec peut être dû à un commutateur réseau qui ne permet plus à deux systèmes ou plus de communiquer. Dans ce contexte, un “point de défaillance unique” ou SPOF est une défaillance qui affecte négativement la disponibilité du service. Une infrastructure résiliente est une infrastructure sans SPOF.
‘Évolutif’ décrit la capacité des systèmes à gérer les pics de demande avec élégance. Il dicte également la facilité avec laquelle des modifications peuvent être apportées aux systèmes. Par exemple, ajouter un nouvel utilisateur, augmenter la capacité de stockage ou déplacer une infrastructure d’Amazon Web Services vers Google Cloud – ou même la déplacer en interne..
Dès que votre infrastructure s’étend au-delà d’un serveur, de nombreuses options vous permettent d’accroître la sécurité, la résilience et l’évolutivité. nous’Nous verrons comment ces problèmes ont été résolus de manière traditionnelle et quelle nouvelle technologie est disponible pour changer le visage de l’informatique de grande taille..
Pour comprendre quoi’s possible aujourd’hui, il’s utile de regarder comment les projets technologiques ont été traditionnellement mis en œuvre. À l’époque jadis, c’est-à-dire il y a plus de 10 ans, les entreprises achetaient ou louaient du matériel pour exécuter tous les composants de leurs applications. Même des applications relativement simples, telles qu’un site Web WordPress, ont plusieurs composants. Dans le cas de WordPress, une base de données MySQL est nécessaire avec un serveur Web, tel que Apache, et un moyen de gérer le code PHP. Afin qu’ils’d construire un serveur, configurer Apache, PHP et MySQL, installer WordPress et le’d aller.
En gros, cela a fonctionné. Cela a fonctionné suffisamment bien pour qu’il reste encore un grand nombre de serveurs configurés exactement de cette manière. Mais ce n’était pas’t parfait, et deux des plus gros problèmes étaient la résilience et l’évolutivité.
Le manque de résilience signifiait que tout problème important sur le serveur entraînerait une perte de service. Il est clair qu’une défaillance catastrophique signifierait l’absence de site Web, mais il n’y avait également pas de place pour effectuer la maintenance programmée sans impacter le site Web. Même installer et activer une mise à jour de sécurité courante pour Apache nécessiterait quelques secondes’ panne pour le site.
Le problème de la résilience a été en grande partie résolu en construisant ‘clusters à haute disponibilité’. Le principe était de disposer de deux serveurs exécutant le site Web, configurés de telle sorte que la défaillance de l’un ou l’autre’Le résultat est que le site Web est en panne. Le service fourni était résilient même si les serveurs individuels n’étaient pas.
Nuages abstraits
Une partie de la puissance de Kubernetes réside dans son abstraction. D’un développeur’Dans cette perspective, ils développent l’application à exécuter dans un conteneur Docker. Docker ne’Peu importe si ça’s fonctionnant sous Windows, Linux ou un autre système d’exploitation. Ce même conteneur Docker peut être extrait du développeur’s MacBook et fonctionner sous Kubernetes sans aucune modification.
L’installation de Kubernetes elle-même peut être une seule machine. Bien sûr, beaucoup des avantages de Kubernetes ont été gagnés’t être disponible: il n’y aura pas de mise à l’échelle automatique; Là’s un seul point d’échec évident, et ainsi de suite. Comme preuve de concept dans un environnement de test, cela fonctionne.
Une fois que vous’re prêt pour la production, vous pouvez exécuter en interne ou sur un fournisseur de cloud tel que AWS ou Google Cloud. Les fournisseurs de cloud disposent de certains services intégrés qui facilitent l’exécution de Kubernetes, mais aucune de ces conditions n’est matérielle. Si vous souhaitez vous déplacer entre Google, Amazon et votre propre infrastructure, vous configurez Kubernetes et vous vous déplacez. Aucune de vos applications ne doit changer de quelque manière que ce soit.
Et où est Linux? Kubernetes fonctionne sous Linux, mais le système d’exploitation est invisible pour les applications. C’est une étape importante dans la maturité et la convivialité des infrastructures informatiques.
L’effet Slashdot
Le problème d’évolutivité est un peu plus délicat. Laisser’Vous dites que votre site WordPress reçoit 1 000 visiteurs par mois. Un jour, votre entreprise est mentionnée sur Radio 4 ou à la télévision. Tout à coup, vous obtenez plus d’un mois’s la valeur des visiteurs en 20 minutes. nous’avons tous entendu parler de sites Web ‘s’écraser’, et cela’s typiquement pourquoi: un manque d’évolutivité.
Les deux serveurs qui ont contribué à la résilience pouvaient gérer une charge de travail supérieure à celle d’un serveur à lui seul.’s reste limité. Toi’d payez deux serveurs 100% du temps et la plupart du temps, ils fonctionnent parfaitement. Il’Il est probable qu’un seul puisse gérer votre site. Ensuite, John Humphrys mentionne votre entreprise sur Today et vous’d besoin de 10 serveurs pour gérer la charge – mais seulement pendant quelques heures.
Le cloud computing était la meilleure solution au problème de résilience et d’évolutivité. Configurez une ou deux instances de serveur – les petits serveurs qui exécutent vos applications – sur Amazon Web Services (AWS) ou Google Cloud. Si l’une des instances échouait pour une raison quelconque, elle serait automatiquement redémarrée. Configurez correctement la mise à l’échelle automatique et lorsque M. Humphrys provoque l’augmentation rapide de la charge de travail sur les instances de votre serveur Web, des instances de serveur supplémentaires sont automatiquement démarrées pour partager la charge de travail. Plus tard, lorsque les intérêts diminuent, ces instances supplémentaires sont arrêtées et vous ne payez que ce que vous utilisez. Parfait… ou est-ce?
Bien que la solution cloud soit beaucoup plus flexible que le serveur autonome traditionnel, il reste des problèmes. Mise à jour de toutes les instances de cloud en cours d’exécution isn’t simple. Développer pour le cloud comporte également des défis: l’ordinateur portable que vos développeurs utilisent peut être similaire à l’instance cloud, mais’Ce n’est pas pareil. Si vous vous engagez sur AWS, la migration vers Google Cloud est une entreprise complexe. Et supposez, pour une raison quelconque, vous ne faites simplement’Je ne veux pas confier votre ordinateur à Amazon, Google ou Microsoft?
Les conteneurs sont apparus comme un moyen de regrouper les applications avec toutes leurs dépendances dans un seul package pouvant être exécuté n’importe où. Des conteneurs, tels que Docker, peuvent s’exécuter sur vos développeurs.’ les ordinateurs portables de la même manière qu’ils fonctionnent sur vos instances de cloud, mais la gestion d’un parc de conteneurs devient de plus en plus difficile à mesure que le nombre de conteneurs augmente.
La réponse est l’orchestration de conteneur. C’est un changement d’orientation important. Auparavant, nous nous assurions de disposer de suffisamment de serveurs, physiques ou virtuels, pour pouvoir traiter la charge de travail. Utiliser les fournisseurs de cloud’ la mise à l’échelle automatique a aidé, mais nous avions toujours affaire à des instances. Nous devions configurer les équilibreurs de charge, les pare-feu, le stockage de données et plus encore manuellement. Avec l’orchestration de conteneurs, tout cela (et bien plus encore) est pris en charge. Nous spécifions les résultats requis et nos outils d’orchestration de conteneurs répondent à nos exigences. Nous spécifions ce que nous voulons faire, plutôt que comment nous voulons le faire.
L’intégration continue et le déploiement continu peuvent bien fonctionner avec Kubernetes. Ici’s un aperçu de Jenkins utilisé pour créer et déployer une application Java
(Crédit image: Future)
Devenir un Kubernete
Kubernetes (ku-ber-net-eez) est aujourd’hui le principal outil d’orchestration de conteneurs. Il provient de Google. Si quelqu’un sait comment exploiter des infrastructures informatiques à grande échelle, c’est le cas de Google. Kubernetes a pour origine Borg, un projet interne de Google qui’s toujours utilisé pour la plupart de Google’s applications, y compris son moteur de recherche, Gmail, Google Maps et plus encore. Borg était un secret jusqu’à ce que Google publie un article à ce sujet en 2015, mais celui-ci montrait très clairement que Borg était la principale inspiration derrière Kubernetes..
Borg est un système qui gère les ressources de calcul dans Google’s centres de données et conserve Google’s les applications, de production ou autres, s’exécutant en dépit d’une panne matérielle, de l’épuisement des ressources ou de tout autre problème susceptible de provoquer une panne. Pour cela, il surveille attentivement les milliers de nœuds qui composent un Borg. “cellule” et les conteneurs qui y circulent, ainsi que le démarrage ou l’arrêt des conteneurs en fonction des besoins ou des fluctuations de la charge.
Kubernetes est né de Google’s GIFEE (‘Google’s Infrastructure pour tous les autres’) et a été conçue pour être une version plus conviviale de Borg qui pourrait être utile en dehors de Google. Il a été donné à la Linux Foundation en 2015 par le biais de la création de la Cloud Native Computing Foundation (CNCF)..
Kubernetes fournit un système grâce auquel vous “déclarer” vos applications et services conteneurisés, et veille à ce que vos applications s’exécutent conformément à ces déclarations. Si vos programmes nécessitent des ressources externes, telles que le stockage ou des équilibreurs de charge, Kubernetes peut les provisionner automatiquement. Il peut adapter vos applications à la hausse ou à la baisse pour suivre les changements de charge, et peut même adapter l’ensemble de votre cluster en cas de besoin. Votre programme’composants s don’t même besoin de savoir où ils’re running: Kubernetes fournit des services de nommage internes aux applications pour leur permettre de se connecter à “wp_mysql” et être automatiquement connecté à la bonne ressource.’
Le résultat final est une plate-forme qui peut être utilisée pour exécuter vos applications sur n’importe quelle infrastructure, d’une machine unique à un rack de systèmes sur site, en passant par des flottes de machines virtuelles basées sur le cloud s’exécutant sur n’importe quel fournisseur de cloud majeur, en utilisant tous les mêmes conteneurs. et configuration. Kubernetes est indépendant du fournisseur: lancez-le où vous le souhaitez.
Kubernetes est un outil puissant, nécessairement complexe. Avant d’entrer dans l’aperçu, nous devons introduire quelques termes utilisés dans Kubernetes. Comme indiqué ci-dessus, les conteneurs exécutent des applications uniques et sont regroupés dans des modules. Un pod est un groupe de conteneurs étroitement liés qui sont déployés ensemble sur le même hôte et partagent certaines ressources. Les conteneurs d’un pod fonctionnent en équipe: ils’ll exécute des fonctions connexes, telles qu’un conteneur d’applications et un conteneur de journalisation avec des paramètres spécifiques pour l’application.
Une vue d’ensemble de Kubernetes montrant le maître exécutant les composants clés et deux nœuds. Notez qu’en pratique, les composants principaux peuvent être répartis sur plusieurs systèmes.
(Crédit image: Future)
Les quatre composants clés de Kubernetes sont le serveur API, le planificateur, le gestionnaire de contrôleurs et une base de données de configuration distribuée appelée etcd. Le serveur API est au cœur de Kubernetes et agit en tant que point de terminaison principal pour toutes les demandes de gestion. Celles-ci peuvent être générées par diverses sources, notamment d’autres composants Kubernetes, tels que le planificateur, les administrateurs via des tableaux de bord en ligne de commande ou sur le Web, et les applications conteneurisées elles-mêmes. Il valide les demandes et met à jour les données stockées dans etcd.
Le planificateur détermine les nœuds sur lesquels les différents modules s’exécutera, en tenant compte des contraintes telles que les besoins en ressources, les contraintes matérielles ou logicielles, la charge de travail, les délais, etc..
Le Controller Manager surveille l’état du cluster et essaiera de démarrer ou d’arrêter les pods comme il se doit, via le serveur d’API, pour amener le cluster à l’état souhaité. Il gère également certaines connexions internes et fonctionnalités de sécurité.
Chaque nœud exécute un processus Kubelet, qui communique avec le serveur d’API et gère les conteneurs – généralement à l’aide de Docker – et de Kube-Proxy, qui gère le proxy réseau et l’équilibrage de la charge au sein du cluster..
Le système de base de données distribuée etcd tire son nom du /etc dossier sur les systèmes Linux, utilisé pour contenir les informations de configuration du système, ainsi que le suffixe ‘ré’, souvent utilisé pour désigner un processus démon. Etcd vise à stocker les données de valeur-clé de manière distribuée, cohérente et tolérante aux pannes..
Le serveur d’API conserve toutes ses données d’état dans etcd et peut exécuter plusieurs instances simultanément. Le planificateur et le gestionnaire de contrôleur ne peuvent avoir qu’une seule instance active, mais utilisent un système de location pour déterminer quelle instance en cours d’exécution est le maître. Tout cela signifie que Kubernetes peut fonctionner en tant que système hautement disponible sans points de défaillance uniques..
Mettre tous ensemble
Alors, comment utilisons-nous ces composants dans la pratique? Vous trouverez ci-dessous un exemple de configuration d’un site Web WordPress utilisant Kubernetes. Si vous vouliez le faire pour de vrai, alors vous’d probablement utiliser une recette prédéfinie appelée tableau de barre. Ils sont disponibles pour un certain nombre d’applications courantes, mais ici nous’Voyons quelques-unes des étapes nécessaires pour mettre en place un site WordPress sur Kubernetes..
La première tâche consiste à définir un mot de passe pour MySQL:
kubectl crée le secret générique mysql-pass –from-literal = mot de passe = YOUR_PASSWORD
kubectl communiquera avec le serveur API, qui validera la commande puis enregistrera le mot de passe dans etcd. Nos services sont définis dans des fichiers YAML et nous avons maintenant besoin d’un stockage persistant pour la base de données MySQL..
apiVersion: v1kind: PersistentVolumeClaimmetadata: nom: mysql-pv-claimlabels: app: wordpressspec: accessModes: – ReadWriteOnceresources: requêtes: stockage: 20Gi
La spécification devrait être la plupart du temps explicite. Les champs Nom et Etiquette sont utilisés pour faire référence à ce stockage depuis d’autres parties de Kubernetes, dans ce cas notre conteneur WordPress..
Une fois nous’Après avoir défini le stockage, nous pouvons définir une instance MySQL en la pointant sur le stockage prédéfini. Cette’s suivi de la définition de la base de données elle-même. Nous donnons à cette base de données un nom et une étiquette pour faciliter la consultation dans Kubernetes..
Nous avons maintenant besoin d’un autre conteneur pour exécuter WordPress. Une partie de la spécification de déploiement du conteneur est la suivante:
kind: Deploymentmetadata: nom: wordpresslabels: application: wordpressspec: stratégie: type: recréer
Le type de stratégie “Recréer” signifie que si l’un des codes composant l’application change, les instances en cours d’exécution seront supprimées et recréées. D’autres options incluent la possibilité de faire défiler de nouvelles instances et de supprimer les instances existantes une par une, permettant ainsi au service de continuer à s’exécuter pendant le déploiement d’une mise à jour. Enfin, nous déclarons un service pour WordPress lui-même, comprenant le code PHP et Apache. Une partie du fichier YAML le déclarant est:
métadonnées: nom: wordpresslabels: app: wordpressspec: ports: – port: 80secteur: app: wordpresstier: frontendtype: LoadBalancer
Notez la dernière ligne, définissant le type de service comme LoadBalancer. Cela indique à Kubernetes de rendre le service disponible en dehors de Kubernetes. Sans cette ligne, ce ne serait qu’un problème interne “Kubernetes seulement” un service. Et cela’asseoir. Kubernetes utilisera maintenant ces fichiers YAML comme une déclaration de ce qui est requis, et configurera les pods, les connexions, le stockage, etc. selon les besoins pour que le cluster entre dans le “voulu” Etat.
Utilisez la vue du tableau de bord pour obtenir un résumé rapide de Kubernetes en action
(Crédit image: Fossé)
Il s’agit nécessairement d’une vue d’ensemble de haut niveau de Kubernetes et de nombreux détails et fonctionnalités du système ont été omis. nous’Nous avons passé sous silence la mise à l’échelle automatique (les deux pods et les noeuds constituant un cluster), les tâches cron (démarrage des conteneurs selon une planification), Ingress (équilibrage de charge HTTP, réécriture et déchargement SSL), RBAC (contrôles d’accès basés sur les rôles), réseau politiques (pare-feu), et bien plus encore. Kubernetes est extrêmement flexible et puissant: pour toute nouvelle infrastructure informatique, cela doit être un sérieux concurrent.
Ressources
Si vous’re pas familier avec Docker commencer ici: https://docs.docker.com/get-started.
Là’s un tutoriel interactif sur le déploiement et la mise à l’échelle d’une application ici: https://kubernetes.io/docs/tutorials/kubernetes-basics.
Et consultez https://kubernetes.io/docs/setup/scratch pour savoir comment créer un cluster..
Vous pouvez jouer avec un cluster gratuit Kubernetes sur https://tryk8s.com.
Enfin, vous pouvez parcourir un long document technique avec un excellent aperçu de Google.’s utilisation de Borg et comment cela a influencé la conception de Kubernetes ici: https://storage.googleapis.com/pub-tools-public-publication-data/pdf/43438.pdf.
En savoir plus sur Tiger Computing.
- Meilleur stockage en nuage de 2019 en ligne: options gratuites, payantes et commerciales