Chapitre 3. Déployer les charges de travail des conteneurs sandboxés d'OpenShift
Vous pouvez installer l'OpenShift sandboxed containers Operator en utilisant la console web ou l'OpenShift CLI (oc
). Avant d'installer l'OpenShift sandboxed containers Operator, vous devez préparer votre cluster OpenShift Container Platform.
3.1. Conditions préalables
Avant d'installer les conteneurs OpenShift sandboxed, assurez-vous que votre cluster OpenShift Container Platform répond aux exigences suivantes :
Votre cluster doit être installé sur une infrastructure bare-metal sur site avec des travailleurs Red Hat Enterprise Linux CoreOS (RHCOS). Vous pouvez utiliser n'importe quelle méthode d'installation, y compris le provisionnement par l'utilisateur, le provisionnement par l'installateur ou l'installation assistée pour déployer votre cluster.
Note- Les conteneurs OpenShift sandboxed ne prennent en charge que les nœuds de travail RHCOS. Les nœuds RHEL ne sont pas pris en charge.
- La virtualisation imbriquée n'est pas prise en charge.
- Vous pouvez installer les conteneurs OpenShift sandboxed sur les instances bare-metal d'Amazon Web Services (AWS). Les instances bare-metal proposées par d'autres fournisseurs de cloud ne sont pas prises en charge.
3.1.1. Ressources nécessaires pour les conteneurs OpenShift sandboxed
OpenShift sandboxed containers permet aux utilisateurs d'exécuter des charges de travail sur leurs clusters OpenShift Container Platform à l'intérieur d'un runtime sandboxed (Kata). Chaque pod est représenté par une machine virtuelle (VM). Chaque VM s'exécute dans un processus QEMU et héberge un processus kata-agent
qui agit en tant que superviseur pour gérer les charges de travail des conteneurs et les processus s'exécutant dans ces conteneurs. Deux processus supplémentaires ajoutent des frais généraux :
-
containerd-shim-kata-v2
est utilisé pour communiquer avec le pod. -
virtiofsd
gère l'accès au système de fichiers de l'hôte pour le compte de l'invité.
Chaque VM est configurée avec une quantité de mémoire par défaut. La mémoire supplémentaire est connectée à chaud à la VM pour les conteneurs qui demandent explicitement de la mémoire.
Un conteneur fonctionnant sans ressource mémoire consomme de la mémoire libre jusqu'à ce que la mémoire totale utilisée par la VM atteigne l'allocation par défaut. L'invité et ses tampons d'E/S consomment également de la mémoire.
Si un conteneur se voit attribuer une quantité spécifique de mémoire, cette mémoire est connectée à chaud à la VM avant le démarrage du conteneur.
Lorsqu'une limite de mémoire est spécifiée, la charge de travail est interrompue si elle consomme plus de mémoire que la limite. Si aucune limite de mémoire n'est spécifiée, le noyau s'exécutant sur la VM peut manquer de mémoire. Si le noyau manque de mémoire, il peut mettre fin à d'autres processus sur la VM.
Tailles de mémoire par défaut
Le tableau suivant présente certaines valeurs par défaut pour l'allocation des ressources.
Ressources | Valeur |
---|---|
Mémoire allouée par défaut à une machine virtuelle | 2Gi |
Utilisation de la mémoire du noyau Linux invité au démarrage | ~110Mi |
Mémoire utilisée par le processus QEMU (à l'exclusion de la mémoire VM) | ~30Mi |
Mémoire utilisée par le processus | ~10Mi |
Mémoire utilisée par le processus | ~20Mi |
Données du cache du tampon de fichier après l'exécution de | ~300Mi* [1] |
Les tampons de fichiers apparaissent et sont pris en compte à plusieurs endroits :
- Dans l'invité où il apparaît en tant que cache de tampon de fichier.
-
Dans le démon
virtiofsd
qui établit la correspondance entre les opérations d'E/S de fichiers autorisées dans l'espace utilisateur. - Dans le processus QEMU en tant que mémoire invitée.
L'utilisation totale de la mémoire est correctement prise en compte par les mesures d'utilisation de la mémoire, qui ne comptent la mémoire qu'une seule fois.
L'overhead pod décrit la quantité de ressources système utilisée par un pod sur un nœud. Vous pouvez obtenir le pod overhead actuel pour le runtime Kata en utilisant oc describe runtimeclass kata
comme indiqué ci-dessous.
Exemple :
oc describe runtimeclass kata
$ oc describe runtimeclass kata
Exemple de sortie
kind: RuntimeClass apiVersion: node.k8s.io/v1 metadata: name: kata overhead: podFixed: memory: "500Mi" cpu: "500m"
kind: RuntimeClass
apiVersion: node.k8s.io/v1
metadata:
name: kata
overhead:
podFixed:
memory: "500Mi"
cpu: "500m"
Vous pouvez modifier l'overhead du pod en changeant le champ spec.overhead
pour un RuntimeClass
. Par exemple, si la configuration que vous exécutez pour vos conteneurs consomme plus de 350Mi de mémoire pour le processus QEMU et les données du noyau invité, vous pouvez modifier l'overhead RuntimeClass
pour l'adapter à vos besoins.
Les valeurs de frais généraux par défaut spécifiées sont prises en charge par Red Hat. La modification des valeurs de frais généraux par défaut n'est pas prise en charge et peut entraîner des problèmes techniques.
Lors de l'exécution de tout type d'E/S du système de fichiers dans l'invité, des tampons de fichiers sont alloués dans le noyau de l'invité. Les tampons de fichiers sont également mappés dans le processus QEMU sur l'hôte, ainsi que dans le processus virtiofsd
.
Par exemple, si vous utilisez 300Mi de cache de tampon de fichier dans l'invité, QEMU et virtiofsd
semblent utiliser 300Mi de mémoire supplémentaire. Cependant, la même mémoire est utilisée dans les trois cas. En d'autres termes, l'utilisation totale de la mémoire n'est que de 300Mi, mappée à trois endroits différents. Ce fait est correctement pris en compte dans le rapport sur l'utilisation de la mémoire.
3.1.2. Vérifier si les nœuds de cluster sont éligibles pour exécuter les conteneurs OpenShift sandboxed
Avant d'exécuter des conteneurs OpenShift sandboxed, vous pouvez vérifier si les nœuds de votre cluster sont éligibles pour exécuter des conteneurs Kata. Certains nœuds du cluster peuvent ne pas être conformes aux exigences minimales des conteneurs sandboxed. La raison la plus courante de l'inéligibilité d'un nœud est l'absence de support de virtualisation sur le nœud. Si vous tentez d'exécuter des charges de travail en bac à sable sur des nœuds non éligibles, vous rencontrerez des erreurs. Vous pouvez utiliser l'opérateur NFD (Node Feature Discovery) et une ressource NodeFeatureDiscovery
pour vérifier automatiquement l'éligibilité des nœuds.
Si vous souhaitez installer le moteur d'exécution Kata sur des nœuds de travail sélectionnés dont vous savez qu'ils sont éligibles, appliquez l'étiquette feature.node.kubernetes.io/runtime.kata=true
aux nœuds sélectionnés et définissez checkNodeEligibility: true
dans la ressource KataConfig
.
Pour installer le moteur d'exécution Kata sur tous les nœuds de travail, définissez checkNodeEligibility: false
dans la ressource KataConfig
.
Dans ces deux scénarios, il n'est pas nécessaire de créer la ressource NodeFeatureDiscovery
. Vous ne devez appliquer manuellement le label feature.node.kubernetes.io/runtime.kata=true
que si vous êtes sûr que le nœud est éligible pour exécuter des conteneurs Kata.
La procédure suivante applique l'étiquette feature.node.kubernetes.io/runtime.kata=true
à tous les nœuds éligibles et configure la ressource KataConfig
pour vérifier l'éligibilité des nœuds.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Connectez-vous en tant qu'utilisateur disposant des privilèges
cluster-admin
. - Installer l'opérateur NFD (Node Feature Discovery).
Procédure
Créer une ressource
NodeFeatureDiscovery
pour détecter les capacités des nœuds adaptés à l'exécution des conteneurs Kata :Enregistrez le YAML suivant dans le fichier
nfd.yaml
:apiVersion: nfd.openshift.io/v1 kind: NodeFeatureDiscovery metadata: name: nfd-kata namespace: openshift-nfd spec: operand: image: quay.io/openshift/origin-node-feature-discovery:4.10 imagePullPolicy: Always servicePort: 12000 workerConfig: configData: | sources: custom: - name: "feature.node.kubernetes.io/runtime.kata" matchOn: - cpuId: ["SSE4", "VMX"] loadedKMod: ["kvm", "kvm_intel"] - cpuId: ["SSE4", "SVM"] loadedKMod: ["kvm", "kvm_amd"]
apiVersion: nfd.openshift.io/v1 kind: NodeFeatureDiscovery metadata: name: nfd-kata namespace: openshift-nfd spec: operand: image: quay.io/openshift/origin-node-feature-discovery:4.10 imagePullPolicy: Always servicePort: 12000 workerConfig: configData: | sources: custom: - name: "feature.node.kubernetes.io/runtime.kata" matchOn: - cpuId: ["SSE4", "VMX"] loadedKMod: ["kvm", "kvm_intel"] - cpuId: ["SSE4", "SVM"] loadedKMod: ["kvm", "kvm_amd"]
Copy to Clipboard Copied! Créer la ressource personnalisée (CR)
NodeFeatureDiscovery
:oc create -f nfd.yaml
$ oc create -f nfd.yaml
Copy to Clipboard Copied! Exemple de sortie
nodefeaturediscovery.nfd.openshift.io/nfd-kata created
nodefeaturediscovery.nfd.openshift.io/nfd-kata created
Copy to Clipboard Copied! Une étiquette
feature.node.kubernetes.io/runtime.kata=true
est appliquée à tous les nœuds de travail qualifiés.
Définissez le champ
checkNodeEligibility
surtrue
dans la ressourceKataConfig
pour activer la fonctionnalité, par exemple :Enregistrez le YAML suivant dans le fichier
kata-config.yaml
:apiVersion: kataconfiguration.openshift.io/v1 kind: KataConfig metadata: name: example-kataconfig spec: checkNodeEligibility: true
apiVersion: kataconfiguration.openshift.io/v1 kind: KataConfig metadata: name: example-kataconfig spec: checkNodeEligibility: true
Copy to Clipboard Copied! Créer le CR
KataConfig
:oc create -f kata-config.yaml
$ oc create -f kata-config.yaml
Copy to Clipboard Copied! Exemple de sortie
kataconfig.kataconfiguration.openshift.io/example-kataconfig created
kataconfig.kataconfiguration.openshift.io/example-kataconfig created
Copy to Clipboard Copied!
Vérification
Vérifiez que les nœuds admissibles de la grappe sont correctement étiquetés :
oc get nodes --selector='feature.node.kubernetes.io/runtime.kata=true'
$ oc get nodes --selector='feature.node.kubernetes.io/runtime.kata=true'
Copy to Clipboard Copied! Exemple de sortie
NAME STATUS ROLES AGE VERSION compute-3.example.com Ready worker 4h38m v1.25.0 compute-2.example.com Ready worker 4h35m v1.25.0
NAME STATUS ROLES AGE VERSION compute-3.example.com Ready worker 4h38m v1.25.0 compute-2.example.com Ready worker 4h35m v1.25.0
Copy to Clipboard Copied!