Je voulais savoir quelle est la différence entre un contrôleur de réplication et un déploiement dans Kubernetes (1.2). En parcourant le document de mise en route ( http://kubernetes.io/docs/hellonode/ ), j'ai créé un déploiement - mais celui-ci n'apparaît pas dans l'interface utilisateur Web.
Lorsque je crée des applications à partir de l'interface utilisateur Web, elles sont créées en tant que contrôleurs de réplication. Sur le plan fonctionnel, ils semblent très similaires (ils gèrent tous les deux des pods et disposent de services).
Alors, quelle est la différence et quand devrais-je utiliser chacun?
Les déploiements sont un concept de niveau plus récent et de niveau supérieur à celui des contrôleurs de réplication. Ils gèrent le déploiement des jeux de réplicas (également un concept plus récent, mais à peu près équivalent aux contrôleurs de réplication) et permettent une mise à jour aisée d'un jeu de réplicas ainsi que la possibilité de revenir à un déploiement précédent.
Auparavant, cela devrait être fait avec kubectl rolling-update
qui n'était pas déclaratif et ne fournissait pas les fonctionnalités d'annulation.
Kubernetes Dashboard n'a pas encore été mis à jour pour prendre en charge les déploiements et ne prend actuellement en charge que les contrôleurs de réplication (voir Déploiements non visibles dans Kubernetes Dashboard ).
EDIT: le tableau de bord prend désormais en charge les déploiements.
Déploiements sont toujours en version bêta (leur API est sous extensions/v1beta1
), ce qui explique probablement pourquoi ils ne s'affichent pas dans l'interface utilisateur. Ils automatisent les transitions d'état en ne gardant que les pods en vie. De la page liée:
Un déploiement fournit des mises à jour déclaratives pour les pods et les ensembles de répliques (le contrôleur de réplication de nouvelle génération). Il vous suffit de décrire l'état souhaité dans un objet Deployment, et le contrôleur de déploiement modifiera l'état actuel à l'état souhaité à une vitesse contrôlée pour vous. Vous pouvez définir des déploiements pour créer de nouvelles ressources ou remplacer celles existantes par de nouvelles.
Ils fournissent également un historique de déploiement et d'autres fonctionnalités utiles.
$ kubectl rollout history deployment/nginx-deployment
deployments "nginx-deployment":
REVISION CHANGE-CAUSE
1 kubectl create -f docs/user-guide/nginx-deployment.yaml --record
2 kubectl apply -f docs/user-guide/new-nginx-deployment.yaml
3 kubectl apply -f docs/user-guide/bad-nginx-deployment.yaml
Il garde également une trace des changements.
$ kubectl rollout history deployment/nginx-deployment --revision=2
deployments "nginx-deployment" revision 2
Labels: app=nginx,pod-template-hash=1564180365
Annotations: kubernetes.io/change-cause=kubectl apply -f docs/user-guide/new-nginx-deployment.yaml
Image(s): nginx:1.9.1
No volumes.
Maintenant avec version 1.1 Le tableau de bord prend en charge les déploiements. Vous pouvez déployer ou mettre à jour votre tableau de bord sans attendre la version 1.3 de k8s. Vous pouvez par exemple utiliser le officiel YAML , que nous venons de changer pour utiliser Deployments aujourd'hui.
En règle générale, je le recommanderais (et les collaborateurs de Google et des contributeurs de Kubernetes le font également) en utilisant les déploiements sur des contrôleurs de réseau car ils constituent une primitive beaucoup plus puissante (mises à jour roulantes, contrôle de version/audit, déploiements canaray/vert-bleu, restaurations, etc.) .
Le tableau de bord (interface utilisateur Web) a été considérablement repensé pour prendre en charge la gestion de davantage de ressources (comme Deployments
et DaemonSets
, etc.) et le tableau de bord actuel ne permet pas grand chose à propos de Deployments
. .
La gestion des déploiements dans le tableau de bord sera bientôt prise en charge dans kubernetes 1.3 (reportez-vous à la question Demande de fonctionnalité: gérer les déploiements ).
D'après mon expérience, les déploiements ne fournissent pas toutes les fonctionnalités dont j'ai besoin. Ou peut-être que je ne les utilise pas correctement.
Lorsqu'il est nécessaire de redémarrer le serveur de noeud (tous les pods exécutés sur ce serveur démarrés par déploiement) échouent. Et je ne peux pas trouver un moyen d'éviter cela.
Mais,
Pensez que la solution est un contrôleur de réplication. Au moins dans la description, il est écrit qu’il gère de tels cas.
À mon avis, le principal avantage du déploiement réside dans le fait que vous devez constamment changer de version de votre application.
Les deux méthodes sont donc bonnes, mais pour des raisons différentes.