Toi aussi apprends à développer un opérateur Kubernetes en Java avec Quarkus

A presentation at Devoxx MA in October 2022 in Agadir 80000, Morocco by Horacio Gonzalez

Slide 1

Slide 1

Un opérateur Kubernetes en Java avec Quarkus Horacio Gonzalez 2020-06-22

Slide 2

Slide 2

Qui sommes-nous ? Et qui est OVHcloud ?

Slide 3

Slide 3

Horacio Gonzalez @LostInBrittany Espagnol perdu en Bretagne Flutter

Slide 4

Slide 4

Stéphane Philippart 🏷 Junior DevRel@OVHCloud 🥑 🦄 🎉 🏷 Co-créateur de TADx (meetups Agile, Dev, DevOps) 🐦 @wildagsx 📝 https://philippart-s.github.io/blog 🐙 https://github.com/philippart-s/ 🌏 https://www.linkedin.com/in/philippartstephane/

Slide 5

Slide 5

OVHcloud Web Cloud & Telcom 30 Data Centers in 12 locations 1 Million+ Servers produced since 1999 Private Cloud 34 Points of Presence on a 20 TBPS Bandwidth Network 1.5 Million Customers across 132 countries Public Cloud 2200 Employees worldwide 3.8 Million Websites hosting Storage 115K Private Cloud VMS running 1.5 Billion Euros Invested since 2016 300K Public Cloud instances running P.U.E. 1.09 Energy efficiency indicator 380K Physical Servers running in our data centers 20+ Years in Business Disrupting since 1999 Network & Security

Slide 6

Slide 6

● présentation des opérateurs ~ 15 mins / Stef (+all) ○ présentation générale (CRD / API / Controllers) ○ zoom sur les SDK / FWK ○ Ressources existantes ■ Slides Horacio ■ Slides Stef ■ Slides Sebi ?

Slide 7

Slide 7

Disclaimer ➡ Explications simplifiées pour que lʼon parle le même langage ➡ Pas des Ops / Expert Kubernetes ➡ Développeurs

Slide 8

Slide 8

Mais c’est quoi un opérateur Kubernetes ? Comment ils aident à maîtriser la complexité de Kubernetes

Slide 9

Slide 9

K8s aide à dompter les microservices

Slide 10

Slide 10

Mais on fait quoi des cas complexes ?

Slide 11

Slide 11

Surtout à l’échelle… Lots of clusters with lots and lots of deployments

Slide 12

Slide 12

Et cela était juste notre cas Nous utilisons Kubernetes mais nous opérons aussi une plateforme Kubernetes managée

Slide 13

Slide 13

Bâtie sur notre Public Cloud basé sur Openstack

Slide 14

Slide 14

Nous avions besoin de dompter la complexité

Slide 15

Slide 15

Helm était une première réponse

Slide 16

Slide 16

Mais les chartes Helm ne font que la configuration Opérer une plateforme c’est plus que gérer les installs et les mises à jour

Slide 17

Slide 17

Kubernetes c’est surtout de l’automatisation Comment automatise-t-on les opérateurs humains ?

Slide 18

Slide 18

Opérateurs Kubernetes Une version Kubernetes de l’opérateur humain

Slide 19

Slide 19

Comment construit-on des opérateurs Éléments basiques Kubernetes : Contrôleurs & Resources Customisées

Slide 20

Slide 20

Kubernetes Controllers Toujours un oeil sur les ressources

  • Contrôleurs Kubernetes

Slide 21

Slide 21

Une boucle de contrôle Surveille l’état du cluster et fait les changements pour le rapprocher de l’état souhaité

Slide 22

Slide 22

Une boucle de réconciliation Cherche à réconcilier l’état présent avec l’état souhaité

Slide 23

Slide 23

Custom Resource Definitions* On étend l’API Kubernetes

  • Définitions de ressources customisées

Slide 24

Slide 24

On étend l’API Kubernetes En définissant des nouveaux types de ressources

Slide 25

Slide 25

Custom Resource Definition et Custom Resource ➡ Custom Resource Definition = CRD ➡ “Sorte” de schéma / classe pour les objets Kubernetes ➡ Custom Resource : CR ➡ Sorte “dʼobjet instanciant la classe (CRD)”

Slide 26

Slide 26

Opérateur Kubernetes Automatisation des opérations

Slide 27

Slide 27

Un opérateur pour les gouverner tous ➡ API + CRD (et CR) + Contrôleur ➡ Gère une et une seule application (déployée ou non dans Kubernetes) ⚡ 👀 ➡ Essaie de maintenir lʼétat de lʼapplication avec ce qui est déclaré dans la CR source

