Dans cet article, vous découvrirez ce qu’est un Replication Controller et un ReplicaSet ainsi que leur utilité sur Kubernetes. Vous saurez également comment créer et supprimer ces éléments.
Pourquoi avons nous besoin d’un Replication Controller ou d’un ReplicaSet ?
Le Replication Controller ou le ReplicaSet servent à trouver l’équilibre entre le chargement et la haute disponibilité. Lorsqu’une application est déployée à l’aide d’un seul Pod, au sein d’un cluster Kubernetes, l’utilisateur perd l’accès à l’application si elle tombe en panne. Cette perte d’accès est due à la mort du Pod au moment de la panne.
La mort des Pods a un effet néfaste sur l’expérience utilisateur, les usagers ne manipulant plus les programmes qui échouent fréquemment. C’est là que le Replication Controller et le ReplicaSet sont utiles, ils servent à surveiller l’état du Pod. Ces deux éléments créent un nouveau Pod identique à celui ayant disparu. Ainsi, l’utilisateur pourra toujours accéder à l’application.
Qu’est-ce qu’un Replication Controller et un Replicaset ?
Le Replication Controller ou « contrôleur de réplication » souvent abrégé « rc », est une boucle d’arbitrage qui surveille l’état d’un cluster. Il gère spécifiquement la réplication et la mise à l’échelle d’un Pod. Il peut aussi créer des Pods de remplacement si le noeud sous-jacent est défectueux.
Le ReplicaSet est un objet ayant pour but de garantir la stabilité d’un ensemble de Pods. Il est utilisé pour maintenir la disponibilité d’un certain nombre de Pods identiques.
Comment le Replication Controller fonctionne ?
Le Replication Controller augmente le nombre de Pods quand il n’y en a pas assez ou il en supprime quand ils sont trop nombreux. Un ReplicationController ressemble à un superviseur de processus, mais au lieu de superviser des processus individuels sur un nœud unique, le ReplicationController supervise plusieurs Pods sur plusieurs nœuds.
Comment le ReplicaSet fonctionne ?
Le ReplicaSet est paramétrable grâce à des champs. Ces champs indiquent le nombre de Pods à maintenir et les données des Pods qui seront créées. Le ReplicaSet créera alors de nouveaux Pods avec les données indiquées lorsque le nombre de Pods est inférieur et il en supprimera quand le nombre de Pods est trop élevé.
La différence entre le ReplicaSet et le Replication Controller
Le ReplicaSet et le Replication Controller veillent tous les deux à ce que le bon nombre de Pods soit déclenché. La différence réside dans l’utilisation de sélecteurs pour répliquer les Pods. Le ReplicationController utilise des sélecteurs basés sur l’équité tandis que le Replica Set utilise également des sélecteurs basés sur l’ensemble.
La différence entre le déploiement et le ReplicaSet/Replication Controller
Le déploiement est un concept plus récent et de plus haut niveau que les contrôleurs de réplication. Ils gèrent le déploiement des Replica Set, et permettent de mettre facilement à jour un Replica Set ainsi que de nombreuses autres fonctionnalités utiles comme revenir à un déploiement précédent.
Comment créer un ReplicaSet sur Kubernetes ?
Créer le fichier YAML
Le fichier YAML est crée avec la commande :
nano rs.yaml
Il faut ensuite définir la version de l’API et la méthode de déploiement (ReplicaSet) :
apiVersion: apps/v1
kind: ReplicaSet
On crée les metadonnées :
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
La partie suivante définit les spécifications du ReplicaSet. Dans notre exemple, nous déployons 3 replicas et nous utilisons matchLabels pour indiquer à Kubernetes à quels Pods le déploiement s’appliquera. Nous allons également nommer les conteneurs et définir l’image à utiliser pour le Pod :
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: hello
image: gcr.io/google-samples/hello-app:1.0
Voici le fichier YAML entier :
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: hello
image: gcr.io/google-samples/hello-app:1.0
Déployer le ReplicaSet
Pour le déploiement, il suffit de lancer cette commande :
kubectl apply -f rs.yaml
Ou celle-ci :
kubectl create -f rs.yaml
Vous pouvez vérifier si le Replica Set a été créé grâce à cette commande :
kubectl get ReplicaSet
Comment créer un Replication Controller sur Kubernetes ?
Les Replication Controllers sont créés grâce à cette commande :
$ kubectl create -f FILE
Les éléments du fichier de configuration sont les mêmes que pour le ReplicaSet, ils peuvent être écrits au format YAML ou JSON. Voici le code entier du Replication Controller :
{
"kind": "ReplicationController",
"apiVersion": "v1",
"metadata": {
"name": "frontend",
"labels": "",
},
"spec": {
"replicas": 3,
"selector": {
"app": "frontend"
},
"template": {
"metadata": {
"labels": {
"app": "frontend"
}
},
"spec": {
"containers": [
{
"name": "hello",
"image": "gcr.io/google-samples/hello-app:1.0",
"ports": [
{
"containerPort": 80,
"protocol": "TCP"
}
],
"imagePullPolicy": "IfNotPresent"
}
],
}
}
}
Pour en savoir plus sur la création du ReplicationController ou du ReplicaSet, nous vous invitons à consulter la documentation officielle de Kubernetes.
Comment supprimer un Replication Controller sur Kubernetes ?
Par défaut, kubectl delete rc redimensionnera le contrôleur à zéro, supprimant alors tous les Pods :
$ kubectl delete rc NOM
Si vous voulez supprimer un contrôleur de réplication sans supprimer ses Pods, spécifiez –cascade=false :
$ kubectl delete rc NOM --cascade=false
Comment supprimer un ReplicaSet sur Kubernetes ?
Le ReplicaSet se supprime grâce à cette commande :
kubectl delete rs NOM
Si vous voulez supprimer un ReplicaSet sans supprimer ses Pods, spécifiez –cascade=false :
kubectl delete rs NOM --cascade=false
ReplicaSet VS Replication Controller
Le ReplicaSet étant une technologie plus récente, nous vous conseillons de l’utiliser au détriment du Replication Controller. Les Replica Sets vous aideront à scaler vos applications simplement en créant une nouvelle instance de Pod si le Pod en cours d’exécution échoue.
Si vous voulez vous former pour en savoir plus sur d’autres composants de Kubernetes. Vous pouvez lire nos articles détaillés sur « comment se former sur Kubernetes ? » et « comment se former sur Kubernetes gratuitement ? » .