Que fait réellement Kubernetes? [fermé]

134

Kubernetes est facturé comme un cluster de conteneurs "planificateur / orchestrateur", mais je n'ai aucune idée de ce que cela signifie. Après avoir lu le site Kubernetes et le (vague) wiki GitHub, le mieux que je puisse dire est que cela détermine en quelque sorte quelles machines virtuelles sont disponibles / capables d'exécuter votre conteneur Docker, puis les déploie là-bas. Mais ce n'est que ma supposition, et je n'ai vu aucun verbiage concret dans leur documentation à l'appui.

Alors, qu'est-ce que Kubernetes, exactement , et quels sont les problèmes spécifiques qu'il résout?

smeeb
la source
Étant donné que tous les projets du monde des dockers (kubernetes / flotte / swarm / etc) ont du mal à expliquer ce qu'ils font et ce qui les distingue, je pense qu'une question un peu insipide est tout ce que nous, les utilisateurs, pouvons fournir ... demande "quelle est la différence entre flotte et kubernetes" et la réponse est "vous pouvez utiliser flotte pour lancer kubernetes". Bummer. ;-)
Torsten Bronger
3
Je pense que c'est une question parfaitement valable et souligne quelques lacunes dans le doco. Le fermer comme étant trop large est un mauvais service. La meilleure approche pour moi consistait simplement à télécharger la base de code k8s et à y chercher, par exemple, ce qu'était un pod. Cela m'a beaucoup aidé.
Beezer le

Réponses:

113

Le but de Kubernetes est de faciliter l'organisation et la planification de votre application sur un parc de machines. À un niveau élevé, il s'agit d'un système d'exploitation pour votre cluster.

Fondamentalement, cela vous permet de ne pas vous soucier de la machine spécifique de votre centre de données sur laquelle s'exécute chaque application. En outre, il fournit des primitives génériques pour la vérification de l'état et la réplication de votre application sur ces machines, ainsi que des services pour câbler votre application en micro-services afin que chaque couche de votre application soit découplée des autres couches afin que vous puissiez les mettre à l'échelle / les mettre à jour / les maintenir. indépendamment.

Bien qu'il soit possible de faire beaucoup de ces choses dans la couche application, ces solutions ont tendance à être ponctuelles et fragiles, il est préférable de séparer les préoccupations, où un système d'orchestration s'inquiète de la manière d'exécuter votre application et vous vous inquiétez de le code qui compose votre application.

Brendan
la source
3
Merci @brendan (+1) - votre réponse est vraiment utile. Une question de suivi cependant: n'est-ce pas ce que fait Apache Mesos? Kubernetes et Mesos sont-ils concurrents l'un de l'autre? Sinon, pourraient-ils être utilisés de concert les uns avec les autres (et si oui, comment)? Merci encore!
smeeb
2
@smeeb Mesos et Kubernetes se complètent (ce dernier est pris en charge en tant que framework Mesos). Mesos offre une gestion des ressources plus sophistiquée. En d'autres termes, Kubernetes laisse Mesos décider quel hôte est utilisé, en fonction de la capacité disponible. Mesos prend en charge d'autres frameworks. Si vous lisez la documentation, vous verrez que Marathon est un autre moyen de lancer des conteneurs sur un cluster de serveurs gérés Mesos.
Mark O'Connor
18

Comme vous le lisez sur sa page Github :

Kubernetes est un système open source pour la gestion des applications conteneurisées sur plusieurs hôtes, fournissant des mécanismes de base pour le déploiement, la maintenance et la mise à l'échelle des applications.

Kubernetes c'est:

lean: lightweight, simple, accessible
portable: public, private, hybrid, multi cloud
extensible: modular, pluggable, hookable, composable
self-healing: auto-placement, auto-restart, auto-replication

Kubernetes s'appuie sur une décennie et demie d'expérience chez Google dans la gestion de charges de travail de production à grande échelle, combinées aux meilleures idées et pratiques de la communauté.

Pour moi, Kubernetes est un outil d'orchestration de conteneurs de Google. En raison de sa conception, vous pouvez implémenter la compatibilité avec n'importe quel moteur de conteneur, mais je pense que maintenant c'est limité à Docker. Il y a quelques concepts importants dans son architecture:

Kubernetes fonctionne avec les concepts suivants:

Les clusters sont les ressources de calcul sur lesquelles vos conteneurs sont créés. Kubernetes peut fonctionner n'importe où! Consultez les Guides de mise en route pour obtenir des instructions sur une variété de services.