Slide 28

Slide 28

C’est quoi donc un opérateur Kubernetes ?

Slide 29

Slide 29

Exemple : des bases de données Des choses comme ajouter une instance à un pool, faire des backups, du sharding…

Slide 30

Slide 30

Ils encodent la connaissance dans des CRDs et des contrôleurs

Slide 31

Slide 31

Des contrôleurs customisés pour des ressources customisées Ils implémentent et gèrent des Custom Resources avec une logique de réconciliation customisée

Slide 32

Slide 32

Le modèle de capacités des opérateurs Mesurer la maturité de l’opérateur

Slide 33

Slide 33

☝One more thing ! ➡ Un opérateur nʼest quʼun Pod qui exécute une application ➡ Il peut donc être développé avec nʼimporte quel langage ➡ Il suffit dʼappeler les API Kubernetes ou dʼutiliser un client compatible source

Slide 34

Slide 34

Le Framework Opérateur Framework open source pour accélérer le développement d’un opérateur

Slide 35

Slide 35

L’Operator SDK Trois façons différentes de construire des opératurs

Slide 36

Slide 36

L’Operator SDK et le Modèle de Capacité

Slide 37

Slide 37

Mais je suis un dev Java! Puis-je coder un opérateur ? Facilement ?

Slide 38

Slide 38

☕ Alors en java ? 🔗 Java Operator SDK

Slide 39

Slide 39

✨ Les principales fonctionnalités du Framework ➡ Client Kubernetes Fabric 8 pour manipuler les ressources Kubernetes ➡ Création (scaffolding) du squelette applicatif pour le mode Quarkus ➡ Facilitation de la génération des CRD et du contrôleur (annotations) ➡ Gestion de la boucle de réconciliation ➡ Exécution locale avec debugger possible ➡ Intégration avec Spring Boot et Quarkus ➡ Packaging de lʼopérateur simplifié

Slide 40

Slide 40

Les différents composants

Slide 41

Slide 41

Quarkus SUPERSONIC / SUBATOMIC / JAVA

Slide 42

Slide 42

Cloud Computing C. Dustin

Slide 43

Slide 43

microprofile.io

Slide 44

Slide 44

JakartaEE Aeira G

Slide 45

Slide 45

Rapide au démarrage Chris Liverani

Slide 46

Slide 46

Empreinte mémoire raisonnable Fredy Jacob

Slide 47

Slide 47

Build first Randy Fath

Slide 48

Slide 48

Faciliter le développement Fotis Fotopoulos

Slide 49

Slide 49

JVM & GraalVM huffingtonpost.fr

Slide 50

Slide 50

Extensions Edge2Edge Media

Slide 51

Slide 51

Command Line Interface Gabriel Heinzer

Slide 52

Slide 52

Pourquoi ajouter Gitpod ? Parce que nous voulons vous faciliter la vie !

Slide 53

Slide 53

Laissez-moi vous raconter une histoire Ton prochain projet From: Boss boss@mycompany.com To: Dev dev@mycompany.com Coucou Dev ! Lundi prochain, vous commencez un nouveau projet avec Big Customer. Vous serez dans une équipe construisant un système avec une architecture distribuée, utilisant le stockage Redis & MariaDB, des applications en Go, Python et Java, un bus événementiel RabbitMQ, … Et voilà votre nouvel ordinateur portable, un bon cette fois, il dispose de 8 Go de RAM !

Slide 54

Slide 54

Les conteneurs ont changé la donne Utiliser la même architecture sur le laptop de dev et en prod

Slide 55

Slide 55

Même pour des architectures complexes

Slide 56

Slide 56

Mais un laptop reste un laptop Ces containers demandent beaucoup de RAM et CPU

Slide 57

Slide 57

Sans parler du temps de mise en route L’installation et la configuration ne sont pas triviales…

Slide 58

Slide 58

Dans l’idéal, je voudrais un IDEaaS Integrated Development Environment as a Service

Slide 59

Slide 59

Gitpod est un IDEaaS open source Environnements de dev automatisés et éphémères sur le Web

Slide 60

Slide 60

Un IDE complet dans le navigateur Un IDE sur le Web 🌍 ● Eclipse Theia → VS Code ● Remote ● Workspaces

Slide 61

Slide 61

Il est plus qu’un IDE Un IDE n’est qu’un élément constitutif de un environnement de dev basé sur le cloud

