Aller au contenu principal

Démarrage rapide

Prérequis pour suivre ce tutoriel

Afin de profiter des fonctionnalités de gestion de cluster OpenShift depuis la plateforme NumSpot, les prérequis sont:

  • Un compte utilisateur NumSpot détenant le rôle OpenShift Admin.
  • Ce compte doit être rattaché à un espace NumSpot.

Créer mon premier cluster

Pour commencer, nous allons créer un cluster OpenShift en utilisant l'API en HTTP de NumSpot. Nous utiliserons la région standard (eu-west-2) pour limiter les coûts de PoC.

Notre premier cluster contiendra un seul Nodepool qui se composera de 2 nodes de type SMALL (associé à des caractéristiques spécifiques), et on l'appelera np1 pour l'identifier.

Pour plus de facilité, nous choisirons la dernière version disponible de l'offre OpenShift de NumSpot que l'on récupère depuis la documentation sur les versions disponibles.

Et enfin, nous utiliserons le CIDR 172.1.1.0/24 ce qui donne la possibilité d'avoir 252 nodes, suffisant dans notre cas (voir: comment choisir le CIDR à la création d'un cluster).

Exemple de requête: Création d'un cluster Openshift
export REGION="eu-west-2"
export SPACE_ID="8e9cbfeb-573d-4f77-97c2-b7301f38bd2f"
export ACCESS_TOKEN="myaccesstoken"

curl -X POST https://api.$REGION.numspot.com/openshift/spaces/$SPACE_ID/clusters \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"name": "my-first-cluster",
"cidr": "172.1.1.0/24",
"version": "4.15.16",
"nodepools": [
{
"name": "np1",
"nodeProfile": "SMALL",
"nodeCount": 2,
}
]
}'
| export OPERATION_ID=$(jq -r .operation.id) && export CLUSTER_ID=$(jq -r .id)
remarque

Dans la commande précédente, nous avons utilisé la commande jq pour récupérer:

  • L'identifiant de l'Operation retourné par la requête de création de cluster et le stocker dans la variable d'environnement OPERATION_ID, qui nous servira lorsqu'on voudra suivre l'exécution de la création du cluster,
  • Le CLUSTER_ID pour opérer sur le cluster tout juste créé.

La requête retournée donne les informations de l'Operation lancée, à savoir la création d'un cluster.

Exemple de réponse: Création d'un cluster Openshift
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "my-first-cluster",
"operation": {
"id": "4784f323-e98d-4d48-bf07-8fc6378a2a07",
"type": "CREATE_CLUSTER",
"status": "PENDING",
"targetLink": "space:8e9cbfeb-573d-4f77-97c2-b7301f38bd2f:cluster:3fa85f64-5717-4562-b3fc-2c963f66afa6",
"selfLink": "https://..../spaces/8e9cbfeb-573d-4f77-97c2-b7301f38bd2f/operations/4784f323-e98d-4d48-bf07-8fc6378a2a07",
...
}
}

Tracer l'Operation de création du cluster en cours

Nous pouvons vérifier notre Operation en exécutant une requête qui récupère les détails de l'Operation effectuée depuis son identifiant (que nous avons stocké plus tôt dans la variable d'environnement OPERATION_ID).

Exemple de requête: Récupérer les informations d'une Operation
curl -X GET https://api.$REGION.numspot.com/openshift/spaces/$SPACE_ID/operations/$OPERATION_ID \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Accept: application/json'
Exemple de réponse: Récupérer les informations d'une **Operation**
{
"id": "4784f323-e98d-4d48-bf07-8fc6378a2a07",
"type": "CREATE_CLUSTER",
"status": "PENDING",
"targetLink": "space:8e9cbfeb-573d-4f77-97c2-b7301f38bd2f:cluster:3fa85f64-5717-4562-b3fc-2c963f66afa6",
"selfLink": "https://..../spaces/8e9cbfeb-573d-4f77-97c2-b7301f38bd2f/operations/4784f323-e98d-4d48-bf07-8fc6378a2a07",
...
}

On peut remarquer que l'Operation contient un type qui indique l'action de l'Operation, et dans notre cas contient le type CREATE_CLUSTER qui indique que l'Operation est une création de cluster OpenShift.

