Kubernetes contre CloudFoundry [fermé]

109

La prochaine version de CloudFoundry / Diego offrira une prise en charge native des conteneurs Docker qui seront orchestrés sur des hôtes multibrins [ lien ]. Cela ressemble beaucoup à Kubernetes.

Bien sûr, le problème que Kubernetes tente de résoudre est davantage un problème générique, où CloudFoundry est plus axé sur le développement d'applications. Cependant, pour moi, il semble que les deux se dirigent dans une direction similaire et CloudFoundry ajoute beaucoup plus de fonctionnalités en plus de l'orchestration simple.

Je m'interroge donc sur les cas d'utilisation où Kubernetes ajouterait plus de valeur que CloudFoundry?

Jonny
la source

Réponses:

198

En tant que commissaire CloudFoundry (passé) et Kubernetes (présent), je suis probablement particulièrement qualifié pour répondre à celui-ci.

Comme PaaS

J'aime appeler CloudFoundry un "Application PaaS" et Kubernetes un "Container PaaS", mais la distinction est assez subtile et fluide, étant donné que les deux projets changent avec le temps pour rivaliser sur les mêmes marchés.

La distinction entre les deux est que CF a une couche intermédiaire qui prend une application utilisateur (à 12 facteurs) (par exemple jar ou gem) et un buildpack de style Heroku (par exemple Java + Tomcat ou Ruby) et produit une gouttelette (analogue à un Image Docker). CF n'expose pas l'interface de conteneurisation à l'utilisateur, contrairement à Kubernetes.

Public

Le public principal de CloudFoundry est constitué des développeurs d'applications d'entreprise qui souhaitent déployer des applications sans état à 12 facteurs à l'aide de buildpacks de style Heroku.

L'audience de Kubernetes est un peu plus large, comprenant à la fois les développeurs d'applications sans état et de services avec état qui fournissent leurs propres conteneurs.

Cette distinction pourrait changer à l'avenir:

Comparaison des fonctionnalités

Au fur et à mesure que les deux projets mûrissent et se font concurrence, leurs similitudes et leurs différences changeront. Prenez donc la comparaison des fonctionnalités suivante avec un grain de sel.

Les CF et K8 partagent de nombreuses fonctionnalités similaires, telles que la conteneurisation, l'espacement de noms, l'authentification,

Avantages concurrentiels de Kubernetes:

  • Regroupez et mettez à l'échelle des pods de conteneurs qui partagent une pile réseau, plutôt que de simplement évoluer indépendamment
  • Apportez votre propre contenant
  • Couche de persistance avec état
  • Communauté OSS plus grande et plus active
  • Une architecture plus extensible avec des composants remplaçables et des plugins tiers
  • Interface graphique Web gratuite

Avantages concurrentiels de CloudFoundry:

  • Authentification mature, regroupement d'utilisateurs et prise en charge de l'hébergement multiclient [x]
  • Apportez votre propre application
  • Équilibreur de charge inclus
  • Déployé, mis à l'échelle et maintenu en vie par BOSH [x]
  • Journalisation et agrégation de métriques robustes [x]
  • Interface graphique Web d'entreprise [x]

[x] Ces fonctionnalités ne font pas partie de Diego ou ne sont pas incluses dans Lattice.

Déploiement

L'un des avantages concurrentiels de CloudFoundry est qu'il dispose d'un moteur de déploiement mature, BOSH, qui permet des fonctionnalités telles que la mise à l'échelle, la résurrection et la surveillance des composants CF de base. BOSH prend également en charge de nombreuses couches IaaS avec une abstraction de fournisseur de cloud enfichable. Malheureusement, la courbe d'apprentissage de BOSH et la gestion de la configuration de déploiement sont cauchemardesques. (En tant que committer BOSH, je pense que je peux le dire avec précision.)

