Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Cloud Est 2021

Cloud Est 2021

Etienne Coutaud

October 21, 2021
Tweet

More Decks by Etienne Coutaud

Other Decks in Programming

Transcript

  1. Coder un controller Kubernetes c’est bien, le tester c’est mieux

    Cloud Est 2021 Etienne Coutaud • 22/10/2021
  2. $> 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
  3. 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
  4. Pourquoi faire nos propres controllers chez Artifakt ? 2/2 Artifakt

    Kubernetes Cluster API console Artifakt custom artifakt controllers platform cloud provider front back
  5. 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
  6. 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
  7. 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
  8. Mise en situation avec le test n°1 le test de

    la création d’une nouvelle ressource application
  9. Mise en situation avec le test n°2 Il ne se

    passe rien, tout est correctement réconcilié
  10. Mise en situation avec le test n°3 Le nombre de

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

    l’image entre le deployment et l’application diffère
  12. 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
  13. 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