Développer un opérateur Kubernetes en Java, challenge accepted ! Stéphane PHILIPPART / @wildagsx 🦄 DevRel 🥑 - OVHcloud
Slide 2
Slide 3
Faisons connaissance 🖐 Qui utilise Kubernetes ? 🖐 Qui utilise Kubernetes en production (?pour de vrai) ? 🖐 Qui a déjà utilisé un opérateur ? 🖐 Qui a déjà développé un opérateur ? 🖐 Qui est dev ? Ops ? Les deux ?
Slide 4
Disclaimer ➡ Explications simplifiées pour que l’on parle le même langage
➡ Je ne suis pas Ops / Expert Kubernetes
➡ Je suis plutôt Dev
선인장
Slide 5
Stéphane Philippart 🏷 🥑 DeveloperRelations@OVHCloud 🦄 🏷 Co-créateur de TADx (meetups Agile, Dev, DevOps) ☕ Développeur Java et amateur de K8s
🐦 @wildagsx 🔗 https://philippart-s.github.io/blog 🐙 https://github.com/philippart-s/ 💬 https://www.linkedin.com/in/philippartstephane/ 🐻
Slide 6
Emily Morter
Slide 7
Slide 8
Slide 9
Réduire les actions manuelles
Simon Kadula
Slide 10
Slide 11
Principes de base des opérateurs Romain Vignes
Slide 12
📄 Pattern clairement définis dans Kubernetes “The Operator pattern aims to capture the key aim of a human operator who is managing a service or set of services. Human operators who look after specific applications and services have deep knowledge of how the system ought to behave, how to deploy it, and how to react if there are problems. People who run workloads on Kubernetes often like to use automation to take care of repeatable tasks. The Operator pattern captures how you can write code to automate a task beyond what Kubernetes itself provides.”
source
Slide 13
🔗 API Kubernetes ➡ Possible d’ajouter des API dans Kubernetes à celles existantes (Deployment, Service, …) ➡ Permet de modifier (étendre) le comportement de Kubernetes sans devoir modifier le code de Kubernetes ➡ Basée sur une custom ressources definition (CRDs)
source
Slide 14
🧩 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 15
🔁 Boucle de réconciliation ➡ Elément central de la définition du pattern contrôleur
“In Kubernetes, controllers are control loops that watch the state of your cluster, then make or request changes where needed. Each controller tries to move the current cluster state closer to the desired state.”
source
Slide 16
🎯 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 17
Différentes fonctionnalités d’un opérateur
source
Slide 18
☝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 19
Frameworks source
Slide 20
📦 Simplifier le développement et le packaging ➡ Plus simples de prise en main que les API ou clients ➡ Permet de se concentrer sur le code “métier” ➡ Le plus connu : Operator SDK
Slide 21
source
Slide 22
☕ Et en java ?
🔗 Java Operator SDK
Slide 23
✨ 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 24
🧩 Les différents composants
Slide 25
Quarkus SUPERSONIC / SUBATOMIC / JAVA
Slide 26
Cloud Computing
C. Dustin
Slide 27
microprofile.io
Slide 28
JakartaEE
Aeira G
Slide 29
Rapide au démarrage
Chris Liverani
Slide 30
Empreinte mémoire “raisonnable”
Fredy Jacob
Slide 31
Build first
Randy Fath
Slide 32
Faciliter le développement Fotis Fotopoulos
Slide 33
JVM & GraalVM
huffingtonpost.fr
Slide 34
Extensions
Edge2Edge Media
Slide 35
Command Line Interface
Gabriel Heinzer
Slide 36
Démos
Slide 37
👋 Hello world !! ➡ Scaffolding du projet Quarkus ➡ Création des éléments de base ➡ Création de la CRD / API ➡ Exécution en mode local / debugging ➡ Exécution en mode “développeur”
Slide 38
💊 Bienvenue dans le monde réel 👉 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é
source
Slide 39
Slide 40
Ne faites pas ça à la maison !
Jason Leung
Slide 41
Slide 42
💡Ce qu’il faut retenir ➡ Projet jeune mais actif : v4.x (plugin operator-sdk pas toujours synchronisé) ➡ Possibilité de faire quasiment tout ➡ Mode local avec le debugging et pas à pas ➡ Génération / mise à jour de la CRD ➡ Très (trop ?) orienté Quarkus ➡ Java 😍 ➡ La suite : OLM, EventSource plus simples, Correctifs, …
Timotej Nagy
Slide 43
Brian McGowan
Slide 44
Et en prod ? Keycloack Operator Apache Flink Operator Airflow Dag Operator Locust k8s operator
…
Slide 45
Slide 46
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