L'abstraction de déploiement de Kubernetes en est encore à ses balbutiements. Plusieurs environnements cibles sont disponibles dans le référentiel principal, mais ils ne fonctionnent pas tous, bien testés ou pris en charge par les développeurs principaux. C'est surtout une question de maturité. On pourrait s'attendre à ce que cela s'améliore avec le temps et augmente l'abstraction. Par exemple, Kubernetes sur DCOS permet de déployer Kubernetes sur un cluster DCOS existant avec une seule commande.

Contexte historique

Diego est une réécriture de l'agent d'exécution Droplet de CF. Il a été développé à l'origine avant l'annonce de Kubernetes et a pris de plus en plus de fonctionnalités à mesure que le paysage concurrentiel évoluait. Son objectif initial était de générer des gouttelettes (application utilisateur + buildpack CF) et de les exécuter dans des conteneurs Warden (renommé Garden lors de la réécriture dans Go). Depuis sa création, il a également été reconditionné en Lattice , qui est en quelque sorte un CloudFoundry-lite (bien que ce nom ait été pris par un projet existant). Pour cette raison, Lattice ressemble quelque peu à un jouet, en ce sens qu'il a délibérément réduit l'audience et la portée des utilisateurs, manquant explicitement des fonctionnalités qui le rendraient «prêt pour l'entreprise». Fonctionnalités que CF fournit déjà. Cela est en partie dû au fait que Lattice est utilisé pour tester les composants de base, sans une partie des frais généraux du CF plus complexe, mais vous pouvez également utiliser Lattice dans des environnements internes de haute confiance où la sécurité et la multi-location ne sont pas autant un problème .

Il convient également de mentionner que CloudFoundry et Warden (son moteur de conteneur) sont également antérieurs à Docker, de quelques années.

