Comment ces deux se comparent? Autant que je sache, runC est un environnement d'exécution pour les conteneurs. Cela signifie que ce composant fournit l'environnement nécessaire à l'exécution des conteneurs. Quel est le rôle du conteneur ici? S'il fait le reste (mise en réseau, gestion de volume, etc.), alors quel est le rôle du moteur Docker? Et que dire de containerd-shim? En gros, j'essaie de comprendre ce que chacun de ces composants fait.
Réponses
Trop de publicités?Je vais donner un aperçu de haut niveau pour vous aider à démarrer:
- containerd est un conteneur d'exécution qui peut gérer l'ensemble du cycle de vie du conteneur - de transfert d'image/de stockage de conteneurs de l'exécution, la supervision et la mise en réseau.
- conteneur-cale poignée sans tête, les conteneurs, les sens une fois runc initialise les conteneurs, il sort de remettre les contenants de plus pour le conteneur de cale qui agit à titre de certains intermédiaires.
- runc est léger universel moment de l'exécution du conteneur, qui demeure par le BEC de la spécification. runc est utilisé par containerd pour le frai et l'exécution de conteneurs selon BEC spec. Il est également le reconditionnement de libcontainer.
- grpc utilisé pour la communication entre containerd et support-moteur.
- BEC maintient le BEC de spécification pour l'exécution et des images. L'actuel docker prise en charge des versions BEC de l'image de l'exécution et des spécifications.
Plus De Liens:
Docker engine est la base de toute chose, c'était un monolithe qui a permis aux utilisateurs d'exécuter des conteneurs. Ensuite, il a été décomposé en composants individuels. Il a été décomposé en: - support moteur - containerd - runc
runC est le niveau le plus bas composant qui implémente le BEC de l'interface. Il interagit avec le noyau et le "fonctionne" le conteneur
containerd fait des choses comme prendre soin de la configuration de la mise en réseau, le transfert de l'image/de stockage, etc - Il prend soin de l'ensemble de conteneur d'exécution (ce qui signifie qu'il gère et rend la vie facile pour runC, qui est le conteneur d'exécution). Contrairement au démon Docker elle a une diminution de la fonctionnalité de l'ensemble; pas de soutien de téléchargement d'images, par exemple.
Support moteur fait du niveau élevé des choses lui-même comme accepter des commandes de l'utilisateur, le téléchargement des images à partir du panneau de registre etc. Il décharge une quantité de containerd.
"le démon Docker prépare l'image comme un Conteneur de l'Image (BEC) bundle et fait un appel API pour containerd pour démarrer le BEC bundle. containerd commence alors le conteneur à l'aide de runC."
Remarque, les exécutions ont à BEC conforme (comme runC est), qui est, ils ont pour exposer un fixe API pour les gestionnaires comme containerd de sorte qu'ils(containerd) peuvent rendre la vie facile pour eux(runC) (et de leur demander d'arrêter/démarrer les conteneurs)
cr est un autre conteneur d'exécution, qui ne supporte pas le BEC encore, mais prend en charge la appc spécification. Mais c'est un à part entière de la solution, il gère et le fait de sa propre vie facile, donc il n'a pas besoin containerd comme papa.
Donc, c'est ça. Maintenant, nous allons ajouter un autre composant (et une autre interface) pour le mix - Kubernetes
Kubernetes peut exécuter tout ce qui répond à la CRI - conteneur d'exécution de l'interface.
Vous pouvez exécuter cr avec k8s, comme rkt satisfait CRI - conteneur d'exécution de l'interface. Kubernetes ne pas demander quoi que ce soit d'autre, il a juste besoin de CRI, il ne donne pas un FF sur la façon dont vous exécutez vos contenants, BEC ou pas.
containerd ne prend pas en charge le CRI, mais cri-containerd qui est d'une cale d'épaisseur autour de containerd n'. Donc, si vous voulez exécuter containerd avec Kubernetes, vous devez utiliser des cri-containerd (c'est aussi le défaut d'exécution pour Kubernetes). cri-containerd a récemment été renommé CRI Plugin.
Si vous voulez obtenir le docker moteur dans le mélange ainsi, vous pouvez le faire. Utilisation dockershim, il va ajouter le CRI cale pour le menu fixe du moteur.
Maintenant, comme containerd permet de gérer et de rendre la vie facile pour runC (le conteneur d'exécution), il permet de gérer et de rendre la vie facile pour d'autres conteneur des durées maximales ainsi - en fait, pour chaque conteneur d'exécution qui prend en charge BEC - comme Kata conteneur d'exécution (connu sous le nom ~kata-runtime~ - https://github.com/kata-containers/runtime.) - qui va à l'kata récipients, Contenant de l'exécution (par Intel).
Maintenant, nous savons que rkt répond le CRI, cri-containerd (aka CRI Plugin), il fait trop.
Remarque ce containerd est en train de faire ici. Ce n'est pas une exécution, c'est un gestionnaire de runC qui est le conteneur d'exécution. Il parvient tout juste le téléchargement de l'image, de stockage, etc. Heck, il n'a même pas satisfaire CRI.
C'est pourquoi nous avons CRI-O. C'est comme containerd, mais elle met en œuvre CRI. CRI-O a besoin d'un conteneur d'exécution pour exécuter des images. Il faudra gérer et rendre la vie facile pour que de l'exécution, mais il a besoin d'un moment de l'exécution. Il faudra toute l'exécution qui est BEC conforme. Alors, naturellement, ~kata-runtime~ est CRI-O conforme, runC est CRI-O conforme.
Utilisation avec Kubernetes est simple, point de Kubernetes à CRI-O comme le conteneur de l'exécution. (oui oui, CRI-O, mais le CRI-O et le conteneur réel d'exécution EST. Et Kubernetes est en se référant à l'heureux couple, quand il est dit conteneur d'exécution).
Comme containerd a menu fixe pour le rendre VRAIMENT utilisable, et de gérer et de rendre la vie facile pour containerd, CRI-O a besoin de quelqu'un pour prendre soin de gestion de l'image - il a buildah, umochi etc.
crun est un autre moteur d'exécution qui est BEC conformes et écrit en C. Il est par RedHat.
Nous avons déjà discuté, kata-runtime est un autre moteur d'exécution qui est BEC conforme. Donc, nous pouvons utiliser kata-exécution avec CRI-O comme nous en avons discuté.
Remarque, ici, la kubelet est de parler à des CRI-O par le CRI. CRI-O est de parler à cc-runtime (qui est un autre moment de l'exécution pour Intel contenants transparents, oui, BEC conforme), mais il pourrait être kata-exécution.
N'oubliez pas containerd, il permet de gérer et de rendre la vie facile pour tous BEC plainte runtimes trop runC sûr, mais aussi kata-runtime, cc-runtime
Ici, la note juste le temps d'exécution est déplacé de runC à kata-runtime. Pour ce faire, dans le containerd config, il suffit de changer d'exécution de "kata"
Inutile de dire, il peut fonctionner sur Kubernetes, soit par le CRI-O, ou par le cri-containerd (aka CRI Plugin).
C'est vraiment cool :top:
Kubernetes, ici représentée par son Ambassadeur, M. Kubelet s'exécute tout ce qui satisfait le CRI. Maintenant, nous avons plusieurs candidats qui. - Cri-containerd fait containerd le faire. - CRI-O est-il en mode natif. - Dockershim rend le docker moteur de le faire.
Maintenant, tous les 3 gars ci-dessus, permet de gérer et de rendre la vie facile aux BEC conforme runtimes - runC, kata-runtime, cc-runtimes.
Nous avons également frakti, qui répond à CRI, comme rkt, mais n'est pas satisfaire à BEC, et est livré avec son propre conteneur de l'exécution.
Ici, nous avons CRI-O dans l'action de gérer et de rendre la vie facile pour BEC conforme kata-runtime et runC à la fois
Nous avons encore plus de temps de fonctionnement ainsi:
- wagon - BEC conforme, écrit dans la rouille
- Pochette - Alibaba est modifié runC
- nvidia runtime - nvidia fourche de runC
ref: https://github.com/darshanime/notes/blob/master/kubernetes.org#notes
runc
est l'un des composant de l' containerd
et les poignées de niveau noyau d'interaction pour l'exécution des conteneurs. Dans les versions antérieures, containerd
a été essentiellement un très haut niveau d'abstraction autour de runc
mais maintenant, c'est plus que cela. Partir de conteneur.io:
runc est une composante de containerd, l'exécuteur testamentaire pour les conteneurs. containerd a une portée plus large que l'exécution des conteneurs: le téléchargement contenant des images, la gestion du stockage et des interfaces réseau, appelant runc avec les bons paramètres pour exécuter des conteneurs.
Cette image de la même source bien décrit cette.
Docker Engine est l'utilisateur final du produit qui utilise containerd
comme une composante principale et met en œuvre d'autres fonctionnalités qui ne tombe pas sous containerd
s'portée.
Notez que le Panneau extrait containerd
comme une composante distincte, de sorte qu'il peut être utilisé et développé par d'autres produits aussi.