diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/counting-scheme-dry-run.png b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-dry-run.png similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/counting-scheme-dry-run.png rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-dry-run.png diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/counting-scheme-no-time.png b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-no-time.png similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/counting-scheme-no-time.png rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-no-time.png diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/counting-scheme-with-time.png b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-with-time.png similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/counting-scheme-with-time.png rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/counting-scheme-with-time.png diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/exercise-validation.png b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/exercise-validation.png similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/exercise-validation.png rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/exercise-validation.png diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/grafana-explore-opencodequest-leaderboard-hero.png b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-explore-opencodequest-leaderboard-hero.png similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/grafana-explore-opencodequest-leaderboard-hero.png rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-explore-opencodequest-leaderboard-hero.png diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/grafana-opencodequest-leaderboard-lifetime-bonus.png b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-lifetime-bonus.png similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/grafana-opencodequest-leaderboard-lifetime-bonus.png rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-lifetime-bonus.png diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/grafana-opencodequest-leaderboard-onetime-bonus.png b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-onetime-bonus.png similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/grafana-opencodequest-leaderboard-onetime-bonus.png rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard-onetime-bonus.png diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/grafana-opencodequest-leaderboard.png b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard.png similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/grafana-opencodequest-leaderboard.png rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-leaderboard.png diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-points.png b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-points.png new file mode 100644 index 0000000..136e2f0 Binary files /dev/null and b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/grafana-opencodequest-points.png differ diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/index.md b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/index.md similarity index 70% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/index.md rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/index.md index 018ba1b..e307d5e 100644 --- a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/index.md +++ b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/index.md @@ -1,9 +1,8 @@ --- -title: "Dans les coulisses de l'Open Code Quest : comment j'ai conçu et développé le Leaderboard" +title: "Dans les coulisses de l'Open Code Quest : comment j'ai conçu le Leaderboard" date: 2024-10-11T00:00:00+02:00 #lastMod: 2024-10-11T00:00:00+02:00 opensource: -- Kubernetes - Prometheus - Grafana - Octave @@ -26,7 +25,7 @@ J'ai conçu et développé le **Leaderboard** qui affiche la progression des par Facile ? Pas tant que ça car je me suis imposé une figure de style : utiliser **Prometheus** et **Grafana**. -Suivez-moi dans les coulisse de l'Open Code Quest : comment j'ai conçu et développé le Leaderboard ! +Suivez-moi dans les coulisse de l'Open Code Quest : comment j'ai conçu le Leaderboard ! @@ -373,9 +372,9 @@ La figure suivante présente les 6 composantes de requête Prometheus permettant ### *Recording Rules* Les requêtes `opencodequest_leaderboard_*` s'appuient sur la fonction **increase** et les requêtes `opencodequest_leaderboard_*_lifetime_bonus` s'appuient sur la fonction **sum_over_time**. -Ces deux fonctions Prometheus ont une contrainte : on ne peut les appliquer **que sur un *range vector***. +Ces deux fonctions Prometheus ont une contrainte : on ne peut les appliquer **que sur un *range vector*** (c'est la syntaxe `timeserie[range]` que vous avez aperçue dans les exemples ci-dessus). -Et un ***range vector* ne peut pas être le résultat d'un calcul**. +Et **un *range vector* ne peut pas être le résultat d'un calcul**. C'est à dire que la requête suivante est valide : @@ -410,203 +409,39 @@ C'est pour cette raison que vous retrouverez dans le fichier `prometheus/recordi - `opencodequest_step1` pour les requêtes `opencodequest_leaderboard_*_onetime_bonus`. - `opencodequest_step2` pour les requêtes `opencodequest_leaderboard_*_lifetime_bonus`. -Et vous verrez dans la section suivante que les *recording rules* dans une configuration **Red Hat Advanced Cluster Management** ont quelques subtilitées... +Et vous verrez dans l'article suivant que les *recording rules* dans une configuration **Red Hat Advanced Cluster Management** ont quelques subtilités... -## Observabilité dans Red Hat Advanced Cluster Management +## Création du tableau de bord Grafana -Maintenant que le principe est validé et que les requêtes ont été mises au point dans Prometheus, il est temps d'implémenter tout ça dans le module **Observabilité** de **Red Hat Advanced Cluster Management**. +### Variables -Lors de l'Open Code Quest, nous avions à notre disposition 8 clusters : +### Classement -- 1 cluster **central** -- 1 cluster pour l'intelligence artificielle -- 6 clusters répartis entre les participants (on avait prévu un cluster par table) +### Explication du classement -**Red Hat Advanced Cluster Management** est installé sur le cluster **central** et à partir de là, il contrôle l'ensemble des clusters. +### Progression des points au cours du temps -L'observabilité est un module supplémentaire (dans le sens où il n'est pas installé par défaut) de **Red Hat Advanced Cluster Management** et ce module est basé sur les composants Open Source **Prometheus**, **Thanos** et **Grafana**. +### Classement final -L'architecture du module d'observabilité, tel que décrit [dans la documentation Red Hat Advanced Cluster Management](https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.11/html/observability/observing-environments-intro#observing-environments-intro), est la suivante : +## Le jour de l'Open Code Quest -{{< attachedFigure src="redhat-acm-observability-architecture.png" title="Architecture logique de l'observabilité dans Red Hat Advanced Cluster Management 2.11 ([source](https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.11/html/observability/observing-environments-intro#observing-environments-intro))" >}} +Le jour de l'Open Code Quest, le Leaderboard a bien fonctionné et nous a permis de déterminer les 30 participants les plus rapides. +Ils sont montés sur scène pour recevoir une récompense. -**TODO** +Quant à la question qui est sur toutes les lèvres : est-ce qu'il y a eu de la baston entre super héros pour le podium ? +La réponse est un grand **OUI** ! +Et il y a eu du frisson lors de l'annonce des résultats... -### Mise en place de l'observabilité +{{< attachedFigure src="grafana-opencodequest-points.png" title="Progression des points des 74 participants lors de l'Open Code Quest." >}} -Le déployement du module d'observabilité sur le cluster **central**, se fait très simplement en suivant [la documentation](https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.11/html/observability/observing-environments-intro#enabling-observability-service) : +Observez toutes ces courbes qui se croisent, tous ces super-héros en compétition pour la première place ! -- Créer le namespace `open-cluster-management-observability`. -- Créer le *pull secret* permettant de télécharger les images sur **registry.redhat.io**. -- Créer un *bucket* S3. -- Créer la *Custom Resource Definition* `MultiClusterObservability`. +## Conclusion -Pour effectuer ces opérations, j'ai utiliser les commandes suivantes : +En conclusion, l’Open Code Quest a été une expérience aussi stimulante pour les participants que pour moi en tant qu'organisateur. +Ce projet a non seulement mis en lumière des technologies comme Quarkus, OpenShift et l’IA Granite d’IBM, mais il a également démontré à quel point des outils comme Prometheus et Grafana peuvent être utilisés de manière créative pour répondre à des problématiques bien concrètes. -```sh -AWS_ACCESS_KEY_ID="REDACTED" -AWS_SECRET_ACCESS_KEY="REDACTED" -S3_BUCKET_NAME="REDACTED" -AWS_REGION="eu-west-3" - -# Create the open-cluster-management-observability namespace -oc create namespace open-cluster-management-observability - -# Copy the pull secret from the openshift namespace -DOCKER_CONFIG_JSON=`oc extract secret/pull-secret -n openshift-config --to=-` -echo $DOCKER_CONFIG_JSON -oc create secret generic multiclusterhub-operator-pull-secret \ -   -n open-cluster-management-observability \ -   --from-literal=.dockerconfigjson="$DOCKER_CONFIG_JSON" \ -   --type=kubernetes.io/dockerconfigjson - -# Create an S3 bucket -aws s3api create-bucket --bucket "$S3_BUCKET_NAME" --create-bucket-configuration "LocationConstraint=$AWS_REGION" --region "$AWS_REGION" --output json - -# Deploy the observability add-on -oc apply -f - <}}. diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/leaderboard-simulation.gif b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/leaderboard-simulation.gif similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/leaderboard-simulation.gif rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/leaderboard-simulation.gif diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/sources/counting-scheme-no-time.m b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/sources/counting-scheme-no-time.m similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/sources/counting-scheme-no-time.m rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/sources/counting-scheme-no-time.m diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/sources/counting-scheme-with-time.m b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/sources/counting-scheme-with-time.m similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/sources/counting-scheme-with-time.m rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/sources/counting-scheme-with-time.m diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/sources/exercise-validation.m b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/sources/exercise-validation.m similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/sources/exercise-validation.m rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/sources/exercise-validation.m diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/sources/leaderboard-simulation.mkv b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/sources/leaderboard-simulation.mkv similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/sources/leaderboard-simulation.mkv rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/sources/leaderboard-simulation.mkv diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/sources/to-gif.sh b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/sources/to-gif.sh similarity index 100% rename from content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-and-developed-leaderboard/sources/to-gif.sh rename to content/french/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/sources/to-gif.sh diff --git a/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/index.md b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/index.md new file mode 100644 index 0000000..7413013 --- /dev/null +++ b/content/french/blog/behind-the-scenes-at-open-code-quest-how-i-implemented-leaderboard-with-acm/index.md @@ -0,0 +1,255 @@ +--- +title: "Dans les coulisses de l'Open Code Quest : comment j'ai implémenté le Leaderboard dans Red Hat Advanced Cluster Management" +date: 2024-10-11T00:00:00+02:00 +#lastMod: 2024-10-11T00:00:00+02:00 +opensource: +- Kubernetes +- Prometheus +- Grafana +topics: +- Observability +# Featured images for Social Media promotion (sorted from by priority) +#images: +#- counting-scheme-with-time.png +resources: +- '*.png' +- '*.svg' +- '*.gif' +--- + +Lors du {{< internalLink path="/speaking/red-hat-summit-connect-france-2024/index.md" >}}, j'ai animé un atelier pour les développeurs intitulé "**Open Code Quest**". +Dans cet atelier, les développeurs devaient coder des micro-services en utilisant Quarkus, OpenShift et un service d'Intelligence Artificielle : le modèle Granite d'IBM. +L'atelier était conçu sous la forme d'une compétition de vitesse : les premiers à valider les trois exercices ont reçu une récompense. + +J'ai conçu et développé le **Leaderboard** qui affiche la progression des participants et les départage en fonction de leur rapidité. +Facile ? +Pas tant que ça car je me suis imposé une figure de style : utiliser **Prometheus** et **Grafana**. + +Suivez-moi dans les coulisse de l'Open Code Quest : comment j'ai implémenté le Leaderboard dans **Red Hat Advanced Cluster Management** ! + + + +Cet article est la suite de {{< internalLink path="/blog/behind-the-scenes-at-open-code-quest-how-i-designed-leaderboard/index.md" >}}. +Si vous ne l'avez pas lu, je vous conseille de le lire avant pour mieux comprendre le contexte. + +## Observabilité dans Red Hat Advanced Cluster Management + +Maintenant que le principe est validé et que les requêtes ont été mises au point dans Prometheus, il est temps d'implémenter tout ça dans le module **Observabilité** de **Red Hat Advanced Cluster Management**. + +Lors de l'Open Code Quest, nous avions à notre disposition 8 clusters : + +- 1 cluster **central** +- 1 cluster pour l'intelligence artificielle +- 6 clusters répartis entre les participants (on avait prévu un cluster par table) + +**Red Hat Advanced Cluster Management** est installé sur le cluster **central** et à partir de là, il contrôle l'ensemble des clusters. + +L'observabilité est un module supplémentaire (dans le sens où il n'est pas installé par défaut) de **Red Hat Advanced Cluster Management** et ce module est basé sur les composants Open Source **Prometheus**, **Thanos** et **Grafana**. + +L'architecture du module d'observabilité, tel que décrit [dans la documentation Red Hat Advanced Cluster Management](https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.11/html/observability/observing-environments-intro#observing-environments-intro), est la suivante : + +{{< attachedFigure src="redhat-acm-observability-architecture.png" title="Architecture logique de l'observabilité dans Red Hat Advanced Cluster Management 2.11 ([source](https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.11/html/observability/observing-environments-intro#observing-environments-intro))" >}} + +**TODO** + +### Mise en place de l'observabilité + +Le déployement du module d'observabilité sur le cluster **central**, se fait très simplement en suivant [la documentation](https://docs.redhat.com/en/documentation/red_hat_advanced_cluster_management_for_kubernetes/2.11/html/observability/observing-environments-intro#enabling-observability-service) : + +- Créer le namespace `open-cluster-management-observability`. +- Créer le *pull secret* permettant de télécharger les images sur **registry.redhat.io**. +- Créer un *bucket* S3. +- Créer la *Custom Resource Definition* `MultiClusterObservability`. + +Pour effectuer ces opérations, j'ai utiliser les commandes suivantes : + +```sh +AWS_ACCESS_KEY_ID="REDACTED" +AWS_SECRET_ACCESS_KEY="REDACTED" +S3_BUCKET_NAME="REDACTED" +AWS_REGION="eu-west-3" + +# Create the open-cluster-management-observability namespace +oc create namespace open-cluster-management-observability + +# Copy the pull secret from the openshift namespace +DOCKER_CONFIG_JSON=`oc extract secret/pull-secret -n openshift-config --to=-` +echo $DOCKER_CONFIG_JSON +oc create secret generic multiclusterhub-operator-pull-secret \ +   -n open-cluster-management-observability \ +   --from-literal=.dockerconfigjson="$DOCKER_CONFIG_JSON" \ +   --type=kubernetes.io/dockerconfigjson + +# Create an S3 bucket +aws s3api create-bucket --bucket "$S3_BUCKET_NAME" --create-bucket-configuration "LocationConstraint=$AWS_REGION" --region "$AWS_REGION" --output json + +# Deploy the observability add-on +oc apply -f - <