Kubernetes, d'autre part, est un projet relativement nouveau développé par Google sur la base d'années d'utilisation de conteneurs avec BORG et Omega. Kubernetes pourrait être considéré comme une orchestration de conteneurs de 3ème génération chez Google, de la même manière que Diego est l'orchestration de conteneurs de 3ème génération chez Pivotal / VMware (v1 écrite chez VMware; v2 chez VMware avec l'aide de Pivotal Labs; v3 chez Pivotal après avoir repris le projet) .

KarlKFI
la source
Salut! Pouvez-vous en dire plus sur «l'inclusion de votre propre équilibreur de charge» et «une journalisation et une agrégation de métriques robustes»? Kubernetes fournit les deux.
aronchick
1
Kubernetes n'inclut pas encore d'implémentation d'équilibreur de charge, bien que le travail dans cette direction progresse. Il fournit un moyen de demander à votre fournisseur de cloud de fournir un équilibreur de charge, mais seuls quelques fournisseurs de cloud vous en donnent un (GCE et AWS, je pense). CF vous offre un équilibreur de charge par défaut, automatiquement.
KarlKFI
2
À partir de Kubernetes 1.1, Kubernetes prend désormais en charge la mise à l'échelle automatique et l'équilibrage de la charge de base des chemins HTTP ( blog.kubernetes.io/2015/11 / ... )
Brendan Burns
2
J'ai l'impression qu'il y a beaucoup d'avantages subtils associés à votre puce "Enterprise Web GUI". Par exemple, l'interface graphique a une place de marché où vous pouvez dire, "Je veux une base de données" ou "Je veux une file d'attente persistante" en un clic. Il répond par "ok, voici votre chaîne de connexion". Mon impression d'utiliser k8s est que vous êtes seul pour ces choses: Trouvez un conteneur Docker quelque part et écrivez vous-même un script de déploiement afin que votre environnement puisse l'utiliser. CF fournit également une CLI pour tout cela.
Daniel Kaplan
1
Il y a certainement plus à dire sur les offres d'entreprise de kubernetes et de fonderie de cloud. Malheureusement, il est vraiment difficile de déterminer les fonctionnalités de PCF à partir de leur site Web et de leurs documents. Ma comparaison portait principalement sur les offres open source. Kubernetes a également des fournisseurs de ciblage d'entreprise, 4 ou 5 différents au dernier décompte. Ils ont chacun leurs propres fonctionnalités et gestionnaires de paquets et plugins de sécurité, etc.
KarlKFI
11

Cloud Foundry est un excellent outil en supposant que vous êtes prêt à toujours travailler dans les limites de l'offre car il est très avisé / prescrit. L'interface utilisateur Web est agréable à regarder le premier jour, mais elle est rarement utilisée une fois que vous avez commencé à travailler avec le client et que vous avez configuré votre pipeline CI / CD. J'ai trouvé que Cloud Foundry est excellent jusqu'à ce que des cas d'utilisation apparaissent qui ne sont pas facilement entièrement pris en charge dans Cloud Foundry. La livraison de ces cas d'utilisation peut retarder les projets lorsque vous essayez de résoudre ces problèmes, par conséquent, vous perdez la visibilité de l'infrastructure et les avantages de prise en charge de ces composants qui s'exécutent alors principalement en dehors de Cloud Foundry (pensez à plusieurs bases de données, kafka, hadoop, cassandra , etc.) Je soupçonne qu'avec le temps, la dynamique entourant Docker et la rigidité de Cloud Foundry conduiront les utilisateurs vers Kubernetes, Mesos ou Docker Swarm / Datacenter. Il est possible que Cloud Foundry puisse rattraper ces trois mais cela semble peu probable en raison de la popularité de ces projets open source.

Jim Kruk
la source
3
Je suis un débutant Cloud Foundry. Pouvez-vous donner des exemples de cas d'utilisation qui nécessitent des fonctionnalités qui ne sont pas facilement prises en charge dans Cloud Foundry?
Somu
9

Il est difficile de savoir pourquoi une entreprise créerait un produit sensiblement similaire à un autre produit. Il y a beaucoup de raisons. Peut-être qu'ils ont déjà commencé à l'utiliser et y sont investis. Peut-être qu'ils (CF) pensent que Kubernetes est mal fait ou se trompe sur l'API / le modèle / les détails. Peut-être pensent-ils qu'ils peuvent agir plus rapidement s'ils contrôlent l'ensemble du produit plutôt que de contribuer.

Certes, je dis cela en tant que développeur Kubernetes - on pourrait se poser les mêmes questions que Kubernetes vs Mesos, Amazon ECS vs Kubernetes ou Docker Swarm vs Kubernetes.

J'espère qu'avec le temps, nous évoluons tous dans la même direction et pouvons collaborer davantage et passer moins de temps à réinventer le travail de chacun.

Quant à Kubernetes, l'accent est mis sur les développeurs d'applications: des primitives simples et puissantes qui vous permettent de créer et de déployer des applications à grande échelle très rapidement. Nous nous appuyons sur notre expérience (enfin, celle de Google) avec des technologies similaires pour tracer notre voie. D'autres personnes auront des expériences ou des opinions différentes.

Tim Hockin
la source
10
On pourrait cependant dire la même chose de Kubernetes; CF v1 a été lancé en 2011, v2 a été construit et lancé avec des conteneurs à la mi-2013 au moment où Docker a été ouvert pour la première fois, et Diego (réécriture du moteur de conteneur dans Go) a commencé à commettre au début de 2014, environ 6 mois avant Kube. même annoncé. Peut-être que les gens pensaient que CF avait mal les choses, etc., mais beaucoup de projets semblent certainement le recréer. Nous le voyons aussi avec Swarm vs K8S, ou Nomad, ou Marathon, etc. Cela dit, avec l'open source, il y a à la fois coopération et concurrence, j'espère que cela convergera là où cela a du sens
Stuart Charlton
3

Une différence significative, à mon avis, est l'approche qu'ils adoptent:

CF construit automatiquement le runtime à partir de 3 composants: le binaire d'application fourni par l'utilisateur, le buildpack contenant le middleware nécessaire pour exécuter l'application et une image du système d'exploitation (une cellule souches). L'utilisateur CF (un développeur) doit fournir uniquement le binaire de l'application (par exemple, un fichier jar exécutable). Le CF s'occupe du reste, c'est-à-dire de l'empaquetage et de l'exécution de l'application.

Kubernetes attend d'un développeur des images Docker contenant un middleware et un système d'exploitation déjà intégrés et prêts à être exécutés. Pour cela, le «manifeste de déploiement» de Kubernetes (par exemple un graphique Helm) décrit non seulement une application ou un service unique, mais tous les [micro] services qui composent votre solution au moment de l'exécution. Vous soumettez une seule description déclarative de votre environnement d'exécution et Kubernetes veille à ce que l'état d'exécution réel corresponde à votre description fournie.

L'approche CF lui permet donc de traiter des cas d'utilisation tels que «remplacer un système d'exploitation par une faille de sécurité corrigée dans l'ensemble de votre cloud sans temps d'arrêt pour vos services». Mais il se concentre également sur le déploiement de service par service au lieu de la description déclarative d'un environnement d'exécution «idéal» cible de votre système.

Sergey Shcherbakov
la source
2

Cloud Foundry est un système de cloud computing open-source en tant que service. Cloud Foundry permet aux projets d'être déployés dans différents espaces et lie également tout service cloud à votre application.

Kubernete ressemble plus à un outil d'ornementation pour les conteneurs (pods) qui automatise le déploiement, la mise à l'échelle et la gestion des applications conteneurisées. Il utilise le terme pods pour définir un conteneur ou un groupe de conteneurs.

Tout déploiement de Kubernetes nécessite au moins deux ressources:

1) deployment.yaml: Cette ressource définit la version de l'image qu'elle doit récupérer dans votre registre de conteneurs, les réplicas (répliques de pod), la stratégie de déploiement, la mise à l'échelle et les sondes, etc.

