J'ai créé des pods avec type:deployment
mais je vois que certaines documentations utilisent type:pod
, plus spécifiquement la documentation des pods multi-conteneurs :
apiVersion: v1
kind: Pod
metadata:
name: ""
labels:
name: ""
namespace: ""
annotations: []
generateName: ""
spec:
? "// See 'The spec schema' for details."
: ~
Mais pour créer des pods, je peux simplement utiliser un type de déploiement :
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: ""
spec:
replicas: 3
template:
metadata:
labels:
app: ""
spec:
containers:
etc
J'ai remarqué que la documentation du pod indique:
La commande create peut être utilisée pour créer un pod directement, ou elle peut créer un ou des pods via un déploiement. Il est fortement recommandé d'utiliser un déploiement pour créer vos pods. Il surveille les pods défaillants et démarre de nouveaux pods si nécessaire pour maintenir le nombre spécifié. Si vous ne voulez pas qu'un déploiement surveille votre pod (par exemple, votre pod écrit des données non persistantes qui ne survivront pas à un redémarrage, ou votre pod est destiné à être de courte durée), vous pouvez créer un pod directement avec la commande create.
Remarque: Nous vous recommandons d'utiliser un déploiement pour créer des modules. Vous ne devez utiliser les instructions ci-dessous que si vous ne souhaitez pas créer de déploiement.
Mais cela soulève la question de savoir à quoi kind:pod
bon? Pouvez-vous en quelque sorte référencer des pods dans un déploiement? Je n'ai vu aucun moyen. Il semble que ce que vous obtenez avec les pods soit des métadonnées supplémentaires, mais aucune des options de déploiement telles que replica
ou une politique de redémarrage. À quoi sert un pod qui ne conserve pas les données, survit à un redémarrage? Je pense que je serais également en mesure de créer un pod multi-conteneurs avec un déploiement.
la source
La réponse de Radek est très bonne, mais je voudrais m'appuyer sur mon expérience, vous n'utiliserez presque jamais un objet avec le pod de type , car cela n'a aucun sens dans la pratique.
Parce que vous avez besoin d'un objet de déploiement - ou d'autres objets de l'API Kubernetes comme un contrôleur de réplication ou un jeu de réplicas - qui doit garder les réplicas (pods) en vie (c'est un peu l'intérêt d'utiliser kubernetes).
Ce que vous utiliserez dans la pratique pour une application typique sont:
Objet de déploiement (où vous spécifierez le ou les conteneurs de vos applications) qui hébergera le conteneur de votre application avec d'autres spécifications.
Objet de service (qui est comme un objet de regroupement et lui donne une IP dite virtuelle (IP de cluster) pour ceux
pods
qui ont une certaine étiquette - et cepods
sont essentiellement les conteneurs d'applications que vous avez déployés avec l'ancien objet de déploiement ).Vous devez avoir l' objet de service , car l'
pods
objet de déploiement peut être tué, augmenté et réduit, et vous ne pouvez pas vous fier à leurs adresses IP car elles ne seront pas persistantes.Vous avez donc besoin d'un objet comme un service , qui leur donne
pods
une IP stable.Je voulais juste vous donner un peu de contexte
pods
pour que vous sachiez comment les choses fonctionnent ensemble.J'espère que cela vous éclaircira, il n'y a pas si longtemps j'étais à votre place :)
la source
kind: Pod
l'exemple? Par exemple, Comment consommer des secrets en tant que vars env: kubernetes.io/docs/concepts/configuration/secret/…helm test
) où vous n'avez pas besoin d'exécuter l'application pour toujours, et nous n'avons pas besoin de plusieurs répliques, dans ce cas, le pod convient.Kubernetes possède trois types d'objets que vous devez connaître:
Pods:
Déploiement:
Et je suis d'accord avec d'autres réponses, oublie les pods et utilise simplement le déploiement. Pourquoi? Regardez le deuxième point, il surveille l'état de chaque module, en le mettant à jour si nécessaire.
Ainsi, au lieu de lutter avec des messages d'erreur tels que celui-ci:
Il suffit donc de refactoriser ou de recréer complètement votre pod dans un déploiement qui crée un pod pour faire ce que vous avez besoin de faire. Avec le déploiement, vous pouvez modifier n'importe quel élément de configuration que vous souhaitez et vous n'avez pas à vous soucier de voir ce message d'erreur.
la source
Pod est une instance de conteneur.
C'est la sortie de
replicas: 3
Pensez à un
deployment
peut avoir plusieurs instances en cours d'exécution (réplique).la source
replicas: 3
références à la partie supérieure de l'image, cela signifie "hé, lorsque vous exécutez ce processus, créez 3 ordinateurs virtuels / réels - instances.". ses «déploiements» similaires sont une maison et les «pods» sont des personnes. Une maison et trois personnes à l'intérieur qui font le travail. Qu'essayez-vous de faire spécifiquement à cela?Pod est une collection de conteneurs et objet de base de Kuberntes. Tous les conteneurs de pod se trouvent dans le même nœud.
Le déploiement est une sorte de contrôleur dans Kubernetes.
Controllers use a Pod Template that you provide to create the Pods for which it is responsible.
Le déploiement crée un ReplicaSet qui, à son tour, garantit que les CurrentReplicas sont toujours les mêmes que les désiréReplicas.
Avantages:
la source
Je veux ajouter des informations de livre Kubernetes In Action , afin que vous puissiez voir toutes les images et les relations entre les ressources Kubernetes comme Pod, Deployment et ReplicationController (ReplicaSet)
sont l'unité déployable de base de Kubernetes. Mais dans les cas d'utilisation réels, vous souhaitez que vos déploiements restent opérationnels automatiquement et restent en bonne santé sans aucune intervention manuelle. Pour cela, l'approche recommandée consiste à utiliser un déploiement , qui sous le capot crée un ReplicaSet .
(ReplicaSet étend un objet plus ancien appelé ReplicationController - qui est exactement le même mais sans l'historique de révision.)
Un ReplicaSet surveille en permanence la liste des pods en cours d'exécution et s'assure que le nombre de pods correspondant à une certaine spécification correspond toujours au nombre souhaité.
est une ressource de niveau supérieur destinée à déployer des applications et à les mettre à jour de manière déclarative.
Lorsque vous créez un déploiement , une ressource ReplicaSet est créée en dessous (éventuellement plus). Les ReplicaSets répliquent et gèrent également les pods. Lors de l' utilisation d' un déploiement, les gousses réels sont créés et gérés par le déploiement de » les ReplicaSets , non par le déploiement directement
Réfléchissons à ce qui s'est passé. En modifiant le modèle de pod dans votre ressource de déploiement, vous avez mis à jour votre application vers une version plus récente, en modifiant un seul champ!
Enfin, annulez un déploiement vers la révision précédente ou vers une révision antérieure si simple avec la ressource de déploiement.
Ces images sont également extraites du livre Kubernetes In Action .
la source
Essayez d'éviter les pods et implémentez plutôt les déploiements pour gérer les conteneurs, car les objets de type pod ne seront pas reprogrammés (ou auto-réparés) en cas de défaillance d'un nœud ou de terminaison de pod.
Un déploiement est généralement préférable car il définit un ReplicaSet pour garantir que le nombre souhaité de pods est toujours disponible et spécifie une stratégie pour remplacer les pods, telle que RollingUpdate.
la source
Dans kubernetes, les pods sont les plus petites unités déployables. Chaque fois que nous créons un objet kubernetes comme les déploiements, les jeux de réplicas, les jeux avec état, les jeux de démons, il crée un pod.
Comme mentionné ci-dessus, les déploiements créent des modules en fonction de l'état souhaité mentionné dans votre objet de déploiement. Donc, par exemple, vous voulez 5 répliques d'une application, vous avez mentionné
replicas: 5
dans votre manifeste de déploiement. Désormais, le contrôleur de déploiement est chargé de créer 5 répliques identiques (ni moins, ni plus) de l'application donnée avec toutes les métadonnées telles que la stratégie RBAC, la stratégie de réseau, les étiquettes, les annotations, le contrôle d'intégrité, les quotas de ressources, les souillures / tolérances et autres et les associer à chaque pod. ça crée.Il y a des cas où vous voulez créer un pod, par exemple si vous exécutez un side-car de test où vous n'avez pas besoin d'exécuter l'application pour toujours, vous n'avez pas besoin de plusieurs répliques et vous exécutez l'application lorsque vous souhaitez l'exécuter le boîtier du boîtier convient. Par exemple
helm test
, qui est une définition de pod qui spécifie un conteneur avec une commande donnée à exécuter.la source