2.8. Créer un ensemble de machines de calcul sur OpenStack


Vous pouvez créer un ensemble de machines de calcul différent pour servir un objectif spécifique dans votre cluster OpenShift Container Platform sur Red Hat OpenStack Platform (RHOSP). 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.

Important

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.8.1. Exemple de YAML pour une ressource personnalisée d'une machine de calcul sur RHOSP

Cet exemple YAML définit un ensemble de machines de calcul qui fonctionne sur Red Hat OpenStack Platform (RHOSP) et crée des nœuds qui sont é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> 4
  namespace: openshift-machine-api
spec:
  replicas: <number_of_replicas>
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> 6
  template:
    metadata:
      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> 10
    spec:
      providerSpec:
        value:
          apiVersion: openstackproviderconfig.openshift.io/v1alpha1
          cloudName: openstack
          cloudsSecret:
            name: openstack-cloud-credentials
            namespace: openshift-machine-api
          flavor: <nova_flavor>
          image: <glance_image_name_or_location>
          serverGroupID: <optional_UUID_of_server_group> 11
          kind: OpenstackProviderSpec
          networks: 12
          - filter: {}
            subnets:
            - filter:
                name: <subnet_name>
                tags: openshiftClusterID=<infrastructure_id> 13
          primarySubnet: <rhosp_subnet_UUID> 14
          securityGroups:
          - filter: {}
            name: <infrastructure_id>-worker 15
          serverMetadata:
            Name: <infrastructure_id>-worker 16
            openshiftClusterID: <infrastructure_id> 17
          tags:
          - openshiftClusterID=<infrastructure_id> 18
          trunk: true
          userDataSecret:
            name: worker-user-data 19
          availabilityZone: <optional_openstack_availability_zone>
1 5 7 13 15 16 17 18
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 3 8 9 19
Spécifiez l'étiquette de nœud à ajouter.
4 6 10
Spécifiez l'ID de l'infrastructure et l'étiquette du nœud.
11
Pour définir une stratégie de groupe de serveurs pour le jeu de machines, entrez la valeur renvoyée lors de la création d'un groupe de serveurs. Pour la plupart des déploiements, les stratégies anti-affinity ou soft-anti-affinity sont recommandées.
12
Nécessaire pour les déploiements sur plusieurs réseaux. Pour spécifier plusieurs réseaux, ajoutez une autre entrée dans le tableau des réseaux. Vous devez également inclure le réseau utilisé comme valeur primarySubnet.
14
Indiquez le sous-réseau RHOSP sur lequel vous souhaitez que les points d'extrémité des nœuds soient publiés. En général, il s'agit du même sous-réseau que celui utilisé comme valeur de machinesSubnet dans le fichier install-config.yaml.

2.8.2. Exemple de YAML pour une ressource personnalisée d'un ensemble de machines de calcul qui utilise SR-IOV sur RHOSP

Si vous avez configuré votre cluster pour la virtualisation des E/S à racine unique (SR-IOV), vous pouvez créer des ensembles de machines de calcul qui utilisent cette technologie.

Cet exemple YAML définit un ensemble de machines de calcul qui utilise les réseaux SR-IOV. Les nœuds qu'il crée sont étiquetés avec des symboles node-role.openshift.io/<node_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 node_role est l'étiquette de nœud à ajouter.

L'exemple suppose deux réseaux SR-IOV nommés "radio" et "uplink". Les réseaux sont utilisés dans les définitions de port de la liste spec.template.spec.providerSpec.value.ports.

Note

Seuls les paramètres spécifiques aux déploiements SR-IOV sont décrits dans cet exemple. Pour consulter un exemple plus général, voir "Sample YAML for a compute machine set custom resource on RHOSP".

Exemple d'un ensemble de machines de calcul utilisant les réseaux SR-IOV

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id>
    machine.openshift.io/cluster-api-machine-role: <node_role>
    machine.openshift.io/cluster-api-machine-type: <node_role>
  name: <infrastructure_id>-<node_role>
  namespace: openshift-machine-api