2) service.yaml: c'est une interface entre vos pods internes et le monde extérieur, tout le trafic extérieur écoutera le port défini dans cette ressource d'où il distribuera la charge aux pods internes.

Une plus grande ressource est l'entrée fournie par Kubernetes qui gère l'accès externe aux services dans un cluster, généralement http. Grâce à Ingress, vous pouvez fournir un équilibrage de charge, une terminaison SSL et un hébergement virtuel basé sur le nom.

Vous trouverez plus d'informations sur kubernetes ci-dessous: https://kubernetes.io/docs/

Manvendra Jina
la source
1

[pcf vs kubernetes] [1] Différence entre pcf et kubernetes

                                PCF

(abstraction de plate-forme au niveau de l'application) • Pivotal Cloud Foundry est une abstraction de haut niveau du développement d'applications cloud natives.

• Nous avons l'abstraction de la plate-forme au niveau de l'application, en créant et en déployant une application entièrement configurée

• PCF est un exemple de PaaS «d'application» (également appelé Cloud Foundry Application Runtime)

• Le développeur maintient l'application à l'avenir

• Idéal pour les nouvelles applications, les applications cloud natives. Pour les équipes travaillant avec des cycles de vie courts et des versions fréquentes, PCF offre un excellent produit.

                       Kubernetes 

(abstraction de la plate-forme au niveau du conteneur) • Kubernetes est un planificateur ou orchestrateur de conteneurs.

• Nous avons l'abstraction de la plate-forme au niveau du conteneur, en créant et en déployant des conteneurs dans le cadre d'une application complète.

• Kubernetes est un PaaS «conteneur» (parfois appelé CaaS).

• Avec les outils d'orchestration de conteneur, le développeur crée puis gère le conteneur à l'avenir.

• Pour une nouvelle application, plus de travail pour vos équipes d'ingénierie et diminution de la productivité

Hemavathi Tamilmaran
la source
1
Salut Hemavathi Tamilmaran, votre réponse manque-t-elle un lien?
Pang
@Pang a raison! Un lien compléterait votre explication.
Taslim Oseni
1

Après 4 ans, les tendances ressemblent à ceci:

entrez la description de l'image ici

Les clusters Kubernetes deviennent vraiment bon marché ces jours-ci et l'environnement d'outillage pour Kubernetes est meilleur.

De plus, la plupart des fonctionnalités concurrentes répertoriées par d'autres affiches sont actuellement faciles à reproduire dans kubernetes.

Marcin Szymczak
la source