Slide 62

Slide 62

Sans avoir besoin d’un laptop surpuissant ● Low cost ultraportable laptop ● Chromebook ● iPad / Tablette Android*

  • L’expérience est encore un peu décevante dans certains cas…

Slide 63

Slide 63

Les projets Gitpod se basent sur Git Il peut se connecter sur : ● N’importe quelle version de Gitpod: ○ GitLab ○ GitHub ○ BitBucket ● Versions on-premises ou open source ○ Votre propre dépôt Git privé

Slide 64

Slide 64

Gitpod - comment y accéder ? ● Gitpod.io ou Gitpod self hosted ● À partir dʼun dépôt Git ○ Ajout de https://gitpod.io/# ● Extension navigateur ● Intégration plus poussée sur Gitlab

Slide 65

Slide 65

Anatomie dʼun projet Gitpod ● Une image 🐳 Docker par défaut : gitpod/workspace-full ● Deux fichiers 📝 de configuration : .gitpod.dockerfile .gitpod.yml

Slide 66

Slide 66

Projects & Workspaces ● Un workspace est un environnement 🐳 Docker complet ● Des workspaces multiples pour chaque projet ○ Par exemple pour des branches ou des commits spécifiques ● Les workspaces sont peuvent être partagés ● Communication possible entre workspaces

Slide 67

Slide 67

Combien ça coûte ? ● SaaS version ● Free Professional Open Source plan: no limit (public projects) ● Self hosted (K8S) Open Source (Free) et Pro (29€)

Slide 68

Slide 68

Gitpod - Codespace ? ● Open Source ● Ressources plus généreuses pour Gitpod ● Possibilité de lʼhéberger soi-même ● Gitpod est aussi utilisable avec Gitlab et Bitbucket ● Les prebuild nʼexistent pas pour CodeSpace Démo time !

Slide 69

Slide 69

D’autres use-cases Des autres exemples avec Gitpod

Slide 70

Slide 70

Préparation d’environnements d’équipe La nouvelle équipe arrive lundi De : Patron boss@mycompany.com À : Chef de projet pm@mycompany.com Salut chef de projet ! Votre équipe Shiny Project arrivera lundi prochain. Vous aurez 15 développeurs dans l’équipe, et ils doivent être productifs dès le premier jour. Un lot de 15 ordinateurs portables et 3 serveurs a été envoyé par DHL à votre bureau, veuillez vous assurer qu’ils sont installés et fonctionnent d’ici lundi matin. Passe un bon weekend!

Slide 71

Slide 71

Permettre de tester des fonctionnalités Le client X veut tester la fonctionnalité De : Patron boss@mycompany.com À : Chef de projet pm@mycompany.com Salut chef de projet ! Le client X a demandé de tester la nouvelle fonctionnalité sur laquelle travaille votre équipe. J’ai pointé vers le dépôt Git, mais ils ne sont pas intéressants pour lire du code, ils veulent le tester ! Je leur ai dit que vous leur enverriez un moyen de tester d’ici lundi. Passe un bon weekend!

Slide 72

Slide 72

Plateforme d’apprentissage Cours sur OVHcloud Managed Kubernetes De : Partenaire training@partner.com À : Horacio Gonzalez horacio.gonzalez@ovhcloud.com Salut Horacio ! Comme expliqué par téléphone, nous aimerions que vous suiviez une formation OVHcloud Managed Kubernetes pour notre organisation. Nous devons être entièrement basés sur le Web, les participants ne pourront rien installer sur leurs ordinateurs (même pas kubectl, helm ou tout autre outil). Les participants n’auront que leurs navigateurs et leurs identifiants API OVHcloud.

Slide 73

Slide 73

Une plateforme prête à utiliser pour K8s https://github.com/LostInBrittany/gitpod4k8s

Slide 74

Slide 74

Codez pour les nuages, dans les nuages

Slide 75

Slide 75

Vous avez un workshop à préparer… Félicitations Horacio De : Big Conference organization@bigconference.com À : Horacio Gonzalez horacio.gonzalez@gmail.com Salut Horacio ! Nous sommes heureux de vous annoncer que votre atelier “Toi aussi apprends à développer un opérateur Kubernetes en Java avec Quarkus” a été accepté à la Big Conference 2022. Vous aurez 20-50 participants physiquement dans la salle. L’intégration est essentielle dans cette configuration, assurez-vous que les participants puissent facilement créer un environnement de travail en quelques minutes, même avec un mauvais réseau ou des ordinateurs pas tout récents.