spec:
  replicas: <number_of_replicas>
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id>
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role>
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id>
        machine.openshift.io/cluster-api-machine-role: <node_role>
        machine.openshift.io/cluster-api-machine-type: <node_role>
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role>
    spec:
      metadata:
      providerSpec:
        value:
          apiVersion: openstackproviderconfig.openshift.io/v1alpha1
          cloudName: openstack
          cloudsSecret:
            name: openstack-cloud-credentials
            namespace: openshift-machine-api
          flavor: <nova_flavor>
          image: <glance_image_name_or_location>
          serverGroupID: <optional_UUID_of_server_group>
          kind: OpenstackProviderSpec
          networks:
            - subnets:
              - UUID: <machines_subnet_UUID>
          ports:
            - networkID: <radio_network_UUID> 1
              nameSuffix: radio
              fixedIPs:
                - subnetID: <radio_subnet_UUID> 2
              tags:
                - sriov
                - radio
              vnicType: direct 3
              portSecurity: false 4
            - networkID: <uplink_network_UUID> 5
              nameSuffix: uplink
              fixedIPs:
                - subnetID: <uplink_subnet_UUID> 6
              tags:
                - sriov
                - uplink
              vnicType: direct 7
              portSecurity: false 8
          primarySubnet: <machines_subnet_UUID>
          securityGroups:
          - filter: {}
            name: <infrastructure_id>-<node_role>
          serverMetadata:
            Name: <infrastructure_id>-<node_role>
            openshiftClusterID: <infrastructure_id>
          tags:
          - openshiftClusterID=<infrastructure_id>
          trunk: true
          userDataSecret:
            name: <node_role>-user-data
          availabilityZone: <optional_openstack_availability_zone>

1 5
Entrez un UUID de réseau pour chaque port.
2 6
Entrez un UUID de sous-réseau pour chaque port.
3 7
La valeur du paramètre vnicType doit être direct pour chaque port.
4 8
La valeur du paramètre portSecurity doit être false pour chaque port.

Vous ne pouvez pas définir de groupes de sécurité ni de paires d'adresses autorisées pour les ports lorsque la sécurité des ports est désactivée. La définition de groupes de sécurité sur l'instance applique les groupes à tous les ports qui lui sont attachés.

Important

Après avoir déployé des machines de calcul compatibles avec SR-IOV, vous devez les étiqueter en tant que telles. Par exemple, à partir d'une ligne de commande, entrez :

$ oc label node <NODE_NAME> feature.node.kubernetes.io/network-sriov.capable="true"
Note

Le trunking est activé pour les ports créés par des entrées dans les listes de réseaux et de sous-réseaux. Les noms des ports créés à partir de ces listes suivent le modèle <machine_name>-<nameSuffix>. Le champ nameSuffix est obligatoire dans les définitions de port.

Vous pouvez activer le trunking pour chaque port.

En option, vous pouvez ajouter des balises aux ports dans le cadre de leurs listes tags.

2.8.3. Exemple de YAML pour les déploiements SR-IOV où la sécurité des ports est désactivée

Pour créer des ports de virtualisation d'E/S à racine unique (SR-IOV) sur un réseau dont la sécurité des ports est désactivée, définissez un ensemble de machines de calcul qui inclut les ports en tant qu'éléments de la liste spec.template.spec.providerSpec.value.ports. Cette différence par rapport à l'ensemble de machines de calcul SR-IOV standard est due à la configuration automatique des groupes de sécurité et des paires d'adresses autorisées qui se produit pour les ports créés à l'aide des interfaces de réseau et de sous-réseau.

Les ports que vous définissez pour les sous-réseaux de machines sont nécessaires :

  • Paires d'adresses autorisées pour l'API et les ports IP virtuels d'entrée
  • Le groupe de sécurité informatique
  • Rattachement au réseau et au sous-réseau des machines
Note

Seuls les paramètres spécifiques aux déploiements SR-IOV où la sécurité des ports est désactivée sont décrits dans cet exemple. Pour consulter un exemple plus général, voir "Sample YAML for a compute machine set custom resource that uses SR-IOV on RHOSP".