Le status d'une Operation indique l'état d'avancement de celle-ci. Les valeurs possibles sont :

  • PENDING: l'Operation est en attente d'être exécutée.
  • RUNNING: indique que l'Operation est en cours d’exécution.
  • INTERRUPTED: l'Operation a été interrompue par des processus d'administration de NumSpot et peut être reprise.
  • FAILED: l'Operation a rencontré un problème technique durant l'exécution et s'est terminé.
  • DONE: lorsque l'Operation s'est terminée avec succès.

Tant que l'Operation n'est pas terminée (FAILED ou DONE), continuez à surveiller avec cette même requête. Si le status devient DONE, félicitations, vous avez enfin votre premier cluster prêt à être utilisé.

Accéder à la console web OpenShift du cluster

Une fois le cluster correctement créé, une console web OpenShift associée au cluster est délivrée. Pour récupérer l'URL, il nous faut saisir une requête pour récupérer les informations du cluster:

Exemple de requête: Récupérer les informations du cluster
curl -X GET  https://api.$REGION.numspot.com/openshift/spaces/$SPACE_ID/clusters/$CLUSTER_ID \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Content-Type: application/json'

Et cela nous retournera les informations du cluster.

Exemple de réponse: Récupérer les informations d'un cluster Openshift
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "mycluster",
"cidr": "172.1.0.0/16",
"version": "4.15",
"nodePools": [
{
"name": "np-1",
"nodeProfile": "SMALL",
"nodeCount": 2,
},
{
"name": "np-2",
"nodeProfile": "MEDIUM",
"nodeCount": 1,
"gpu": "P6"
}
],
"urls": {
"console": "string",
"api": "string"
}
}

On retrouve dans le corps de la réponse les champs urls.console et urls.api. Nous utiliserons l'URL urls.console depuis un navigateur. Cette URL permet d'accéder à une page de connexion NumSpot. Une fois connecté, nous serons redirigés vers la console Web d'Openshift. Les accès à la console web OpenShift sont basés sur le RBAC NumSpot.

Déployer mon application

Pour utiliser les fonctionnalités du cluster Openshift, un jeton d'authentification est nécessaire pour se connecter au cluster.

Accédez à la console Web d'Openshift, et cliquez sur votre nom de compte situé en haut à droite de la page qui se présente sous la forme d'un menu déroulant :

Ecran Principal

Ensuite cliquez sur Copy login command. Le lien vous redirigera sur une autre page dans laquelle figure le jeton masqué. Appuyer sur Display Token pour afficher le jeton et obtenir la liste des options possibles de commande pour se connecter au cluster OpenShift :

Informations de connexion aux API du cluster OpenShift

La commande à retenir pour accéder aux API d'OpenShift est:

Commande de connexion au cluster Openshift
oc login  --token=[token] --server=[server-url]

Où:

  • Le token est un jeton d'API d'authentification valable uniquement 24 heures.
  • Le server-url correspond à l'url du cluster Openshift.

La réponse retournée indique le nombre de projets auquel l'utilisateur connecté a droit d'accéder :

Réponse de la commande de connexion au cluster Openshift
You have access to X projects, the list has been suppressed. You can list all projects with 'oc projects'
remarque

Le jeton d'API généré par la console Web d'OpenShift a une durée de vie de 24 heures.

Créer mon premier déploiement en ligne de commande

Nous sommes directement dans un projet par défaut. Une fois connecté via la ligne de commande oc, nous allons pouvoir déployer notre première application.

Créer un fichier deployments.yaml dans lequel vous collez le contenu suivant.

Fichier: deployments.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.27.0
ports:
- containerPort: 80

Ensuite pour déployer cette ressource, il suffit d’exécuter:

Créer une ressource
oc create deployment -f deployments.yaml

La demande de création de déploiement a été validée et est en train d'être exécutée par Openshift.

Nous allons vérifier que le pod correspondant au déploiement est fonctionnel. Pour cela, il est nécessaire de connaître l'état du pod (readynessProbe et livenessProbe) depuis la ligne de commande suivante:

