Dans les fichiers yaml de création de pod ou dans les fichiers yaml de déploiement dans kubernetes, pourquoi la clé Containers a une valeur de liste - name: memory-demo-ctr
plutôt que nous pouvons simplement fournir la valeur de la carte name: memory-demo-ctr (pourquoi nous fournissons le symbole -
)?
J'ai essayé de regarder sur le Web mais je n'ai pas trouvé de solution. p>
apiVersion: v1 kind: Pod metadata: name: memory-demo namespace: mem-example spec: containers: - name: memory-demo-ctr image: polinux/stress
3 Réponses :
Vous avez une valeur de liste dans des conteneurs car un pod peut être composé de plusieurs conteneurs.
Un pod représente le plus petit bloc de construction de kubernetes. Au lieu de déployer des conteneurs individuellement, vous déployez et opérez toujours sur un groupe de conteneurs.
L'essentiel à propos des pods est que lorsqu'un pod contient plusieurs conteneurs, tous sont toujours exécutés sur un seul nœud worker, il ne s'étend jamais sur plusieurs nœuds worker.
Le pod est capable d'exécuter plusieurs conteneurs. C'est la raison pour laquelle l'objet conteneurs
est une liste au lieu d'une carte.
kind: Pod ... spec: containers: - name: busybox image: busybox:latest - name: nginx image: nginx:1.7.9 - name: redis image: redis:latest
Si conteneurs
est un objet cartographique, vous ne pouvez pas écrire de fichier de configuration pour exécuter plusieurs conteneurs dans un pod. J'espère que cette réponse a résolu votre doute.
Merci, cela a du sens
@Teja veuillez voter pour / accepter la réponse si vous la trouvez utile.
L'utilisation des deux structures mentionnées dans les manifestes yaml de kubernetes est assez bien justifiée et si vous y regardez de plus près, cela devient également assez intuitif:
Maps
( aka Dictionnaires
) sont utilisés lors de la fourniture d'un ensemble de paires clé: valeur
. Veuillez noter que les clés sont uniques dans un tel ensemble, par exemple vous fournissez un ensemble différent de libellés
dans la section métadonnées
de votre définition de déploiement
. L'élément metadata
se présente également sous la forme de Dictionary
car il contient un ensemble de clés uniques ( name
et labels
dans ce cas particulier).
- command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600'] image: busybox name: myapp-container
Pour donner un autre exemple, jetons un œil à la section spec
. Notez que les trois clés enfants de l'élément spec
, à savoir répliques
, sélecteur
et template
, sont uniques dans l'ensemble et c'est la raison pour laquelle ils sont sous la forme d'un Dictionary
(ou d'une Map
):
- image: redis name: redis
Les Lists
(aka Arrays
) sont utilisés lorsque nous devons fournir une List
(ou Array
) d'objets / éléments de même type comme dans le cas de conteneurs
dans la définition de Déploiement
:
- name: nginx image: nginx:1.7.9
L'élément container
est un tableau car il peut contenir de nombreux objets / éléments / éléments du même type (dans ce cas des conteneurs) qui peuvent avoir les mêmes propriétés. Dans la section container
, vous pouvez définir de nombreux conteneurs et chacun d'entre eux aura son unique nom
, image
et ports
. -
signe indique un élément ou un élément du tableau . Notez que la structure à l'intérieur de cet élément d'élément est une Map
( Dictionary
) et comme dans les exemples précédents, elle contient ensemble de clés uniques avec les valeurs correspondantes .
L'utilisation de ces deux structures est assez flexible car elles peuvent être imbriquées l'une dans l'autre, par exemple vous pouvez avoir une Listes
de Dictionnaires
(comme dans le cas des conteneurs
), des Dictionaries
dont les valeurs sont d'autres Dictionnaires
ainsi que Dictionnaires
contenant des Listes
, pour épuiser toutes les possibilités (un exemple d'un tel cas est l'élément spec
qui est un Dictionnaire qui contient entre autres la clé containers
qui est une liste (la valeur de cette clé
est une liste / tableau
de items ).
Quant à votre question spécifique:
pourquoi la clé Containers a une valeur de liste - nom: memory-demo-ctr plutôt que nous pouvons simplement fournir le nom de la valeur de la carte: memory-demo-ctr (pourquoi nous fournissons - symbole)?
Notez qu'une valeur de liste (élément de liste) pour la clé container
n'est pas seulement l'élément name
mais la structure entière au même niveau d'indentation sous le conteneur
. Comme je l'ai déjà mentionné ci-dessus, un élément de la liste est indiqué par le signe -
. Dans l'exemple publié dans vos clés de question, nom
et image
avec leurs valeurs respectives appartiennent au même élément / item d'une liste
( array
) et ils forment un autre dictionnaire
imbriqué ( map
). Ce n'est donc pas l'élément name
qui doit être précédé du caractère -
mais toute la structure (dans ce cas Dictionary / Map
) sous élément container
. Lorsque vous définissez un autre conteneur (un autre élément de la liste de conteneurs), il commence toujours par un autre caractère -
, peu importe si le premier élément qu'il contient est nom
. Par exemple, vous pouvez construire votre structure comme ceci et elle sera également correcte:
containers: - name: nginx image: nginx:1.7.9 - image: redis name: redis - command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600'] image: busybox name: myapp-container
Le dictionnaire
( map
) les éléments ne doivent pas nécessairement apparaître dans le même ordre. C'est juste une convention selon laquelle nom
est généralement placé comme premier. Je vais le souligner à nouveau: ce ne sont pas name
, image
et command
dans l'exemple ci-dessus qui sont des éléments de une liste mais toute la structure dictionnaire
( map
) précédée du caractère -
, donc ce sont:
d'abord:
containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
deuxième:
spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx
et troisième:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx type: front-end
éléments / éléments
de la liste des conteneurs
(qui est en même temps l'une des clés
appartenant à spec
dictionnaire). Oui, la valeur de cette clé
est une liste
donc nous pouvons dire que tout l'élément containers
est une liste.
J'espère que cela a clarifié l'utilisation des deux structures et expliqué les différences entre elles.
Merci mario pour une explication très détaillée, apprécie ton aide.
Je suis heureux d'avoir pu aider. Si la réponse a été utile et / ou a apporté une solution à votre problème, vous pouvez envisager de l'accepter et / ou de voter dessus. En tant que nouveau membre de la communauté, vous pouvez vous familiariser avec ce court article: stackoverflow.com/help/someone-answers