A presentation at Snowcamp 2023 in in Grenoble, France by Horacio Gonzalez
Un opérateur Kubernetes en Java avec Quarkus Stéphane Philippart - Horacio Gonzalez 2023-01-25
Merci à nos sponsors e toil «E « » con o l F » 2023
Qui sommes-nous ? Et qui est OVHcloud ?
Stéphane Philippart 🏷 DevRel@OVHCloud 🥑 🦄 🎉 🏷 Co-créateur de TADx (meetups Agile, Dev, DevOps) 🏷 Souvent la tête dans le cloud ☁ 🐦 @wildagsx 📝 https://philippart-s.github.io/blog 🐙 https://github.com/philippart-s/ 🌏 https://www.linkedin.com/in/philippartstephane/ ��
Horacio Gonzalez @LostInBrittany Espagnol perdu en Bretagne Flutter
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
Disclaimer ➡ Explications simplifiées pour que lʼon parle le même langage ➡ Pas des Ops / Expert Kubernetes ➡ Développeurs ��
Mais c’est quoi un opérateur Kubernetes ? Comment ils aident à maîtriser la complexité de Kubernetes
K8s aide à dompter les microservices
Mais on fait quoi des cas complexes ?
Surtout à l’échelle… Beaucoup de clusters avec énormément de déploiements
Et cela était juste notre cas Nous utilisons Kubernetes mais nous opérons aussi une plateforme Kubernetes managée
Bâtie sur notre Public Cloud basé sur Openstack
Nous avions besoin de dompter la complexité
Helm était une première réponse
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
Kubernetes c’est surtout de l’automatisation Comment automatise-t-on les opérateurs humains ?
Opérateurs Kubernetes Une version Kubernetes de l’opérateur humain
Comment construit-on des opérateurs Éléments basiques Kubernetes : Contrôleurs & Resources Customisées
Kubernetes Controllers Toujours un oeil sur les ressources
Une boucle de contrôle Surveille l’état du cluster et fait les changements pour le rapprocher de l’état souhaité
Une boucle de réconciliation Cherche à réconcilier l’état présent avec l’état souhaité
Custom Resource Definitions* On étend l’API Kubernetes
On étend l’API Kubernetes �� En définissant des nouveaux types de ressources
🧩 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)” ��
Opérateur Kubernetes Automatisation des opérations ��
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 �� ⚡ 👀
C’est quoi donc un opérateur Kubernetes ? ��
Exemple : des bases de données Des choses comme ajouter une instance à un pool, faire des backups, du sharding…
Ils encodent la connaissance dans des CRDs et des contrôleurs
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
Le modèle de capacités des opérateurs Mesurer la maturité de l’opérateur
☝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
Le Framework Opérateur Framework open source pour accélérer le développement d’un opérateur
L’Operator SDK Trois façons différentes de construire des opératurs
L’Operator SDK et le Modèle de Capacité
Mais je suis un dev Java! Puis-je coder un opérateur ? Facilement ? ��
☕ Alors en java ? �� 🔗 Java Operator SDK
✨ 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é ��
Les différents composants ��
Quarkus SUPERSONIC / SUBATOMIC / JAVA ��
Cloud Computing �� C. Dustin
�� microprofile.io
JakartaEE �� Aeira G
Rapide au démarrage �� Chris Liverani
Empreinte mémoire raisonnable �� Fredy Jacob
Build first �� Randy Fath
Faciliter le développement �� Fotis Fotopoulos
JVM & GraalVM �� huffingtonpost.fr
Extensions �� Edge2Edge Media
Command Line Interface �� Gabriel Heinzer
Pourquoi ajouter Gitpod ? Parce que nous voulons vous faciliter la vie !
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 !
Les conteneurs ont changé la donne Utiliser la même architecture sur le laptop de dev et en prod
Même pour des architectures complexes
Mais un laptop reste un laptop Ces containers demandent beaucoup de RAM et CPU
Sans parler du temps de mise en route L’installation et la configuration ne sont pas triviales…
Dans l’idéal, je voudrais un IDEaaS Integrated Development Environment as a Service
Gitpod est un IDEaaS open source Environnements de dev automatisés et éphémères sur le Web
Un IDE complet dans le navigateur Un IDE sur le Web 🌍 ● Eclipse Theia → VS Code ● Remote ● Workspaces
Il est plus qu’un IDE Un IDE n’est qu’un élément constitutif de un environnement de dev basé sur le cloud
Sans avoir besoin d’un laptop surpuissant ● Low cost ultraportable laptop ● Chromebook ● iPad / Tablette Android*
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é
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
Anatomie dʼun projet Gitpod ● Une image 🐳 Docker par défaut : gitpod/workspace-full ● Deux fichiers 📝 de configuration : .gitpod.dockerfile .gitpod.yml
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
D’autres use-cases Des autres exemples avec Gitpod
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!
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!
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.
Une plateforme prête à utiliser pour K8s https://github.com/LostInBrittany/gitpod4k8s
Codez pour les nuages, dans les nuages
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 2023. 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.
WORKSHOP
Préparons le poste de travail Mettons en oeuvre Gitpod
⚙ .gitpod.yml & .gitpod.Dockerfile .gitpod.yml .gitpod.Dockerfile
👋 Hello, World ! 🌏 With Quarkus Un projet simple avec Quarkus ��
👋 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) ��
👋 Hello, World ! 🌏 With Quarkus �� 🔗 https://github.com/k8s-operator-workshop/hello-world-from-quarkus 🔗 https://github.com/k8s-operator-workshop/hello-world-from-quarkus-solution
👋 Operator Hello World ! 🌏 Notre premier opérateur Kubernetes ��
⚙ Quelques configurations utiles 🔗 see: https://github.com/k8s-operator-workshop/workshop-instructions/blob/main/attendees-instructions.md
👋 Operator Hello World ! 🌏 ��
👋 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 reconciler 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 🔗 https://github.com/k8s-operator-workshop/workshop-operator-hello-world-solution ��
🐙 GitHub release watcher 🔀 Un opérateur qui fait vraiment quelque chose ��
🐙 GitHub release watcher 🔀 ��
🐙 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 🔗 https://github.com/k8s-operator-workshop/workshop-operator-release-detector-solution ��
Questions / Feedbacks https://ovh.to/4tu9xGG
Kahoot -> livre Aurélie + dʼautres pour les 3 premiers + vouchers
🔗 Liens - https://github.com/k8s-operator-workshop https://gitpod.io/ https://javaoperatorsdk.io/ https://sdk.operatorframework.io/ https://kubernetes.io/docs/concepts/extend-kuber netes/api-extension/custom-resources/ - https://kubernetes.io/docs/concepts/architecture/ controller/ - https://quarkiverse.github.io/quarkiverse-docs/qu arkus-operator-sdk/dev/index.html
Currently when we think of Infrastructure as Code (IaC), one tool seems to stand out and has become a de-facto standard: Terraform.
With Terraform you can easily build, edit and version your whole infrastructure by using Terraform builtin providers or custom ones.
But sometimes there is no provider for the infrastructure you intend to use, not even the lone no-star repository in a lost corner of the internet, only a custom REST API. What can you do? Going back to manual operations? Create your own scripts?
In this talk Horacio and Aurélie will show you, step by step, how to go from an infrastructure API to a fully functional yet light Terraform provider. By taking as base a REST API, they will explain the basics of provider creation, give some pointers on how to do a simple yet efficient provider architecture and show you the code and the provider in action.
Will they succeed in this new mission?