2.3. Gestion du stockage éphémère
Les administrateurs de cluster peuvent gérer le stockage éphémère au sein d'un projet en fixant des quotas qui définissent les plages limites et le nombre de demandes de stockage éphémère pour tous les pods dans un état non terminal. Les développeurs peuvent également définir des demandes et des limites sur cette ressource de calcul au niveau du pod et du conteneur.
Vous pouvez gérer le stockage éphémère local en spécifiant des demandes et des limites. Chaque conteneur d'un module peut spécifier les éléments suivants :
-
spec.containers[].resources.limits.ephemeral-storage
-
spec.containers[].resources.requests.ephemeral-storage
Les limites et les demandes de stockage éphémère sont mesurées en nombre d'octets. Vous pouvez exprimer le stockage sous la forme d'un nombre entier simple ou d'un nombre à virgule fixe en utilisant l'un de ces suffixes : E, P, T, G, M, k. Vous pouvez également utiliser les équivalents en puissance de deux : Ei, Pi, Ti, Gi, Mi, Ki. Par exemple, les quantités suivantes représentent toutes approximativement la même valeur : 128974848, 129e6, 129M, et 123Mi. Le cas des suffixes est significatif. Si vous spécifiez 400 m de stockage éphémère, cela demande 0,4 octet, plutôt que 400 mégaoctets (400Mi) ou 400 mégaoctets (400M), ce qui était probablement l'intention.
L'exemple suivant montre un pod avec deux conteneurs. Chaque conteneur demande 2 Go de stockage éphémère local. Chaque conteneur a une limite de 4 Go de stockage éphémère local. Par conséquent, le module a une demande de 4 Go de stockage éphémère local et une limite de 8 Go de stockage éphémère local.
apiVersion: v1 kind: Pod metadata: name: frontend spec: containers: - name: app image: images.my-company.example/app:v4 resources: requests: ephemeral-storage: "2Gi" 1 limits: ephemeral-storage: "4Gi" 2 volumeMounts: - name: ephemeral mountPath: "/tmp" - name: log-aggregator image: images.my-company.example/log-aggregator:v6 resources: requests: ephemeral-storage: "2Gi" 3 volumeMounts: - name: ephemeral mountPath: "/tmp" volumes: - name: ephemeral emptyDir: {}
Ce paramètre de la spécification des pods affecte la façon dont l'ordonnanceur prend une décision sur la programmation des pods, ainsi que la façon dont kubelet évince les pods. Tout d'abord, l'ordonnanceur s'assure que la somme des demandes de ressources des conteneurs programmés est inférieure à la capacité du nœud. Dans ce cas, le pod ne peut être assigné à un nœud que si son stockage éphémère disponible (ressource allouable) est supérieur à 4 Go.
Deuxièmement, au niveau du conteneur, puisque le premier conteneur fixe une limite de ressources, le gestionnaire d'expulsion kubelet mesure l'utilisation du disque de ce conteneur et expulse le pod si l'utilisation du stockage de ce conteneur dépasse sa limite (4GiB). Au niveau du pod, kubelet calcule une limite de stockage globale pour le pod en additionnant les limites de tous les conteneurs de ce pod. Dans ce cas, l'utilisation totale du stockage au niveau du pod est la somme de l'utilisation du disque de tous les conteneurs plus les volumes emptyDir
du pod. Si cette utilisation totale dépasse la limite de stockage globale du pod (4 Go), le kubelet marque également le pod pour éviction.
Pour plus d'informations sur la définition des quotas pour les projets, voir Paramétrage des quotas par projet.