Chapitre 2. En travaillant avec des gousses
2.1. En utilisant des gousses
Le pod est un ou plusieurs conteneurs déployés ensemble sur un hôte, et la plus petite unité de calcul pouvant être définie, déployée et gérée.
2.1.1. Comprendre les gousses
Les gousses sont l’équivalent brut d’une instance de machine (physique ou virtuelle) à un conteneur. Chaque pod se voit attribuer sa propre adresse IP interne, possédant ainsi l’ensemble de son espace portuaire, et les conteneurs à l’intérieur des pods peuvent partager leur stockage et leur réseau local.
Les gousses ont un cycle de vie; ils sont définis, puis ils sont assignés à courir sur un nœud, puis ils courent jusqu’à la sortie de leur(s) conteneur(s) ou ils sont retirés pour une autre raison. Les pods, en fonction de la politique et du code de sortie, peuvent être supprimés après la sortie, ou peuvent être conservés pour permettre l’accès aux journaux de leurs conteneurs.
Le Red Hat OpenShift Service sur AWS traite les pods comme en grande partie immuables; les modifications ne peuvent pas être apportées à une définition de pod pendant qu’elle est en cours d’exécution. Le service OpenShift Red Hat sur AWS implémente les modifications en mettant fin à un pod existant et en le recréant avec une configuration modifiée, une image de base ou les deux. Les gousses sont également traitées comme consommables, et ne maintiennent pas l’état lorsqu’elles sont recréées. Les pods doivent donc généralement être gérés par des contrôleurs de niveau supérieur, plutôt que directement par les utilisateurs.
Les gousses nues qui ne sont pas gérées par un contrôleur de réplication ne seront pas reprogrammées lors de la perturbation du nœud.
2.1.2. Exemples de configurations de pod
Le service OpenShift Red Hat sur AWS exploite le concept Kubernetes d’un pod, qui est un ou plusieurs conteneurs déployés ensemble sur un hôte, et la plus petite unité de calcul pouvant être définie, déployée et gérée.
Ce qui suit est une définition d’exemple d’un pod. Il présente de nombreuses caractéristiques des pods, dont la plupart sont discutées dans d’autres sujets et donc brièvement mentionnées ici:
Définition d’objet pod (YAML)
kind: Pod apiVersion: v1 metadata: name: example labels: environment: production app: abc spec: restartPolicy: Always securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: abc args: - sleep - "1000000" volumeMounts: - name: cache-volume mountPath: /cache image: registry.access.redhat.com/ubi7/ubi-init:latest securityContext: allowPrivilegeEscalation: false runAsNonRoot: true capabilities: drop: ["ALL"] resources: limits: memory: "100Mi" cpu: "1" requests: memory: "100Mi" cpu: "1" volumes: - name: cache-volume emptyDir: sizeLimit: 500Mi
kind: Pod
apiVersion: v1
metadata:
name: example
labels:
environment: production
app: abc
spec:
restartPolicy: Always
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
containers:
- name: abc
args:
- sleep
- "1000000"
volumeMounts:
- name: cache-volume
mountPath: /cache
image: registry.access.redhat.com/ubi7/ubi-init:latest
securityContext:
allowPrivilegeEscalation: false
runAsNonRoot: true
capabilities:
drop: ["ALL"]
resources:
limits:
memory: "100Mi"
cpu: "1"
requests:
memory: "100Mi"
cpu: "1"
volumes:
- name: cache-volume
emptyDir:
sizeLimit: 500Mi
- 1
- Les pods peuvent être "étiquetés" avec une ou plusieurs étiquettes, qui peuvent ensuite être utilisées pour sélectionner et gérer des groupes de pods en une seule opération. Les étiquettes sont stockées au format clé/valeur dans le hachage des métadonnées.
- 2
- Le pod redémarre la politique avec des valeurs possibles Toujours, OnFailure et jamais. La valeur par défaut est Toujours.
- 3
- Le service OpenShift Red Hat sur AWS définit un contexte de sécurité pour les conteneurs qui spécifie s’ils sont autorisés à fonctionner en tant que conteneurs privilégiés, exécutés en tant qu’utilisateur de leur choix, et plus encore. Le contexte par défaut est très restrictif, mais les administrateurs peuvent le modifier au besoin.
- 4
- les conteneurs spécifient un tableau d’une ou plusieurs définitions de conteneurs.
- 5
- Le conteneur spécifie l’endroit où les volumes de stockage externes sont montés à l’intérieur du conteneur.
- 6
- Indiquez les volumes à prévoir pour le pod. Les volumes montent sur le chemin spécifié. Il ne faut pas monter sur la racine du conteneur, /, ou tout chemin qui est le même dans l’hôte et le conteneur. Cela peut corrompre votre système hôte si le conteneur est suffisamment privilégié, comme les fichiers hôte /dev/pts. Il est sûr de monter l’hôte en utilisant /host.
- 7
- Chaque conteneur dans la gousse est instancié à partir de sa propre image de conteneur.
- 8
- La gousse définit les volumes de stockage qui sont à la disposition de son(s) conteneur(s) à utiliser.
Lorsque vous attachez des volumes persistants qui ont un nombre élevé de fichiers à des pods, ces gousses peuvent échouer ou peuvent prendre beaucoup de temps pour démarrer. Lorsque vous utilisez des volumes persistants avec des nombres de fichiers élevés dans OpenShift, pourquoi les pods ne commencent-ils pas ou prennent-ils trop de temps pour atteindre l’état « Ready »?
Cette définition de pod n’inclut pas les attributs qui sont remplis par Red Hat OpenShift Service sur AWS automatiquement après la création du pod et son cycle de vie commence. La documentation du pod Kubernetes contient des détails sur la fonctionnalité et le but des pods.