Exemple d'un ensemble de machines de calcul utilisant des réseaux SR-IOV et dont la sécurité des ports est désactivée

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_id>
    machine.openshift.io/cluster-api-machine-role: <node_role>
    machine.openshift.io/cluster-api-machine-type: <node_role>
  name: <infrastructure_id>-<node_role>
  namespace: openshift-machine-api
spec:
  replicas: <number_of_replicas>
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_id>
      machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role>
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_id>
        machine.openshift.io/cluster-api-machine-role: <node_role>
        machine.openshift.io/cluster-api-machine-type: <node_role>
        machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<node_role>
    spec:
      metadata: {}
      providerSpec:
        value:
          apiVersion: openstackproviderconfig.openshift.io/v1alpha1
          cloudName: openstack
          cloudsSecret:
            name: openstack-cloud-credentials
            namespace: openshift-machine-api
          flavor: <nova_flavor>
          image: <glance_image_name_or_location>
          kind: OpenstackProviderSpec
          ports:
            - allowedAddressPairs: 1
              - ipAddress: <API_VIP_port_IP>
              - ipAddress: <ingress_VIP_port_IP>
              fixedIPs:
                - subnetID: <machines_subnet_UUID> 2
              nameSuffix: nodes
              networkID: <machines_network_UUID> 3
              securityGroups:
                  - <compute_security_group_UUID> 4
            - networkID: <SRIOV_network_UUID>
              nameSuffix: sriov
              fixedIPs:
                - subnetID: <SRIOV_subnet_UUID>
              tags:
                - sriov
              vnicType: direct
              portSecurity: False
          primarySubnet: <machines_subnet_UUID>
          serverMetadata:
            Name: <infrastructure_ID>-<node_role>
            openshiftClusterID: <infrastructure_id>
          tags:
          - openshiftClusterID=<infrastructure_id>
          trunk: false
          userDataSecret:
            name: worker-user-data

1
Spécifier les paires d'adresses autorisées pour l'API et les ports d'entrée.
2 3
Spécifiez le réseau et le sous-réseau des machines.
4
Spécifiez le groupe de sécurité des machines de calcul.
Note

Le trunking est activé pour les ports créés par des entrées dans les listes de réseaux et de sous-réseaux. Les noms des ports créés à partir de ces listes suivent le modèle <machine_name>-<nameSuffix>. Le champ nameSuffix est obligatoire dans les définitions de port.

Vous pouvez activer le trunking pour chaque port.

En option, vous pouvez ajouter des balises aux ports dans le cadre de leurs listes tags.

Si votre cluster utilise Kuryr et que le réseau RHOSP SR-IOV a désactivé la sécurité des ports, le port primaire pour les machines de calcul doit avoir :

  • La valeur du paramètre spec.template.spec.providerSpec.value.networks.portSecurityEnabled est fixée à false.
  • Pour chaque sous-réseau, la valeur du paramètre spec.template.spec.providerSpec.value.networks.subnets.portSecurityEnabled est fixée à false.
  • La valeur de spec.template.spec.providerSpec.value.securityGroups est fixée à vide : [].

Exemple de section d'un ensemble de machines de calcul pour un cluster sur Kuryr qui utilise SR-IOV et dont la sécurité des ports est désactivée

...
          networks:
            - subnets:
              - uuid: <machines_subnet_UUID>
                portSecurityEnabled: false
              portSecurityEnabled: false
          securityGroups: []
...

Dans ce cas, vous pouvez appliquer le groupe de sécurité informatique à l'interface principale de la VM après la création de la VM. Par exemple, à partir d'une ligne de commande :

$ openstack port set --enable-port-security --security-group <infrastructure_id>-<node_role> <main_port_ID>
Important

Après avoir déployé des machines de calcul compatibles avec SR-IOV, vous devez les étiqueter en tant que telles. Par exemple, à partir d'une ligne de commande, entrez :

$ oc label node <NODE_NAME> feature.node.kubernetes.io/network-sriov.capable="true"

2.8.4. 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'autorisation cluster-admin.

Procédure

  1. 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>.

  2. 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.

    1. 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

    2. 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 et infra.

      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.
  3. 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 et CURRENT correspondent. Si le jeu de machines de calcul n'est pas disponible, attendez quelques minutes et exécutez à nouveau la commande.

Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.