Kubernetes

Tutoriel Kubernetes ReplicaSet

Tutoriel Kubernetes ReplicaSet
Kubernetes est souvent considéré comme cet énorme ensemble de concepts interdépendants tels que les nœuds et les pods, les services, les déploiements, etc., qui sont souvent difficiles à démêler. Dans cet article, découvrons lentement une abstraction clé qui est ReplicaSet. Nous commencerons par créer un petit .yaml pour un pod Kubernetes, qui aurait une étiquette, puis créerait un ReplicaSet qui garantirait qu'un certain nombre de pods avec la même étiquette s'exécutent toujours dans le cluster . C'est ce que les auteurs du projet ont réellement voulu lorsqu'ils ont conçu Kubernetes. Alors commençons.

Conditions préalables

La première chose dont vous aurez besoin sera l'accès à un cluster Kubernetes. Vous pouvez en créer un à l'aide de Minikube ou utiliser Docker pour Windows ou Docker pour Mac, qui sont désormais tous deux fournis avec une distribution Kubernetes à nœud unique que vous pouvez activer dans les paramètres de Docker.

Vous auriez également besoin d'avoir des connaissances a priori sur Kubernetes. Voici un très bon point de départ.

Création de pods

En règle générale, nous créons des pods à l'aide d'un fichier yaml qui spécifie quelle image de conteneur utiliser, quels ports exposer, etc. Voici un fichier simple pour créer un pod nginx.

apiVersion : v1
genre: Pod
métadonnées :
nom :  nginx-1
étiqueter:
application : serveur Web
spécification :
conteneurs :
- nom : nginx
image : nginx:1.7.9
ports :
- conteneurPort: 80

Enregistrez-le sous le nom nginx-pod.yaml dans un répertoire, puis depuis le même répertoire, exécutez la commande :

$ kubectl créer -f ./nginx-pod.yaml
## Vérifiez que le pod est créé en exécutant :
$ kubectl obtenir des pods

Vous remarquerez qu'un seul pod nommé "nginx-1" est opérationnel. Mais vous ne pouvez pas mettre à l'échelle ce seul pod. En cours kubectl créer vous donnera à nouveau une erreur puisque le nom nginx-1 ne peut plus être réutilisé.

Kubernetes a donné la possibilité de créer des pods à des abstractions plus élevées comme Déploiements et ReplicaSets. Qui créent des pods à partir d'un modèle de pod donné en spécifiant les images à utiliser, les ports à exposer dans chacun des nouveaux pods, etc., mais rien de trop spécifique à propos d'un seul pod. ReplicaSet (ainsi que les déploiements) créent ensuite de nouveaux pods, en donnant à chaque nouveau pod un nom unique ainsi qu'une étiquette non unique qui aide le ReplicaSet à garder une trace des pods créés à partir d'un modèle donné.

ReplicaSet garantit qu'à un instant donné, un certain nombre de pods d'une étiquette donnée sont toujours opérationnels. Si, par exemple, un nœud tombe en panne, c'est le travail de ReplicaSet de créer plus de pods sur d'autres nœuds pour compenser la perte. Pour écrire un fichier yaml de réplicas, nous suivrions le modèle similaire à l'écriture d'un pod. Il aura une version api (applications/v1), un type (ReplicaSet) et un nom dans les métadonnées. Le jeu de réplicas lui-même peut avoir des étiquettes dessus, mais nous allons garder les choses simples pour le moment et lui donner juste un nom unique mon-réplicase.

Nous devons alors passer de métadonnées section à la chair de la matière spécification. Ici, nous fournissons le nombre de réplications que nous voulons dans la section les répliques. Ensuite, nous donnons à ce ReplicaSet un sélecteur qui serait utilisé pour correspondre à une étiquette, disons, application à une valeur, disons, serveur Web, parmi les pods en cours d'exécution. S'il y a moins de ces pods, il créera des pods en fonction du modèle donné et ajoutera la même étiquette à ces nouveaux pods. S'il y a plus de pods que nécessaire, il en supprime quelques-uns.