Les pods sont un groupe colocalisé de conteneurs Docker avec des volumes partagés. Ce sont les plus petites unités déployables pouvant être créées, planifiées et gérées avec Kubernetes. Les pods peuvent être créés individuellement, mais il est recommandé d'utiliser un contrôleur de réplication même si vous créez un seul pod. En savoir plus sur les pods.

Les contrôleurs de réplication gèrent le cycle de vie des pods. Ils garantissent qu'un nombre spécifié de pods s'exécutent à un moment donné, en créant ou en supprimant des pods selon les besoins. En savoir plus sur les contrôleurs de réplication.

Les services fournissent un nom et une adresse uniques et stables pour un ensemble de pods. Ils agissent comme des équilibreurs de charge de base. En savoir plus sur les services.

Les étiquettes sont utilisées pour organiser et sélectionner des groupes d'objets en fonction de paires clé / valeur. En savoir plus sur les étiquettes.

Ainsi, vous avez un groupe de machines qui forme un cluster où vos conteneurs sont exécutés. Vous pouvez également définir un groupe de conteneurs qui fournissent un service, de la même manière que vous le faites avec d'autres outils comme fig (par exemple: le pod webapp peut être un serveur rails et une base de données postgres). Vous disposez également d'autres outils pour assurer un certain nombre de conteneurs / pods d'un service s'exécutant en même temps, un magasin clé-valeur, une sorte d'équilibreur de charge intégré ...

Si vous savez quelque chose sur coreos, c'est une solution très similaire mais de Google. Algo Kubernetes a une bonne intégration avec Google Cloud Engine.

Javier Cortejoso
la source
2
Merci @jcortejoso (+1) - cependant, j'ai quelques questions de suivi si cela ne vous dérange pas: (1) vous dites que Kubernetes est similaire à CoreOS, mais de Google. Cela implique que Kubernetes et CoreOS résolvent le même problème. Mais à partir du [site Web de Kubernetes] (), il est dit que vous pouvez installer Kubernetes sur CoreOS. Alors, quel est-il?!? Kubernetes est-il identique à CoreOS, ou Kubernetes s'exécute-t-il sur CoreOS et résout un problème spécifique?
smeeb
1
Aussi (2) Je ne vois toujours pas la valeur de "l'orchestration" de Kubernetes ici. Vous dites que vous pouvez utiliser Kubernetes pour définir un groupe de conteneurs qui fournissent un service, ce qui me fait me demander deux choses distinctes: (2a) ne pourrais-je pas simplement faire ce type de clustering au niveau de la couche d'application, et placer mon application derrière un équilibreur de charge nginx? Et (2b) est-ce tout ce qu'il y a à "orchestration"? Pour moi, encore une fois, cela ressemble à un équilibrage de charge qui pourrait être facilement réalisé au niveau de l'application. Pensées? Merci encore pour la merveilleuse réponse!
smeeb
1
Si kubernetes est "léger", je me demande quelle serait la solution grasse.
Torsten Bronger
@smeeb Je ne suis pas familier avec nginx (alors pardonnez ma naïveté), mais je ne pense pas que nginx redémarrera un serveur qui s'est écrasé; et si une machine (ou un centre de données entier) tombe en panne, nginx ne redémarrera pas votre application sur une autre machine. kubernetes s'assurera que vous gardez toujours n nombre de "pods" en cours d'exécution quelque part, et peu importe où et comment.
kgreenek
10

Kubernetes fournit une grande partie des mêmes fonctionnalités que les API Infrastructure as a Service, mais vise les conteneurs planifiés dynamiquement plutôt que les machines virtuelles, et en tant que systèmes Platform as a Service, mais avec une plus grande flexibilité, notamment:

  • montage de systèmes de stockage,
  • distribuer des secrets,
  • vérification de l'état des applications,
  • réplication des instances d'application,
  • mise à l'échelle automatique horizontale,
  • dénomination et découverte,
  • l'équilibrage de charge,
  • mises à jour progressives,
  • surveillance des ressources,
  • accès aux journaux et ingestion,
  • prise en charge de l'introspection et du débogage, et
  • identité et autorisation.

Si vous utilisez déjà d'autres mécanismes pour la découverte de services, la distribution secrète, l'équilibrage de charge, la surveillance, etc., vous pouvez bien sûr continuer à les utiliser, mais nous visons à faciliter la transition vers Kubernetes à partir des systèmes IaaS et PaaS existants en fournissant cela Fonctionnalité.

https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#why-do-i-need-kubernetes-and-what-can-it-do

briangrant
la source