Slide 76

Slide 76

WORKSHOP

Slide 77

Slide 77

● partie pratique ~ 1h20 / all ○ pré-requis ■ evt gitpod ok ■ accès à un kube ok → est-ce que on (OVHcloud) on fournit un evt sandbox le temps du workshop ou autre solution ? ○ boostrap du projet ■ CLI Quarkus (en utilisant le FWK core) vs sdk-operator CLI ? ○ hello, world ! ■ prise en main de FWK ■ développement simple dʼun exemple : ● affiche hello, World <name> lors de la création dʼune CR ● affiche Goodbye <name> lors de la suppression de la CR ■ permet de voir ● création de CRD / Controlleur ● maj auto de la CRD ● mode développeur Quarkus + mode debug GitPod (VSCode) ● packaging / déploiement dans Kube ○ cas plus réel : déploiement / suppression dʼune application Quarkus sur release dans GitHub ■ pré-requi : ● une application Quarkus (https://github.com/philippart-s/hello-world-from-quarkus) ● la mettre à dispo dans une registry accessible (OVHcloud / Docker Hub) ■ gestion de la détection dʼevt : release GH

Slide 78

Slide 78

Préparons le poste de travail Mettons en oeuvre Gitpod

Slide 79

Slide 79

⚙ Quelques configurations utiles Kubeconfig : azzzsq<XXX>

Slide 80

Slide 80

🟠 Gitpod Idées de ce quʼil faut dans le workspace ● CLI : Quarkus, kubectl, kubetcx, Operator-SDK ● Softs : Java 11, Maven, k9s, Kubernetes ? (à voir si on peut pas se créer une instance chez OVHcloud pour le workshop) ● plugins : java redhat + quarkus ● …. -> Gros cluster kube chez OVHcloud avec un NS par participant avec un générateur de kubeconfig par participant

Slide 81

Slide 81

👋 Hello, World ! 🌏 With Quarkus Un projet simple avec Quarkus

Slide 82

Slide 82

👋 Hello, World ! 🌏 With Quarkus 👉 Prise en main de la CLI Quarkus pour initialiser le projet 👉 Création dʼun service “Hello, World !” 👉 Création du test unitaire 👉 Packaging 👉 Release GitHub et ajout de lʼarchive (JAR) 🔗 https://github.com/k8s-operator-workshop/hello-world-from-quarkus

Slide 83

Slide 83

👋 Hello, World ! 🌏 With Quarkus 🔗 https://github.com/k8s-operator-workshop/hello-world-from-quarkus

Slide 84

Slide 84

👋 Operator Hello World ! 🌏 Notre premier opérateur Kubernetes

Slide 85

Slide 85

👋 Operator Hello World ! 🌏

Slide 86

Slide 86

👋 Operator Hello World ! 🌏 👉 Prise en main de la CLI pour initialiser le projet 👉 Utilisation de la CLI pour créer lʼAPI / CRD 👉 Modification de la CRD (classe Java) 👉 Modification du reconcilier pour prise en compte des évènements sur la CR 👉 Tests avec création / suppression dʼune CR 🔗 https://github.com/k8s-operator-workshop/workshop-operator-hello-world

Slide 87

Slide 87

🐙 GitHub release watcher 🔀 Un opérateur qui fait vraiment quelque chose

Slide 88

Slide 88

🐙 GitHub release watcher 🔀

Slide 89

Slide 89

🐙 GitHub release watcher 🔀 👉 Création du projet 👉 Définition de la CR (Spec et Status) 👉 Création dʼun service Quarkus 👉 Gestion dʼun événement externe (méthode pooling) 👉 Packaging et déploiement dans Kubernetes 👉 Gestion de la sécurité 🔗 https://github.com/k8s-operator-workshop/workshop-operator-release-detector/tree/old-way-resources-and-pooling

Slide 90

Slide 90

More exercises / examples

Slide 91

Slide 91

Questions

Slide 92

Slide 92

Kahoot -> livre Aurélie + dʼautres pour les 3 premiers + vouchers

Slide 93

Slide 93

🔗 Liens - https://github.com/k8s-operator-workshop https://gitpod.io/ https://javaoperatorsdk.io/ https://sdk.operatorframework.io/ https://kubernetes.io/docs/concepts/extend-kubern etes/api-extension/custom-resources/ - https://kubernetes.io/docs/concepts/architecture/c ontroller/ - https://quarkiverse.github.io/quarkiverse-docs/quar kus-operator-sdk/dev/index.html