Slide 1

Slide 1 text

Coder un controller Kubernetes c’est bien, le tester c’est mieux Cloud Est 2021 Etienne Coutaud ● 22/10/2021

Slide 2

Slide 2 text

$> whoami Etienne Coutaud ex devops engineer qui s’automatise aujourd’hui @Bordeaux Cloud Software Engineer @Artifakt Expert Kubernetes “Automate all things“ Le Cloud comme terrain de jeu CNCF Bureau des speakers Meetup CNCF Bordeaux 2 @etiennecoutaud

Slide 3

Slide 3 text

Qu’est ce qu’un controller Kubernetes ?

Slide 4

Slide 4 text

La boucle de réconciliation 1/3

Slide 5

Slide 5 text

La boucle de réconciliation 2/3

Slide 6

Slide 6 text

La boucle de réconciliation 3/3 Exemple avec le cas d’un scaling et le controller CouchBase

Slide 7

Slide 7 text

Pourquoi faire nos propres controllers chez Artifakt ? 1/2 ● Artifakt est un PaaS ● Nous fournissons des services à nos utilisateurs en s’appuyant sur les clouds publics (database, cache, compute, etc …) ● Nous décrivons les ressources que nous manipulons sous forme de CRD avec un controller associé ● La gestion de l’infrastructure est ainsi déclarative, la réconciliation fait le reste ● La logique OPS/Infra est déportée dans ce layer platform ● Point d’entrée unique l’API Kubernetes ● Bénéficie de la puissance et de la flexibilité de l’API Kubernetes ● Solution portable et agnostique du cloud provider frontend backend platform cloud provider

Slide 8

Slide 8 text

Pourquoi faire nos propres controllers chez Artifakt ? 2/2 Artifakt Kubernetes Cluster API console Artifakt custom artifakt controllers platform cloud provider front back

Slide 9

Slide 9 text

Un opérateur c’est avant tout du software donc qui dit software dit tout ce qui y est associé - CICD - Management du cycle de vie - Gestion des bugs et des incidents - Maintenabilité - ... - Tests, tests, tests

Slide 10

Slide 10 text

Notre fil rouge : demo-controller artifakt-io/demo-controller Un simple controller qui à partir d’une crd application create/update un deployment simplifié et enregistre en status la référence vers le deployment apiVersion: cloudest.artifakt.io/v1 kind: Application metadata: name: myapp namespace: default spec: imageName: nginx replicas: 1

Slide 11

Slide 11 text

La boucle de réconciliation

Slide 12

Slide 12 text

Action !

Slide 13

Slide 13 text

Les cas de tests pour le SyncHandler() 1. Le cas de la création : j’ajoute une nouvelle application 2. Le cas ou il ne se passe rien, je passe dans ma boucle et tout correspond à l’attendu 3. La différence entre le nombre de replicas de l’application et ceux du deployment 4. La différence entre le nom de l’image et celui du deployment

Slide 14

Slide 14 text

Mocker Kubernetes ? controller.SyncHandler(key)

Slide 15

Slide 15 text

Mocker Kubernetes ?

Slide 16

Slide 16 text

Kubernetes Fake

Slide 17

Slide 17 text

Les actions: élément central du testing https://pkg.go.dev/k8s.io/[email protected]/testing#Action

Slide 18

Slide 18 text

Le test est la comparaison entre les actions du fakeClient et celles que nous attendons

Slide 19

Slide 19 text

Mise en situation avec le test n°1 le test de la création d’une nouvelle ressource application

Slide 20

Slide 20 text

Mise en situation avec le test n°2 Il ne se passe rien, tout est correctement réconcilié

Slide 21

Slide 21 text

Mise en situation avec le test n°3 Le nombre de replicas entre le deployment et l’application diffère

Slide 22

Slide 22 text

Mise en situation avec le test n°4 Le nom de l’image entre le deployment et l’application diffère

Slide 23

Slide 23 text

Pour conclure et à emporter ● Les operators/controllers sont un design pattern de plus en plus utilisé ● Il existe plein de façon d’écrire un controller (language, framework etc) ● Le coeur du controller est sa boucle de réconciliation ● C’est elle qu’il faut tester en TU, le reste c’est du test d’intégration ● Maîtriser son algorithme c’est maîtriser ses cas de tests ● Le FakeClient est là pour mocker Kubernetes ● les tests sont une comparaison entre l’action exécutée par le fakeClient et celle que j’attendais ● le client go Kubernetes est vaste, on en découvre tous les jours ● Peu ou pas de littérature, il faut lire du code, plonger dans les controllers existant et s’inspirer

Slide 24

Slide 24 text

Les liens utiles ● https://github.com/artifakt-io/demo-controller ● https://github.com/kubernetes/sample-controller ● https://github.com/operator-framework/operator-sdk ● https://book.kubebuilder.io/introduction.html ● https://www.amazon.fr/Programming-Kubernetes-Developing-Cloud-native-Applic ations/dp/1492047104 ● https://www.youtube.com/watch?v=ha3LjlD6g7g ● https://medium.com/the-phi/mocking-the-kubernetes-client-in-go-for-unit-testing -ddae65c4302 ● https://www.youtube.com/watch?v=reDCJYbxtRg

Slide 25

Slide 25 text

Passez nous voir sur le stand 😃