Retrouver la liste des pods filtrée par le label de déploiement
oc get pods -l app=nginx

Vérifions que le pod du déploiement Nginx est correctement déployé et fonctionnel. Ceci s'effectue par le positionnement des livenessProbe (nombre de droite de l'exécution en cours du conteneur) et readynessProbe (nombre de gauche permettant de savoir si le conteneur est prêt à servir des requêtes) au sein du conteneur qui est représenté par le nombre effectif sous le libellé READY :

Liste des pods Nginx dont réplica
# Montrer les lignes des pods en running
NAME READY STATUS RESTARTS AGE
nginx-56d947767c-2948z 1/1 Running 0 2d11h

Voilà, votre première application est correctement déployée et prête à recevoir des requêtes.

Augmenter le nombre de nodes d'un Nodepool

Initialement, nous avons un Nodepool qui contient seulement 2 nodes et nous allons modifier pour en avoir 4, donc 2 supplémentaires.

Rappelons-nous que nous avons nommé le premier Nodepool np1.

Exemple de requête: Éditer le nombre de **nodes**
curl -X POST https://api.$REGION.numspot.com/openshift/spaces/$SPACE_ID/clusters/nodepools/np1 \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"nodeCount": 4
}'

La requête renvoie les informations de l'Operation lancée.

Exemple de réponse: Éditer le nombre de **nodes**
{
"clusterId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"nodePoolName": "np1",
"operation": {
"id": "680d2446-dc82-4a98-8b6b-71f3f982acaa",
"type": "UPDATE_WORKER_NODES",
"status": "PENDING",
"targetLink": "space:8e9cbfeb-573d-4f77-97c2-b7301f38bd2f:cluster:3fa85f64-5717-4562-b3fc-2c963f66afa6",
"selfLink": "https://..../spaces/8e9cbfeb-573d-4f77-97c2-b7301f38bd2f/operations/680d2446-dc82-4a98-8b6b-71f3f982acaa",
...
}
}

Pour rappel, on peut suivre la bonne exécution de l'Operation d'ajout de nodes dans un nodepool à partir de l'API :

Exemple de requête: Récupérer les informations d'une Operation
curl -X GET /openshift/spaces/$SPACE_ID/operations/$OPERATION_ID \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Accept: application/json'

Créer un Nodepool avec GPU

Imaginons que notre application a besoin d'une puissance de calcul graphique (pour des besoins en IA par exemple). Nous devons disposer d'un node pouvant utiliser de la ressource graphique (GPU).
Utiliser la méthode précédente pour éditer la présence de GPU n'est pas possible. Nous devons alors créer un second Nodepool qui lui, contiendra de la ressource GPU. Nous allons utiliser la ressource GPU appelée NVIDIA P6 (Pascal), disponible dans toutes les régions.

En savoir plus sur les GPUs disponibles

Exemple de requête: Créer un Nodepool avec GPU
curl -X POST https://api.$REGION.numspot.com/openshift/spaces/$SPACE_ID/clusters/nodepools \
--header "Authorization: Bearer $ACCESS_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"name": "np-gpu1",
"nodeCount": 4,
"nodeProfile": "SMALL",
"gpu": "P6"
}'

La requête renvoie les informations de l'Operation lancée.

Exemple de réponse: Créer un Nodepool avec GPU
{
"clusterId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"nodePoolName": "np-gpu1",
"operation": {
"id": "6fb436c4-0bda-4dda-84f6-210425ba79e8",
"type": "UPDATE_WORKER_NODES",
"status": "PENDING",
"targetLink": "space:8e9cbfeb-573d-4f77-97c2-b7301f38bd2f:cluster:3fa85f64-5717-4562-b3fc-2c963f66afa6",
"selfLink": "https://..../spaces/8e9cbfeb-573d-4f77-97c2-b7301f38bd2f/operations/6fb436c4-0bda-4dda-84f6-210425ba79e8",
...
}
}

Surveiller son cluster

Pour surveiller son propre cluster OpenShift, il convient juste de se logger et d'observer toutes les informations qui sont récoltées dans la page d'accueil que voici :

Page d'accueil principale de Monitoring OpenShift