La spécification d'un modèle qui servirait de base à la création de nouveaux pods est l'étape la plus complexe. Ce modèle n'aura pas de nom, car le jeu de réplicas créera un nouveau nom pour chaque nouveau pod créé. Le aura des étiquettes, cependant, et vous pouvez remarquer que la même étiquette app=serveur web dont le modèle a est sélectionné via le sélecteur paramètre dans la spécification du jeu de réplicas.

apiVersion : apps/v1
genre : ReplicaSet
métadonnées :
nom : mon-réplicase
 
spécification :
répliques : 3
sélecteur:
matchÉtiquettes :
application : serveur Web
modèle:
métadonnées :
Étiquettes:
application : serveur Web
spécification :
conteneurs :
- nom : nginx
image : nginx:1.7.9
ports :
- conteneurPort: 80

Enregistrez ce fichier sous nginx-replicaset.yaml et créez le jeu de réplicas à l'aide de la commande :

$ kubectl create -f nginx-replicaset.yaml

Parce que nous avons précédemment créé un pod avec le même libellé app=serveur web, le jeu de réplicas créerait simplement deux autres pods. Vous pouvez lister tous les pods à l'aide de la commande :

$ kubectl obtenir des pods
NOM                  PRÊT     STATUT    REDÉMARRE   ÂGE
my-replicaset-nmvt9   1/1       En cours d'exécution   0          9s
my-replicaset-xf9mx   1/1       En cours d'exécution   0          9s
nginx-1               1/1       En cours d'exécution   0          28s

Chacun des pods aura un nom unique qui lui sera associé. Comme le tout premier pod que nous avons créé avait un nom nginx-1. Vous pouvez essayer de supprimer celui-ci en utilisant la commande :

$ kubectl supprimer le pod nginx-1
$ kubectl obtenir des pods
 
NOM                  PRÊT     STATUT    REDÉMARRAGE   ÂGE
my-replicaset-nmvt9   1/1       En cours d'exécution   0          1 minute
my-replicaset-pkn4q   1/1       En cours d'exécution   0          22s
my-replicaset-xf9mx   1/1       En cours d'exécution   0          1 m

Vous remarquerez que presque instantanément le contrôleur ReplicaSet a créé un nouveau pod pour remplacer celui que nous avons supprimé. Ainsi, garantissant que le nombre de pods en cours d'exécution, avec l'étiquette app=serveur web est toujours 3, comme spécifié dans notre manifeste de jeu de réplicas, ci-dessus.

Vous obtenez beaucoup de contrôle grâce aux étiquettes et aux sélecteurs. Vous pouvez encore répartir les pods sur plusieurs nœuds à l'aide de nodeSelectors, qui sont utilisés pour allouer un certain nombre de pods sur certains nœuds.

Ce que les réplicas n'autorisent pas, ce sont les mises à jour. Si une version plus récente de votre application, disons, nginx:1.8 arrive, vous devrez supprimer ce jeu de réplicas et en créer un nouveau avec cette image mentionnée dans le manifeste yaml du jeu de réplicas. C'est là que le concept de déploiement prend tout son sens. Il inclut l'idée de réplicas et s'étend en fournissant un support supplémentaire pour la mise à jour de vos applications. Maintenant que vous êtes à l'aise avec les réplicas, il peut être judicieux d'examiner les déploiements Kubernetes.

Les références

  1. Création de pods
  2. Création de jeux de réplicas
Vulkan pour les utilisateurs Linux
Avec chaque nouvelle génération de cartes graphiques, nous voyons les développeurs de jeux repousser les limites de la fidélité graphique et se rappro...
OpenTTD contre Simutrans
Créer votre propre simulation de transport peut être amusant, relaxant et extrêmement attrayant. C'est pourquoi vous devez vous assurer que vous essay...
Tutoriel OpenTTD
OpenTTD est l'un des jeux de simulation d'entreprise les plus populaires. Dans ce jeu, vous devez créer une merveilleuse entreprise de transport. Cepe...