2.3. Création d'un ensemble de machines de calcul sur Azure
Vous pouvez créer un ensemble de machines de calcul différent pour répondre à un besoin spécifique dans votre cluster OpenShift Container Platform sur Microsoft Azure. 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.3.1. Exemple de YAML pour une ressource personnalisée d'un ensemble de machines de calcul sur Azure
Cet exemple YAML définit un ensemble de machines de calcul qui fonctionne dans la zone 1
Microsoft Azure d'une région 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 machine.openshift.io/cluster-api-machine-role: <role> 2 machine.openshift.io/cluster-api-machine-type: <role> 3 name: <infrastructure_id>-<role>-<region> 4 namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<region> 6 template: metadata: creationTimestamp: null labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 7 machine.openshift.io/cluster-api-machine-role: <role> 8 machine.openshift.io/cluster-api-machine-type: <role> 9 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<region> 10 spec: metadata: creationTimestamp: null labels: machine.openshift.io/cluster-api-machineset: <machineset_name> 11 node-role.kubernetes.io/<role>: "" 12 providerSpec: value: apiVersion: azureproviderconfig.openshift.io/v1beta1 credentialsSecret: name: azure-cloud-credentials namespace: openshift-machine-api image: 13 offer: "" publisher: "" resourceID: /resourceGroups/<infrastructure_id>-rg/providers/Microsoft.Compute/images/<infrastructure_id> 14 sku: "" version: "" internalLoadBalancer: "" kind: AzureMachineProviderSpec location: <region> 15 managedIdentity: <infrastructure_id>-identity 16 metadata: creationTimestamp: null natRule: null networkResourceGroup: "" osDisk: diskSizeGB: 128 managedDisk: storageAccountType: Premium_LRS osType: Linux publicIP: false publicLoadBalancer: "" resourceGroup: <infrastructure_id>-rg 17 sshPrivateKey: "" sshPublicKey: "" tags: - name: <custom_tag_name> 18 value: <custom_tag_value> 19 subnet: <infrastructure_id>-<role>-subnet 20 21 userDataSecret: name: worker-user-data 22 vmSize: Standard_D4s_v3 vnet: <infrastructure_id>-vnet 23 zone: "1" 24
- 1 5 7 16 17 20 23
- 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
Vous pouvez obtenir le sous-réseau en exécutant la commande suivante :
$ oc -n openshift-machine-api \ -o jsonpath='{.spec.template.spec.providerSpec.value.subnet}{"\n"}' \ get machineset/<infrastructure_id>-worker-centralus1
Vous pouvez obtenir le vnet en exécutant la commande suivante :
$ oc -n openshift-machine-api \ -o jsonpath='{.spec.template.spec.providerSpec.value.vnet}{"\n"}' \ get machineset/<infrastructure_id>-worker-centralus1
- 2 3 8 9 12 21 22
- Spécifiez l'étiquette de nœud à ajouter.
- 4 6 10
- Spécifiez l'ID de l'infrastructure, l'étiquette du nœud et la région.
- 11
- Facultatif : Spécifiez le nom de l'ensemble de machines de calcul pour activer l'utilisation des ensembles de disponibilité. Ce paramètre ne s'applique qu'aux nouvelles machines de calcul.
- 13
- Spécifiez les détails de l'image pour votre ensemble de machines de calcul. Si vous souhaitez utiliser une image Azure Marketplace, voir "Sélection d'une image Azure Marketplace".
- 14
- Spécifiez une image compatible avec votre type d'instance. Les images Hyper-V de génération V2 créées par le programme d'installation ont un suffixe
-gen2
, tandis que les images V1 portent le même nom sans suffixe. - 15
- Spécifiez la région où placer les machines.
- 24
- Indiquez la zone de votre région où placer les machines. Assurez-vous que votre région prend en charge la zone que vous spécifiez.
- 18 19
- Optionnel : Spécifiez des balises personnalisées dans votre jeu de machines. Indiquez le nom de la balise dans le champ
<custom_tag_name>
et la valeur de la balise correspondante dans le champ<custom_tag_value>
.
2.3.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
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.3.3. Selecting an Azure Marketplace image
Vous pouvez créer un jeu de machines fonctionnant sur Azure qui déploie des machines utilisant l'offre Azure Marketplace. Pour utiliser cette offre, vous devez d'abord obtenir l'image Azure Marketplace. Lorsque vous obtenez votre image, tenez compte des éléments suivants :
-
While the images are the same, the Azure Marketplace publisher is different depending on your region. If you are located in North America, specify
redhat
as the publisher. If you are located in EMEA, specifyredhat-limited
as the publisher. -
The offer includes a
rh-ocp-worker
SKU and arh-ocp-worker-gen1
SKU. Therh-ocp-worker
SKU represents a Hyper-V generation version 2 VM image. The default instance types used in OpenShift Container Platform are version 2 compatible. If you plan to use an instance type that is only version 1 compatible, use the image associated with therh-ocp-worker-gen1
SKU. Therh-ocp-worker-gen1
SKU represents a Hyper-V version 1 VM image.
Installing images with the Azure marketplace is not supported on clusters with arm64
instances.
Conditions préalables
-
You have installed the Azure CLI client
(az)
. - Your Azure account is entitled for the offer and you have logged into this account with the Azure CLI client.
Procédure
Display all of the available OpenShift Container Platform images by running one of the following commands:
North America:
$ az vm image list --all --offer rh-ocp-worker --publisher redhat -o table
Exemple de sortie
Offer Publisher Sku Urn Version ------------- -------------- ------------------ -------------------------------------------------------------- -------------- rh-ocp-worker RedHat rh-ocp-worker RedHat:rh-ocp-worker:rh-ocpworker:4.8.2021122100 4.8.2021122100 rh-ocp-worker RedHat rh-ocp-worker-gen1 RedHat:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100 4.8.2021122100
EMEA:
$ az vm image list --all --offer rh-ocp-worker --publisher redhat-limited -o table
Exemple de sortie
Offer Publisher Sku Urn Version ------------- -------------- ------------------ -------------------------------------------------------------- -------------- rh-ocp-worker redhat-limited rh-ocp-worker redhat-limited:rh-ocp-worker:rh-ocp-worker:4.8.2021122100 4.8.2021122100 rh-ocp-worker redhat-limited rh-ocp-worker-gen1 redhat-limited:rh-ocp-worker:rh-ocp-worker-gen1:4.8.2021122100 4.8.2021122100
NoteRegardless of the version of OpenShift Container Platform that you install, the correct version of the Azure Marketplace image to use is 4.8. If required, your VMs are automatically upgraded as part of the installation process.
Inspect the image for your offer by running one of the following commands:
North America:
$ az vm image show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
EMEA:
$ az vm image show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
Review the terms of the offer by running one of the following commands:
North America:
$ az vm image terms show --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
EMEA:
$ az vm image terms show --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
Accept the terms of the offering by running one of the following commands:
North America:
$ az vm image terms accept --urn redhat:rh-ocp-worker:rh-ocp-worker:<version>
EMEA:
$ az vm image terms accept --urn redhat-limited:rh-ocp-worker:rh-ocp-worker:<version>
-
Enregistrez les détails de l'image de votre offre, en particulier les valeurs de
publisher
,offer
,sku
etversion
. Ajoutez les paramètres suivants à la section
providerSpec
de votre fichier YAML de configuration de la machine en utilisant les détails de l'image pour votre offre :Exemple de valeurs d'image
providerSpec
pour les machines Azure MarketplaceproviderSpec: value: image: offer: rh-ocp-worker publisher: redhat resourceID: "" sku: rh-ocp-worker type: MarketplaceWithPlan version: 4.8.2021122100
2.3.4. Activation des diagnostics de démarrage Azure
Vous pouvez activer les diagnostics de démarrage sur les machines Azure créées par votre jeu de machines.
Conditions préalables
- Disposer d'un cluster Microsoft Azure existant.
Procédure
Ajoutez la configuration
diagnostics
applicable à votre type de stockage au champproviderSpec
de votre fichier YAML machine set :Pour un compte de stockage géré par Azure :
providerSpec: diagnostics: boot: storageAccountType: AzureManaged 1
- 1
- Spécifie un compte de stockage Azure Managed.
Pour un compte de stockage Azure non géré :
providerSpec: diagnostics: boot: storageAccountType: CustomerManaged 1 customerManaged: storageAccountURI: https://<storage-account>.blob.core.windows.net 2
NoteSeul le service de données Azure Blob Storage est pris en charge.
Vérification
- Sur le portail Microsoft Azure, consultez la page Boot diagnostics pour une machine déployée par le jeu de machines et vérifiez que vous pouvez voir les journaux de série pour la machine.
2.3.5. Jeux de machines qui déploient des machines en tant que VM Spot
Vous pouvez réaliser des économies en créant un ensemble de machines de calcul fonctionnant sur Azure qui déploie des machines en tant que VM Spot non garanties. Les VM Spot utilisent la capacité inutilisée d'Azure et sont moins coûteuses que les VM standard. Vous pouvez utiliser les Spot VM pour les charges de travail qui peuvent tolérer des interruptions, telles que les charges de travail par lots ou sans état, évolutives horizontalement.
Azure peut mettre fin à une VM Spot à tout moment. Azure donne un avertissement de 30 secondes à l'utilisateur lorsqu'une interruption se produit. OpenShift Container Platform commence à supprimer les charges de travail des instances concernées lorsque Azure émet l'avertissement de résiliation.
Des interruptions peuvent se produire lors de l'utilisation des VM Spot pour les raisons suivantes :
- Le prix de l'instance dépasse votre prix maximum
- L'offre de machines virtuelles Spot diminue
- Azure a besoin d'un retour de capacité
Lorsqu'Azure met fin à une instance, un gestionnaire de fin s'exécutant sur le nœud Spot VM 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 VM Spot.
2.3.5.1. Création de machines virtuelles Spot à l'aide d'ensembles de machines de calcul
Vous pouvez lancer une VM Spot sur Azure en ajoutant spotVMOptions
à votre fichier YAML d'ensemble de machine de calcul.
Procédure
Ajoutez la ligne suivante sous le champ
providerSpec
:providerSpec: value: spotVMOptions: {}
Vous pouvez éventuellement définir le champ
spotVMOptions.maxPrice
pour limiter le coût de la VM Spot. Par exemple, vous pouvez définirmaxPrice: '0.98765'
. Si le champmaxPrice
est défini, cette valeur est utilisée comme prix maximum horaire de la VM Spot. S'il n'est pas défini, le prix maximum est fixé par défaut à-1
et les frais sont portés au prix standard de la VM.Azure plafonne les prix des VM Spot au prix standard. Azure n'expulsera pas une instance en raison de la tarification si l'instance est configurée avec le prix par défaut
maxPrice
. Cependant, une instance peut toujours être expulsée en raison de restrictions de capacité.
Il est fortement recommandé d'utiliser le prix standard par défaut des VM comme valeur maxPrice
et de ne pas fixer le prix maximum pour les VM Spot.
2.3.6. Jeux de machines qui déploient des machines sur des disques d'OS éphémères
Vous pouvez créer un ensemble de machines de calcul fonctionnant sur Azure qui déploie des machines sur des disques OS éphémères. Les disques OS éphémères utilisent la capacité locale des VM plutôt que le stockage Azure distant. Cette configuration n'entraîne donc aucun coût supplémentaire et offre une latence réduite pour la lecture, l'écriture et la réimagerie.
Ressources complémentaires
- Pour plus d'informations, consultez la documentation Microsoft Azure sur les disques d'exploitation éphémères pour les machines virtuelles Azure.
2.3.6.1. Création de machines sur des disques OS éphémères à l'aide d'ensembles de machines de calcul
Vous pouvez lancer des machines sur des disques OS éphémères sur Azure en modifiant votre fichier YAML d'ensemble de machine de calcul.
Conditions préalables
- Disposer d'un cluster Microsoft Azure existant.
Procédure
Modifiez la ressource personnalisée (CR) en exécutant la commande suivante :
oc edit machineset <machine-set-name> $ oc edit machineset <machine-set-name>
où
<machine-set-name>
est l'ensemble de machines de calcul que vous souhaitez provisionner sur des disques OS éphémères.Ajoutez ce qui suit au champ
providerSpec
:providerSpec: value: ... osDisk: ... diskSettings: 1 ephemeralStorageLocation: Local 2 cachingType: ReadOnly 3 managedDisk: storageAccountType: Standard_LRS 4 ...
ImportantL'implémentation de la prise en charge des disques OS éphémères dans OpenShift Container Platform ne prend en charge que le type de placement
CacheDisk
. Ne modifiez pas le paramètre de configurationplacement
.Créez un ensemble de machines de calcul en utilisant la configuration mise à jour :
oc create -f <machine-set-config>.yaml
Vérification
-
Sur le portail Microsoft Azure, consultez la page Overview pour une machine déployée par l'ensemble de machines de calcul et vérifiez que le champ
Ephemeral OS disk
est défini surOS cache placement
.
2.3.7. Jeux de machines qui déploient des machines avec des disques ultra comme disques de données
Vous pouvez créer un jeu de machines fonctionnant sur Azure qui déploie des machines avec des ultra-disques. Les disques ultra sont des systèmes de stockage haute performance destinés à être utilisés avec les charges de travail les plus exigeantes.
Vous pouvez également créer une revendication de volume persistant (PVC) qui se lie dynamiquement à une classe de stockage soutenue par des disques Azure ultra et les monte sur des pods.
Les disques de données ne permettent pas de spécifier le débit ou l'IOPS du disque. Vous pouvez configurer ces propriétés en utilisant des PVC.
Ressources complémentaires
2.3.7.1. Création de machines avec ultra-disques à l'aide de jeux de machines
Vous pouvez déployer des machines avec des ultra-disques sur Azure en modifiant votre fichier YAML de configuration des machines.
Conditions préalables
- Disposer d'un cluster Microsoft Azure existant.
Procédure
Créez un secret personnalisé dans l'espace de noms
openshift-machine-api
en utilisant le secret de donnéesworker
en exécutant la commande suivante :$ oc -n openshift-machine-api \ get secret <role>-user-data \ 1 --template='{{index .data.userData | base64decode}}' | jq > userData.txt 2
Dans un éditeur de texte, ouvrez le fichier
userData.txt
et localisez le caractère final}
dans le fichier.-
Sur la ligne immédiatement précédente, ajouter un
,
. Créez une nouvelle ligne après le site
,
et ajoutez les détails de configuration suivants :"storage": { "disks": [ 1 { "device": "/dev/disk/azure/scsi1/lun0", 2 "partitions": [ 3 { "label": "lun0p1", 4 "sizeMiB": 1024, 5 "startMiB": 0 } ] } ], "filesystems": [ 6 { "device": "/dev/disk/by-partlabel/lun0p1", "format": "xfs", "path": "/var/lib/lun0p1" } ] }, "systemd": { "units": [ 7 { "contents": "[Unit]\nBefore=local-fs.target\n[Mount]\nWhere=/var/lib/lun0p1\nWhat=/dev/disk/by-partlabel/lun0p1\nOptions=defaults,pquota\n[Install]\nWantedBy=local-fs.target\n", 8 "enabled": true, "name": "var-lib-lun0p1.mount" } ] }
- 1
- Les détails de configuration du disque que vous souhaitez attacher à un nœud en tant qu'ultra disque.
- 2
- Indiquez la valeur
lun
définie dans la strophedataDisks
du jeu de machines que vous utilisez. Par exemple, si le jeu de machines contientlun: 0
, indiquezlun0
. Vous pouvez initialiser plusieurs disques de données en spécifiant plusieurs entrées"disks"
dans ce fichier de configuration. Si vous spécifiez plusieurs entrées"disks"
, assurez-vous que la valeurlun
de chaque entrée correspond à la valeur du jeu de machines. - 3
- Les détails de la configuration d'une nouvelle partition sur le disque.
- 4
- Indiquez un nom pour la partition. Il peut être utile d'utiliser des noms hiérarchiques, tels que
lun0p1
pour la première partition delun0
. - 5
- Indiquez la taille totale en Mo de la partition.
- 6
- Spécifiez le système de fichiers à utiliser lors du formatage d'une partition. Utilisez l'étiquette de partition pour spécifier la partition.
- 7
- Indiquez une unité
systemd
pour monter la partition au démarrage. Utilisez l'étiquette de partition pour spécifier la partition. Vous pouvez créer plusieurs partitions en spécifiant plusieurs entrées"partitions"
dans ce fichier de configuration. Si vous spécifiez plusieurs entrées"partitions"
, vous devez spécifier une unitésystemd
pour chacune d'entre elles. - 8
- Pour
Where
, spécifiez la valeur destorage.filesystems.path
. PourWhat
, spécifiez la valeur destorage.filesystems.device
.
-
Sur la ligne immédiatement précédente, ajouter un
Extrayez la valeur du modèle de désactivation dans un fichier appelé
disableTemplating.txt
en exécutant la commande suivante :$ oc -n openshift-machine-api get secret <role>-user-data \ 1 --template='{{index .data.disableTemplating | base64decode}}' | jq > disableTemplating.txt
- 1
- Remplacer
<role>
parworker
.
Combinez les fichiers
userData.txt
etdisableTemplating.txt
pour créer un fichier de données secrètes en exécutant la commande suivante :$ oc -n openshift-machine-api create secret generic <role>-user-data-x5 \ 1 --from-file=userData=userData.txt \ --from-file=disableTemplating=disableTemplating.txt
- 1
- Pour
<role>-user-data-x5
, indiquez le nom du secret. Remplacez<role>
parworker
.
Copiez une ressource personnalisée (CR) Azure
MachineSet
existante et modifiez-la en exécutant la commande suivante :oc edit machineset <machine-set-name> $ oc edit machineset <machine-set-name>
où
<machine-set-name>
est l'ensemble de machines que vous voulez provisionner avec des ultra-disques.Ajouter les lignes suivantes aux endroits indiqués :
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet spec: template: spec: metadata: labels: disk: ultrassd 1 providerSpec: value: ultraSSDCapability: Enabled 2 dataDisks: 3 - nameSuffix: ultrassd lun: 0 diskSizeGB: 4 deletionPolicy: Delete cachingType: None managedDisk: storageAccountType: UltraSSD_LRS userDataSecret: name: <role>-user-data-x5 4
- 1
- Indiquez une étiquette à utiliser pour sélectionner un nœud créé par ce jeu de machines. Cette procédure utilise
disk.ultrassd
pour cette valeur. - 2 3
- Ces lignes permettent d'utiliser des disques ultra. Pour
dataDisks
, inclure la strophe entière. - 4
- Spécifiez le secret des données de l'utilisateur créé précédemment. Remplacez
<role>
parworker
.
Créez un jeu de machines à l'aide de la configuration mise à jour en exécutant la commande suivante :
oc create -f <machine-set-name>.yaml
Vérification
Validez la création des machines en exécutant la commande suivante :
$ oc get machines
Les machines doivent être dans l'état
Running
.Pour une machine en cours d'exécution et à laquelle un nœud est attaché, validez la partition en exécutant la commande suivante :
$ oc debug node/<node-name> -- chroot /host lsblk
Dans cette commande,
oc debug node/<node-name>
démarre un shell de débogage sur le nœud<node-name>
et transmet une commande à--
. La commande passéechroot /host
permet d'accéder aux binaires du système d'exploitation hôte sous-jacent, etlsblk
montre les périphériques de bloc attachés à la machine du système d'exploitation hôte.
Prochaines étapes
Pour utiliser un ultra disque à partir d'un pod, créez une charge de travail qui utilise le point de montage. Créez un fichier YAML similaire à l'exemple suivant :
apiVersion: v1 kind: Pod metadata: name: ssd-benchmark1 spec: containers: - name: ssd-benchmark1 image: nginx ports: - containerPort: 80 name: "http-server" volumeMounts: - name: lun0p1 mountPath: "/tmp" volumes: - name: lun0p1 hostPath: path: /var/lib/lun0p1 type: DirectoryOrCreate nodeSelector: disktype: ultrassd
2.3.7.2. Ressources de dépannage pour les ensembles de machines qui activent les ultra-disques
Utilisez les informations de cette section pour comprendre et résoudre les problèmes que vous pourriez rencontrer.
2.3.7.2.1. Configuration incorrecte de l'ultra disque
Si une configuration incorrecte du paramètre ultraSSDCapability
est spécifiée dans le jeu de machines, le provisionnement de la machine échoue.
Par exemple, si le paramètre ultraSSDCapability
est défini sur Disabled
, mais qu'un disque ultra est spécifié dans le paramètre dataDisks
, le message d'erreur suivant apparaît :
StorageAccountType UltraSSD_LRS can be used only when additionalCapabilities.ultraSSDEnabled is set.
- Pour résoudre ce problème, vérifiez que la configuration de votre jeu de machines est correcte.
2.3.7.2.2. Paramètres de disque non pris en charge
Si une région, une zone de disponibilité ou une taille d'instance qui n'est pas compatible avec les disques ultra est spécifiée dans le jeu de machines, le provisionnement de la machine échoue. Vérifiez les journaux pour le message d'erreur suivant :
failed to create vm <machine_name> : failure sending request for machine <machine_name> : cannot create vm : compute.VirtualMachinesClient#CreateOrUpdate : Échec de l'envoi de la requête : StatusCode=400 -- Erreur d'origine : Code="BadRequest" Message="Le type de compte de stockage 'UltraSSD_LRS' n'est pas pris en charge <more_information_about_why>."
- Pour résoudre ce problème, vérifiez que vous utilisez cette fonctionnalité dans un environnement pris en charge et que la configuration de votre jeu de machines est correcte.
2.3.7.2.3. Impossible de supprimer des disques
Si la suppression des ultra-disques en tant que disques de données ne fonctionne pas comme prévu, les machines sont supprimées et les disques de données sont orphelins. Vous devez supprimer les disques orphelins manuellement si vous le souhaitez.
2.3.8. Activation des clés de chiffrement gérées par le client pour un ensemble de machines
Vous pouvez fournir une clé de chiffrement à Azure pour chiffrer les données sur les disques gérés au repos. Vous pouvez activer le chiffrement côté serveur avec des clés gérées par le client en utilisant l'API Machine.
Un Azure Key Vault, un ensemble de chiffrement de disque et une clé de chiffrement sont nécessaires pour utiliser une clé gérée par le client. Le jeu de chiffrement de disque doit se trouver dans un groupe de ressources auquel le Cloud Credential Operator (CCO) a accordé des autorisations. Si ce n'est pas le cas, un rôle de lecteur supplémentaire doit être accordé à l'ensemble de chiffrement de disque.
Conditions préalables
Procédure
Configurez le cryptage du disque dans le champ
providerSpec
de votre fichier YAML de configuration de la machine. Par exemple :providerSpec: value: osDisk: diskSizeGB: 128 managedDisk: diskEncryptionSet: id: /subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.Compute/diskEncryptionSets/<disk_encryption_set_name> storageAccountType: Premium_LRS
Ressources complémentaires
2.3.9. Mise en réseau accélérée pour les machines virtuelles Microsoft Azure
Accelerated Networking utilise la virtualisation d'E/S à racine unique (SR-IOV) pour fournir aux VM Microsoft Azure un chemin plus direct vers le commutateur. Les performances du réseau s'en trouvent améliorées. Cette fonctionnalité peut être activée pendant ou après l'installation.
2.3.9.1. Limitations
Tenez compte des limitations suivantes lorsque vous décidez d'utiliser ou non la mise en réseau accélérée :
- La mise en réseau accélérée n'est prise en charge que sur les clusters où l'API Machine est opérationnelle.
Bien que la configuration minimale requise pour un nœud de travail Azure soit de deux vCPU, Accelerated Networking nécessite une taille de VM Azure comprenant au moins quatre vCPU. Pour répondre à cette exigence, vous pouvez modifier la valeur de
vmSize
dans votre jeu de machines. Pour plus d'informations sur les tailles de VM Azure, consultez la documentation Microsoft Azure.
- Lorsque cette fonctionnalité est activée sur un cluster Azure existant, seuls les nœuds nouvellement provisionnés sont concernés. Les nœuds en cours d'exécution ne sont pas rapprochés. Pour activer la fonctionnalité sur tous les nœuds, vous devez remplacer chaque machine existante. Cette opération peut être effectuée pour chaque machine individuellement, ou en réduisant le nombre de réplicas à zéro, puis en l'augmentant jusqu'au nombre de réplicas souhaité.
2.3.10. 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 Azure.
Le tableau suivant énumère les types d'instance validés :
vmSize | Accélérateur GPU NVIDIA | Nombre maximal de GPU | L'architecture |
---|---|---|---|
| V100 | 4 | x86 |
| T4 | 1 | x86 |
| A100 | 8 | x86 |
Par défaut, les abonnements Azure n'ont pas de quota pour les types d'instances Azure avec GPU. Les clients doivent demander une augmentation de quota pour les familles d'instances Azure listées ci-dessus.
Procédure
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 Azure. Le programme d'installation équilibre automatiquement la charge des machines de calcul entre les zones de disponibilité.$ oc get machineset -n openshift-machine-api
Exemple de sortie
NAME DESIRED CURRENT READY AVAILABLE AGE myclustername-worker-centralus1 1 1 1 1 6h9m myclustername-worker-centralus2 1 1 1 1 6h9m myclustername-worker-centralus3 1 1 1 1 6h9m
Faites une copie de l'une des définitions de compute
MachineSet
existantes et produisez le résultat dans un fichier YAML 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 -n openshift-machine-api myclustername-worker-centralus1 -o yaml > machineset-azure.yaml
Voir le contenu du jeu de machines :
$ cat machineset-azure.yaml
Exemple de fichier
machineset-azure.yaml
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: annotations: machine.openshift.io/GPU: "0" machine.openshift.io/memoryMb: "16384" machine.openshift.io/vCPU: "4" creationTimestamp: "2023-02-06T14:08:19Z" generation: 1 labels: machine.openshift.io/cluster-api-cluster: myclustername machine.openshift.io/cluster-api-machine-role: worker machine.openshift.io/cluster-api-machine-type: worker name: myclustername-worker-centralus1 namespace: openshift-machine-api resourceVersion: "23601" uid: acd56e0c-7612-473a-ae37-8704f34b80de spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: myclustername machine.openshift.io/cluster-api-machineset: myclustername-worker-centralus1 template: metadata: labels: machine.openshift.io/cluster-api-cluster: myclustername machine.openshift.io/cluster-api-machine-role: worker machine.openshift.io/cluster-api-machine-type: worker machine.openshift.io/cluster-api-machineset: myclustername-worker-centralus1 spec: lifecycleHooks: {} metadata: {} providerSpec: value: acceleratedNetworking: true apiVersion: machine.openshift.io/v1beta1 credentialsSecret: name: azure-cloud-credentials namespace: openshift-machine-api diagnostics: {} image: offer: "" publisher: "" resourceID: /resourceGroups/myclustername-rg/providers/Microsoft.Compute/galleries/gallery_myclustername_n6n4r/images/myclustername-gen2/versions/latest sku: "" version: "" kind: AzureMachineProviderSpec location: centralus managedIdentity: myclustername-identity metadata: creationTimestamp: null networkResourceGroup: myclustername-rg osDisk: diskSettings: {} diskSizeGB: 128 managedDisk: storageAccountType: Premium_LRS osType: Linux publicIP: false publicLoadBalancer: myclustername resourceGroup: myclustername-rg spotVMOptions: {} subnet: myclustername-worker-subnet userDataSecret: name: worker-user-data vmSize: Standard_D4s_v3 vnet: myclustername-vnet zone: "1" status: availableReplicas: 1 fullyLabeledReplicas: 1 observedGeneration: 1 readyReplicas: 1 replicas: 1
Faites une copie du fichier
machineset-azure.yaml
en exécutant la commande suivante :$ cp machineset-azure.yaml machineset-azure-gpu.yaml
Mettez à jour les champs suivants dans
machineset-azure-gpu.yaml
:-
Remplacer
.metadata.name
par un nom contenantgpu
. -
Modifier
.spec.selector.matchLabels["machine.openshift.io/cluster-api-machineset"]
pour qu'il corresponde au nouveau nom .metadata. -
Modifier
.spec.template.metadata.labels["machine.openshift.io/cluster-api-machineset"]
pour qu'il corresponde au nouveau.metadata.name
. Remplacer
.spec.template.spec.providerSpec.value.vmSize
parStandard_NC4as_T4_v3
.Exemple de fichier
machineset-azure-gpu.yaml
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: annotations: machine.openshift.io/GPU: "1" machine.openshift.io/memoryMb: "28672" machine.openshift.io/vCPU: "4" creationTimestamp: "2023-02-06T20:27:12Z" generation: 1 labels: machine.openshift.io/cluster-api-cluster: myclustername machine.openshift.io/cluster-api-machine-role: worker machine.openshift.io/cluster-api-machine-type: worker name: myclustername-nc4ast4-gpu-worker-centralus1 namespace: openshift-machine-api resourceVersion: "166285" uid: 4eedce7f-6a57-4abe-b529-031140f02ffa spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: myclustername machine.openshift.io/cluster-api-machineset: myclustername-nc4ast4-gpu-worker-centralus1 template: metadata: labels: machine.openshift.io/cluster-api-cluster: myclustername machine.openshift.io/cluster-api-machine-role: worker machine.openshift.io/cluster-api-machine-type: worker machine.openshift.io/cluster-api-machineset: myclustername-nc4ast4-gpu-worker-centralus1 spec: lifecycleHooks: {} metadata: {} providerSpec: value: acceleratedNetworking: true apiVersion: machine.openshift.io/v1beta1 credentialsSecret: name: azure-cloud-credentials namespace: openshift-machine-api diagnostics: {} image: offer: "" publisher: "" resourceID: /resourceGroups/myclustername-rg/providers/Microsoft.Compute/galleries/gallery_myclustername_n6n4r/images/myclustername-gen2/versions/latest sku: "" version: "" kind: AzureMachineProviderSpec location: centralus managedIdentity: myclustername-identity metadata: creationTimestamp: null networkResourceGroup: myclustername-rg osDisk: diskSettings: {} diskSizeGB: 128 managedDisk: storageAccountType: Premium_LRS osType: Linux publicIP: false publicLoadBalancer: myclustername resourceGroup: myclustername-rg spotVMOptions: {} subnet: myclustername-worker-subnet userDataSecret: name: worker-user-data vmSize: Standard_NC4as_T4_v3 vnet: myclustername-vnet zone: "1" status: availableReplicas: 1 fullyLabeledReplicas: 1 observedGeneration: 1 readyReplicas: 1 replicas: 1
-
Remplacer
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 :$ diff machineset-azure.yaml machineset-azure-gpu.yaml
Exemple de sortie
14c14 < name: myclustername-worker-centralus1 --- > name: myclustername-nc4ast4-gpu-worker-centralus1 23c23 < machine.openshift.io/cluster-api-machineset: myclustername-worker-centralus1 --- > machine.openshift.io/cluster-api-machineset: myclustername-nc4ast4-gpu-worker-centralus1 30c30 < machine.openshift.io/cluster-api-machineset: myclustername-worker-centralus1 --- > machine.openshift.io/cluster-api-machineset: myclustername-nc4ast4-gpu-worker-centralus1 67c67 < vmSize: Standard_D4s_v3 --- > vmSize: Standard_NC4as_T4_v3
Créez l'ensemble de machines de calcul compatibles avec le GPU à partir du fichier de définition en exécutant la commande suivante :
$ oc create -f machineset-azure-gpu.yaml
Exemple de sortie
machineset.machine.openshift.io/myclustername-nc4ast4-gpu-worker-centralus1 created
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 Azure. Le programme d'installation équilibre automatiquement la charge des machines de calcul entre les zones de disponibilité.$ oc get machineset -n openshift-machine-api
Exemple de sortie
NAME DESIRED CURRENT READY AVAILABLE AGE clustername-n6n4r-nc4ast4-gpu-worker-centralus1 1 1 1 1 122m clustername-n6n4r-worker-centralus1 1 1 1 1 8h clustername-n6n4r-worker-centralus2 1 1 1 1 8h clustername-n6n4r-worker-centralus3 1 1 1 1 8h
Affichez les machines qui existent dans l'espace de noms
openshift-machine-api
en exécutant la commande suivante. Vous ne pouvez configurer qu'une machine de calcul par ensemble, mais vous pouvez faire évoluer un ensemble de machines de calcul pour ajouter un nœud dans une région et une zone particulières.$ oc get machines -n openshift-machine-api
Exemple de sortie
NAME PHASE TYPE REGION ZONE AGE myclustername-master-0 Running Standard_D8s_v3 centralus 2 6h40m myclustername-master-1 Running Standard_D8s_v3 centralus 1 6h40m myclustername-master-2 Running Standard_D8s_v3 centralus 3 6h40m myclustername-nc4ast4-gpu-worker-centralus1-w9bqn Running centralus 1 21m myclustername-worker-centralus1-rbh6b Running Standard_D4s_v3 centralus 1 6h38m myclustername-worker-centralus2-dbz7w Running Standard_D4s_v3 centralus 2 6h38m myclustername-worker-centralus3-p9b8c Running Standard_D4s_v3 centralus 3 6h38m
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 Azure et un rôle OpenShift Container Platform spécifiques.
$ oc get nodes
Exemple de sortie
NAME STATUS ROLES AGE VERSION myclustername-master-0 Ready control-plane,master 6h39m v1.25.4+a34b9e9 myclustername-master-1 Ready control-plane,master 6h41m v1.25.4+a34b9e9 myclustername-master-2 Ready control-plane,master 6h39m v1.25.4+a34b9e9 myclustername-nc4ast4-gpu-worker-centralus1-w9bqn Ready worker 14m v1.25.4+a34b9e9 myclustername-worker-centralus1-rbh6b Ready worker 6h29m v1.25.4+a34b9e9 myclustername-worker-centralus2-dbz7w Ready worker 6h29m v1.25.4+a34b9e9 myclustername-worker-centralus3-p9b8c Ready worker 6h31m v1.25.4+a34b9e9
Afficher la liste des ensembles de machines de calcul :
$ oc get machineset -n openshift-machine-api
Exemple de sortie
NAME DESIRED CURRENT READY AVAILABLE AGE myclustername-worker-centralus1 1 1 1 1 8h myclustername-worker-centralus2 1 1 1 1 8h myclustername-worker-centralus3 1 1 1 1 8h
Créez l'ensemble de machines de calcul compatibles avec le GPU à partir du fichier de définition en exécutant la commande suivante :
$ oc create -f machineset-azure-gpu.yaml
Afficher la liste des ensembles de machines de calcul :
oc get machineset -n openshift-machine-api
Exemple de sortie
NAME DESIRED CURRENT READY AVAILABLE AGE myclustername-nc4ast4-gpu-worker-centralus1 1 1 1 1 121m myclustername-worker-centralus1 1 1 1 1 8h myclustername-worker-centralus2 1 1 1 1 8h myclustername-worker-centralus3 1 1 1 1 8h
Vérification
Affichez le jeu de machines que vous avez créé en exécutant la commande suivante :
$ oc get machineset -n openshift-machine-api | grep gpu
Le nombre de répliques de MachineSet étant fixé à
1
, un nouvel objetMachine
est créé automatiquement.Exemple de sortie
myclustername-nc4ast4-gpu-worker-centralus1 1 1 1 1 121m
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
myclustername-nc4ast4-gpu-worker-centralus1-w9bqn Running Standard_NC4as_T4_v3 centralus 1 21m
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.3.11. 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.
Ressources complémentaires
2.3.11.1. Activation de l'Accelerated Networking sur un cluster Microsoft Azure existant
Vous pouvez activer Accelerated Networking sur Azure en ajoutant acceleratedNetworking
à votre fichier YAML machine set.
Conditions préalables
- Disposer d'un cluster Microsoft Azure existant où l'API Machine est opérationnelle.
Procédure
Ajoutez ce qui suit au champ
providerSpec
:providerSpec: value: acceleratedNetworking: true 1 vmSize: <azure-vm-size> 2
- 1
- This line enables Accelerated Networking.
- 2
- Specify an Azure VM size that includes at least four vCPUs. For information about VM sizes, see Microsoft Azure documentation.
Prochaines étapes
- Pour activer la fonctionnalité sur les nœuds en cours d'exécution, vous devez remplacer chaque machine existante. Cette opération peut être effectuée pour chaque machine individuellement, ou en réduisant les répliques à zéro, puis en les augmentant jusqu'au nombre de répliques souhaité.
Vérification
-
Sur le portail Microsoft Azure, consultez la page des paramètres Networking pour une machine approvisionnée par le jeu de machines et vérifiez que le champ
Accelerated networking
est défini surEnabled
.
Ressources complémentaires