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.
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
ousoft-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 fichierinstall-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
.
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 êtredirect
pour chaque port. - 4 8
- La valeur du paramètre
portSecurity
doit êtrefalse
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.
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"
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
.
Ressources complémentaires
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
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
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>
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'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.