2.2. Création d'un ensemble de machines de calcul sur AWS
Vous pouvez créer un ensemble de machines de calcul différent pour répondre à un objectif spécifique dans votre cluster OpenShift Container Platform sur Amazon Web Services (AWS). Par exemple, vous pouvez créer des jeux de machines d'infrastructure et des machines connexes afin de pouvoir déplacer des charges de travail de support vers les nouvelles machines.
Vous ne pouvez utiliser les fonctionnalités avancées de gestion et de mise à l'échelle des machines que dans les clusters où l'API Machine est opérationnelle. Les clusters dont l'infrastructure est fournie par l'utilisateur nécessitent une validation et une configuration supplémentaires pour utiliser l'API Machine.
Les clusters avec le type de plateforme d'infrastructure none
ne peuvent pas utiliser l'API Machine. Cette limitation s'applique même si les machines de calcul attachées au cluster sont installées sur une plateforme qui prend en charge cette fonctionnalité. Ce paramètre ne peut pas être modifié après l'installation.
Pour afficher le type de plateforme de votre cluster, exécutez la commande suivante :
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
2.2.1. Exemple de YAML pour une ressource personnalisée d'un ensemble de machines de calcul sur AWS
Cet exemple YAML définit un ensemble de machines de calcul qui fonctionne dans la zone us-east-1a
Amazon Web Services (AWS) et crée des nœuds étiquetés avec node-role.kubernetes.io/<role>: ""
.
Dans cet exemple, <infrastructure_id>
est l'étiquette d'ID d'infrastructure basée sur l'ID de cluster que vous avez défini lors du provisionnement du cluster, et <role>
est l'étiquette de nœud à ajouter.
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1 name: <infrastructure_id>-<role>-<zone> 2 namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 3 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<zone> 4 template: metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5 machine.openshift.io/cluster-api-machine-role: <role> 6 machine.openshift.io/cluster-api-machine-type: <role> 7 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<zone> 8 spec: metadata: labels: node-role.kubernetes.io/<role>: "" 9 providerSpec: value: ami: id: ami-046fe691f52a953f9 10 apiVersion: awsproviderconfig.openshift.io/v1beta1 blockDevices: - ebs: iops: 0 volumeSize: 120 volumeType: gp2 credentialsSecret: name: aws-cloud-credentials deviceIndex: 0 iamInstanceProfile: id: <infrastructure_id>-worker-profile 11 instanceType: m6i.large kind: AWSMachineProviderConfig placement: availabilityZone: <zone> 12 region: <region> 13 securityGroups: - filters: - name: tag:Name values: - <infrastructure_id>-worker-sg 14 subnet: filters: - name: tag:Name values: - <infrastructure_id>-private-<zone> 15 tags: - name: kubernetes.io/cluster/<infrastructure_id> 16 value: owned - name: <custom_tag_name> 17 value: <custom_tag_value> 18 userDataSecret: name: worker-user-data
- 1 3 5 11 14 16
- Spécifiez l'ID d'infrastructure qui est basé sur l'ID de cluster que vous avez défini lorsque vous avez provisionné le cluster. Si le CLI OpenShift est installé, vous pouvez obtenir l'ID d'infrastructure en exécutant la commande suivante :
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
- 2 4 8
- Spécifiez l'ID de l'infrastructure, l'étiquette du nœud de rôle et la zone.
- 6 7 9
- Spécifiez l'étiquette du nœud de rôle à ajouter.
- 10
- Spécifiez une image de machine Amazon (AMI) Red Hat Enterprise Linux CoreOS (RHCOS) valide pour votre zone AWS pour vos nœuds OpenShift Container Platform. Si vous souhaitez utiliser une image AWS Marketplace, vous devez compléter l'abonnement à OpenShift Container Platform depuis AWS Marketplace afin d'obtenir un identifiant AMI pour votre région.
$ oc -n openshift-machine-api \ -o jsonpath='{.spec.template.spec.providerSpec.value.ami.id}{"\n"}' \ get machineset/<infrastructure_id>-<role>-<zone>
- 17 18
- Optionnel : Spécifiez des données de balises personnalisées pour votre cluster. Par exemple, vous pouvez ajouter une adresse électronique de contact pour l'administration en spécifiant une paire
name:value
deEmail:admin-email@example.com
.NoteDes balises personnalisées peuvent également être spécifiées lors de l'installation dans le fichier
install-config.yml
. Si le fichierinstall-config.yml
et le jeu de machines comprennent une balise avec les mêmes donnéesname
, la valeur de la balise du jeu de machines est prioritaire sur la valeur de la balise dans le fichierinstall-config.yml
. - 12
- Spécifiez la zone, par exemple,
us-east-1a
. - 13
- Précisez la région, par exemple
us-east-1
. - 15
- Spécifiez l'ID de l'infrastructure et la zone.
2.2.2. Création d'un ensemble de machines de calcul
En plus des ensembles de machines de calcul créés par le programme d'installation, vous pouvez créer vos propres ensembles pour gérer dynamiquement les ressources de calcul des machines pour les charges de travail spécifiques de votre choix.
Conditions préalables
- Déployer un cluster OpenShift Container Platform.
-
Installez le CLI OpenShift (
oc
). -
Connectez-vous à
oc
en tant qu'utilisateur disposant de l'autorisationcluster-admin
.
Procédure
Créez un nouveau fichier YAML contenant l'échantillon de ressources personnalisées (CR) de l'ensemble de machines de calcul et nommé
<file_name>.yaml
.Veillez à définir les valeurs des paramètres
<clusterID>
et<role>
.Facultatif : si vous n'êtes pas sûr de la valeur à définir pour un champ spécifique, vous pouvez vérifier un ensemble de machines de calcul existant dans votre cluster.
Pour répertorier les ensembles de machines de calcul de votre cluster, exécutez la commande suivante :
$ oc get machinesets -n openshift-machine-api
Exemple de sortie
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-worker-us-east-1a 1 1 1 1 55m agl030519-vplxk-worker-us-east-1b 1 1 1 1 55m agl030519-vplxk-worker-us-east-1c 1 1 1 1 55m agl030519-vplxk-worker-us-east-1d 0 0 55m agl030519-vplxk-worker-us-east-1e 0 0 55m agl030519-vplxk-worker-us-east-1f 0 0 55m
Pour afficher les valeurs d'une ressource personnalisée (CR) d'un ensemble de machines de calcul spécifique, exécutez la commande suivante :
$ oc get machineset <machineset_name> \ -n openshift-machine-api -o yaml
Exemple de sortie
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1 name: <infrastructure_id>-<role> 2 namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> template: metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: <role> machine.openshift.io/cluster-api-machine-type: <role> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> spec: providerSpec: 3 ...
- 1
- L'ID de l'infrastructure du cluster.
- 2
- Une étiquette de nœud par défaut.Note
Pour les clusters disposant d'une infrastructure fournie par l'utilisateur, un ensemble de machines de calcul ne peut créer que des machines de type
worker
etinfra
. - 3
- Les valeurs de la section
<providerSpec>
du CR de l'ensemble de machines de calcul sont spécifiques à la plate-forme. Pour plus d'informations sur les paramètres<providerSpec>
dans le CR, consultez l'exemple de configuration du CR de l'ensemble de machines de calcul pour votre fournisseur.
Créez un CR
MachineSet
en exécutant la commande suivante :oc create -f <nom_du_fichier>.yaml
- Si vous avez besoin d'ensembles de machines de calcul dans d'autres zones de disponibilité, répétez ce processus pour créer d'autres ensembles de machines de calcul.
Vérification
Affichez la liste des ensembles de machines de calcul en exécutant la commande suivante :
$ oc get machineset -n openshift-machine-api
Exemple de sortie
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-infra-us-east-1a 1 1 1 1 11m agl030519-vplxk-worker-us-east-1a 1 1 1 1 55m agl030519-vplxk-worker-us-east-1b 1 1 1 1 55m agl030519-vplxk-worker-us-east-1c 1 1 1 1 55m agl030519-vplxk-worker-us-east-1d 0 0 55m agl030519-vplxk-worker-us-east-1e 0 0 55m agl030519-vplxk-worker-us-east-1f 0 0 55m
Lorsque le nouveau jeu de machines de calcul est disponible, les valeurs
DESIRED
etCURRENT
correspondent. Si le jeu de machines de calcul n'est pas disponible, attendez quelques minutes et exécutez à nouveau la commande.
2.2.3. Options du jeu de machines pour le service de métadonnées de l'instance Amazon EC2
Vous pouvez utiliser des jeux de machines pour créer des machines qui utilisent une version spécifique du service de métadonnées d'instance Amazon EC2 (IMDS). Les jeux de machines peuvent créer des machines qui autorisent l'utilisation d'IMDSv1 et d'IMDSv2 ou des machines qui requièrent l'utilisation d'IMDSv2.
Pour modifier la configuration IMDS des machines existantes, modifiez le fichier YAML de l'ensemble de machines qui gère ces machines. Pour déployer de nouvelles machines de calcul avec votre configuration IMDS préférée, créez un fichier YAML d'ensemble de machine de calcul avec les valeurs appropriées.
Avant de configurer un jeu de machines pour créer des machines nécessitant IMDSv2, assurez-vous que toutes les charges de travail qui interagissent avec le service de métadonnées AWS prennent en charge IMDSv2.
2.2.3.1. Configuration de l'IMDS à l'aide de jeux de machines
Vous pouvez spécifier si l'utilisation d'IMDSv2 est requise en ajoutant ou en modifiant la valeur de metadataServiceOptions.authentication
dans le fichier YAML de l'ensemble de machines pour vos machines.
Procédure
Ajoutez ou modifiez les lignes suivantes sous le champ
providerSpec
:providerSpec: value: metadataServiceOptions: authentication: Required 1
- 1
- Pour exiger IMDSv2, définissez la valeur du paramètre sur
Required
. Pour autoriser l'utilisation de IMDSv1 et IMDSv2, définissez la valeur du paramètre surOptional
. Si aucune valeur n'est spécifiée, IMDSv1 et IMDSv2 sont tous deux autorisés.
2.2.4. Jeux de machines qui déploient des machines en tant qu'instances dédiées
Vous pouvez créer un ensemble de machines fonctionnant sur AWS qui déploie des machines en tant qu'instances dédiées. Les instances dédiées s'exécutent dans un nuage privé virtuel (VPC) sur du matériel dédié à un seul client. Ces instances Amazon EC2 sont physiquement isolées au niveau du matériel hôte. L'isolement des instances dédiées se produit même si les instances appartiennent à différents comptes AWS liés à un seul compte payeur. Toutefois, d'autres instances non dédiées peuvent partager le matériel avec les instances dédiées si elles appartiennent au même compte AWS.
Les instances avec une location publique ou dédiée sont prises en charge par l'API Machine. Les instances en mode public s'exécutent sur du matériel partagé. La location publique est la location par défaut. Les instances avec une location dédiée s'exécutent sur du matériel à locataire unique.
2.2.4.1. Création d'instances dédiées à l'aide d'ensembles de machines
Vous pouvez exécuter une machine qui est soutenue par une Instance Dédiée en utilisant l'intégration API Machine. Définissez le champ tenancy
dans votre fichier YAML machine set pour lancer une Dedicated Instance sur AWS.
Procédure
Spécifiez une location dédiée dans le champ
providerSpec
:providerSpec: placement: tenancy: dedicated
2.2.5. Jeux de machines qui déploient des machines en tant qu'instances Spot
Vous pouvez réaliser des économies en créant un ensemble de machines de calcul fonctionnant sur AWS qui déploie des machines en tant qu'instances Spot non garanties. Les instances Spot utilisent la capacité AWS EC2 inutilisée et sont moins chères que les instances à la demande. Vous pouvez utiliser les instances Spot pour des charges de travail qui peuvent tolérer des interruptions, telles que les charges de travail par lots ou sans état, évolutives horizontalement.
AWS EC2 peut mettre fin à une instance Spot à tout moment. AWS donne un avertissement de deux minutes à l'utilisateur lorsqu'une interruption se produit. OpenShift Container Platform commence à supprimer les charges de travail des instances concernées lorsque AWS émet l'avertissement de résiliation.
Des interruptions peuvent se produire lors de l'utilisation des Instances Spot pour les raisons suivantes :
- Le prix de l'instance dépasse votre prix maximum
- La demande d'instances Spot augmente
- L'offre d'Instances Spot diminue
Lorsqu'AWS met fin à une instance, un gestionnaire de fin s'exécutant sur le nœud Spot Instance supprime la ressource machine. Pour satisfaire la quantité de l'ensemble de machines de calcul replicas
, l'ensemble de machines de calcul crée une machine qui demande une instance Spot.
2.2.5.1. Création d'instances Spot en utilisant des ensembles de machines de calcul
Vous pouvez lancer une instance Spot sur AWS en ajoutant spotMarketOptions
à votre fichier YAML d'ensemble de machines de calcul.
Procédure
Ajoutez la ligne suivante sous le champ
providerSpec
:providerSpec: value: spotMarketOptions: {}
Vous pouvez éventuellement définir le champ
spotMarketOptions.maxPrice
pour limiter le coût de l'instance Spot. Par exemple, vous pouvez définirmaxPrice: '2.50'
.Si l'adresse
maxPrice
est définie, cette valeur est utilisée comme prix spot maximum horaire. Si elle n'est pas définie, le prix maximum est fixé par défaut au prix de l'instance à la demande.NoteIl est fortement recommandé d'utiliser le prix On-Demand par défaut comme valeur
maxPrice
et de ne pas définir le prix maximum pour les Instances Spot.
2.2.6. Ajouter un nœud GPU à un cluster OpenShift Container Platform existant
Vous pouvez copier et modifier la configuration d'un ensemble de machines de calcul par défaut pour créer un ensemble de machines et des machines compatibles avec le GPU pour le fournisseur de cloud AWS EC2.
Le tableau suivant énumère les types d'instance validés :
Instance type | Accélérateur GPU NVIDIA | Nombre maximal de GPU | L'architecture |
---|---|---|---|
| A100 | 8 | x86 |
| T4 | 1 | x86 |
Procédure
Affichez les nœuds, les machines et les jeux de machines existants en exécutant la commande suivante. Notez que chaque nœud est une instance d'une définition de machine avec une région AWS et un rôle OpenShift Container Platform spécifiques.
$ oc get nodes
Exemple de sortie
NAME STATUS ROLES AGE VERSION ip-10-0-52-50.us-east-2.compute.internal Ready worker 3d17h v1.25.4+86bd4ff ip-10-0-58-24.us-east-2.compute.internal Ready control-plane,master 3d17h v1.25.4+86bd4ff ip-10-0-68-148.us-east-2.compute.internal Ready worker 3d17h v1.25.4+86bd4ff ip-10-0-68-68.us-east-2.compute.internal Ready control-plane,master 3d17h v1.25.4+86bd4ff ip-10-0-72-170.us-east-2.compute.internal Ready control-plane,master 3d17h v1.25.4+86bd4ff ip-10-0-74-50.us-east-2.compute.internal Ready worker 3d17h v1.25.4+86bd4ff
Affichez les machines et les ensembles de machines qui existent dans l'espace de noms
openshift-machine-api
en exécutant la commande suivante. Chaque ensemble de machines de calcul est associé à une zone de disponibilité différente dans la région AWS. Le programme d'installation équilibre automatiquement la charge des machines de calcul entre les zones de disponibilité.$ oc get machinesets -n openshift-machine-api
Exemple de sortie
NAME DESIRED CURRENT READY AVAILABLE AGE preserve-dsoc12r4-ktjfc-worker-us-east-2a 1 1 1 1 3d11h preserve-dsoc12r4-ktjfc-worker-us-east-2b 2 2 2 2 3d11h
Affichez les machines qui existent dans l'espace de noms
openshift-machine-api
en exécutant la commande suivante. Pour l'instant, il n'y a qu'une machine de calcul par ensemble de machines, bien qu'un ensemble de machines de calcul puisse être mis à l'échelle pour ajouter un nœud dans une région et une zone particulières.$ oc get machines -n openshift-machine-api | grep worker
Exemple de sortie
preserve-dsoc12r4-ktjfc-worker-us-east-2a-dts8r Running m5.xlarge us-east-2 us-east-2a 3d11h preserve-dsoc12r4-ktjfc-worker-us-east-2b-dkv7w Running m5.xlarge us-east-2 us-east-2b 3d11h preserve-dsoc12r4-ktjfc-worker-us-east-2b-k58cw Running m5.xlarge us-east-2 us-east-2b 3d11h
Faites une copie de l'une des définitions de compute
MachineSet
existantes et générez le résultat dans un fichier JSON en exécutant la commande suivante. Ce fichier servira de base à la définition de l'ensemble de machines de calcul compatibles avec le GPU.$ oc get machineset preserve-dsoc12r4-ktjfc-worker-us-east-2a -n openshift-machine-api -o json > <output_file.json>
Modifiez le fichier JSON et apportez les modifications suivantes à la nouvelle définition
MachineSet
:-
Remplacez
worker
pargpu
. Ce sera le nom du nouveau jeu de machines. Changez le type d'instance de la nouvelle définition
MachineSet
eng4dn
, qui inclut un GPU NVIDIA Tesla T4. Pour en savoir plus sur les types d'instance AWSg4dn
, voir Calcul accéléré.$ jq .spec.template.spec.providerSpec.value.instanceType preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json "g4dn.xlarge"
Le fichier
<output_file.json>
est enregistré sous le nom depreserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json
.
-
Remplacez
Mettez à jour les champs suivants dans
preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json
:-
.metadata.name
à un nom contenantgpu
. -
.spec.selector.matchLabels["machine.openshift.io/cluster-api-machineset"]
pour correspondre au nouveau site.metadata.name
. -
.spec.template.metadata.labels["machine.openshift.io/cluster-api-machineset"]
pour correspondre au nouveau site.metadata.name
. -
.spec.template.spec.providerSpec.value.instanceType
à l'adresseg4dn.xlarge
.
-
Pour vérifier vos modifications, exécutez la commande suivante :
diff
de la définition originale du calcul et de la nouvelle définition du nœud compatible avec le GPU :$ oc -n openshift-machine-api get preserve-dsoc12r4-ktjfc-worker-us-east-2a -o json | diff preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json -
Exemple de sortie
10c10 < "name": "preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a", --- > "name": "preserve-dsoc12r4-ktjfc-worker-us-east-2a", 21c21 < "machine.openshift.io/cluster-api-machineset": "preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a" --- > "machine.openshift.io/cluster-api-machineset": "preserve-dsoc12r4-ktjfc-worker-us-east-2a" 31c31 < "machine.openshift.io/cluster-api-machineset": "preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a" --- > "machine.openshift.io/cluster-api-machineset": "preserve-dsoc12r4-ktjfc-worker-us-east-2a" 60c60 < "instanceType": "g4dn.xlarge", --- > "instanceType": "m5.xlarge",
Créez l'ensemble de machines de calcul compatibles avec le GPU à partir de la définition en exécutant la commande suivante :
$ oc create -f preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json
Exemple de sortie
machineset.machine.openshift.io/preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a created
Vérification
Affichez le jeu de machines que vous avez créé en exécutant la commande suivante :
$ oc -n openshift-machine-api get machinesets | grep gpu
Le nombre de répliques de MachineSet étant fixé à
1
, un nouvel objetMachine
est créé automatiquement.Exemple de sortie
preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a 1 1 1 1 4m21s
Affichez l'objet
Machine
créé par le jeu de machines en exécutant la commande suivante :$ oc -n openshift-machine-api get machines | grep gpu
Exemple de sortie
preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a running g4dn.xlarge us-east-2 us-east-2a 4m36s
Notez qu'il n'est pas nécessaire de spécifier un espace de noms pour le nœud. La définition du nœud est limitée à la grappe.
2.2.7. Déploiement de l'opérateur de découverte de fonctionnalités des nœuds
Une fois le nœud compatible avec le GPU créé, vous devez le découvrir afin de pouvoir le planifier. Pour ce faire, installez l'opérateur NFD (Node Feature Discovery). L'opérateur NFD identifie les caractéristiques des dispositifs matériels dans les nœuds. Il résout le problème général de l'identification et du catalogage des ressources matérielles dans les nœuds d'infrastructure afin qu'elles puissent être mises à la disposition d'OpenShift Container Platform.
Procédure
- Installez l'opérateur de découverte de fonctionnalités Node à partir de OperatorHub dans la console OpenShift Container Platform.
-
Après avoir installé l'opérateur NFD dans OperatorHub, sélectionnez Node Feature Discovery dans la liste des opérateurs installés et sélectionnez Create instance. Ceci installe les pods
nfd-master
etnfd-worker
, un podnfd-worker
pour chaque nœud de calcul, dans l'espace de nomsopenshift-nfd
. Vérifiez que l'opérateur est installé et fonctionne en exécutant la commande suivante :
$ oc get pods -n openshift-nfd
Exemple de sortie
NAME READY STATUS RESTARTS AGE nfd-controller-manager-8646fcbb65-x5qgk 2/2 Running 7 (8h ago) 1d
- Recherchez l'Oerator installé dans la console et sélectionnez Create Node Feature Discovery.
-
Sélectionnez Create pour créer une ressource personnalisée NFD. Cela crée des pods NFD dans l'espace de noms
openshift-nfd
qui interrogent les nœuds OpenShift Container Platform à la recherche de ressources matérielles et les cataloguent.
Vérification
Après une construction réussie, vérifiez qu'un pod NFD fonctionne sur chaque nœud en exécutant la commande suivante :
$ oc get pods -n openshift-nfd
Exemple de sortie
NAME READY STATUS RESTARTS AGE nfd-controller-manager-8646fcbb65-x5qgk 2/2 Running 7 (8h ago) 12d nfd-master-769656c4cb-w9vrv 1/1 Running 0 12d nfd-worker-qjxb2 1/1 Running 3 (3d14h ago) 12d nfd-worker-xtz9b 1/1 Running 5 (3d14h ago) 12d
L'opérateur NFD utilise les identifiants PCI des fournisseurs pour identifier le matériel dans un nœud. NVIDIA utilise l'ID PCI
10de
.Affichez le GPU NVIDIA découvert par l'opérateur NFD en exécutant la commande suivante :
$ oc describe node ip-10-0-132-138.us-east-2.compute.internal | egrep 'Roles|pci'
Exemple de sortie
Roles: worker feature.node.kubernetes.io/pci-1013.present=true feature.node.kubernetes.io/pci-10de.present=true feature.node.kubernetes.io/pci-1d0f.present=true
10de
apparaît dans la liste des caractéristiques du nœud compatible avec le GPU. Cela signifie que l'opérateur NFD a correctement identifié le nœud de l'ensemble de machines équipé d'un GPU.