K8S & INFOGÉRANCE

Kubernetes est un orchestrateur de conteneurs open source créé par Google en 2014 , il est devenu un outil indispensable pour les applications Cloud ready, conçues pour être hébergées dans le cloud ou hybride !

Ses avantages sont les suivants :

  • Le design Cloud-Native : Kubernetes encourage l’implémentation des architectures de type microservices et distribuées, ce qui augmente l’agilité, la résilience à la panne, et la scalabilité de l’application
  • La portabilité : Kubernetes fonctionne de la même manière, en utilisant la même image et les mêmes configurations, quelque soit le cloud provider (AWSAzureGCP, etc) ou Vmware
  • L’automatisation du déploiement: Kubernetes permet de modéliser une application sous conteneurs et d’en automatiser le déploiement
  • open source : Kubernetes est un projet libre disponible bénéficiant d’une large communauté

INFOGÉRANCE ET SERVICES MANAGÉS KUBERNETES

Dans une approche d’agilité , de fiabilité et de sécurité, je propose une infogérance de plateforme Kubernetes peut import l’hébergeur même chez vous.

Je propose également une prestation d’infogérance pour offrir aux utilisateurs une souplesse totale dans leur infrastructure Kubernetes avec des services managés de manière totalement transparente.

Vous êtes propriétaire de votre plateforme! Toutes les travaux sont clairement et simplement documentés pour faciliter le transfert.

Je propose une interface Rancher2 pour tous les clusters à manager.

Services proposés :

  • Création du cluster Kubernetes chez vous ou complètement infogérer
  • Maintient en conditions opérationnelles
  • Maintenance préventive de sécurité
  • Sauvegardes de vos applications
  • Supervision du cluster Kubernetes et des applications
  • Suivi et accompagnement personnalisé sur la migration des applications avec les technologies Docker et Kubernetes

Contractez moi pour vous accompagnez:

Contactez moi

Continuous Integration, Delivery

CI

CI est la partie où le workflow doit valider chaque commit des développeurs automatiquement.

Les test unitaires et fonctionnels automatique sont valider par la machine d’intégration par exemple le CI de GitLab ou CircleCi. Une fois que les tests sont passés une build/artefact est produite et sera déployer dans l’environement de TEST.

Pour arriver à une build/artefact

  • Le code est construit à chaque commit
  • Le code est automatiquement soumis à des tests unitaires à chaque commit
  • Tout le monde a accès au rapport de construction et de test
  • Les tests sont exécutés sur une version réduite de l’environnement de production
  • Les artefacts livrables sont stockés dans un dépôt d’artefacts contrôlé par version
  • Les artefacts livrables sont automatiquement déployés dans un environnement de test après une construction réussie

Si une des étapes échoue alors le développeur responsable du commit reçoit une notification pour corriger le plus rapidement possible.

La mise en place d’une CI et l’ensemble des processus à intégrer

Les différents type de tests

  • Les tests Unitaires sont la pour test les méthodes ou les fonctions de manière
  • Les tests d’intégration sont la pour s’assurer que plusieurs composants se comportent correctement ensemble, ils sont pour les régressions fonctionnelles
  • les tests d’acceptation similaire que l’intégration mais axés sur l’activité
  • les tests interface utilisateur sont la pour s’assurer que du point de vue utilisateur les actions de l’interface fonctionnent
plus les tests sont basés sur la couche UI plus ils prennent du temps à être implémenter et maintenir, ils sont donc coûteux.

Pour adopter l’intégration continue, vous devrez exécuter vos tests sur chaque branche poussé.

Pour cela quelques questions simple:

  • où le code est-il hébergé? Restriction…
  • de quel système d’exploitation et de quelles ressources avons-nous besoin pour l’application? Dépendances…
  • de combien de ressources avons-nous besoin pour vos tests?
  • l’application est elle monolithique ou micro-service?
  • utiliser vous des conteneurs? Docker…

La couverture de Test & complexité

Il est bon de viser une couverture supérieure à 80% mais attention à ne pas confondre un pourcentage élevé de couverture avec une bonne suite de tests. Un outil de couverture de code nous aide à trouver le code non testé. La qualité de vos tests fera la différence à la fin de la journée.
Un outil comme SonarQube est là pour aider à prendre des décisions lorsque le code est complexe et non testé.

Duplication et code mort

Le code dupliqué sera le futur code mort ou le futur bug doublement corrigé ! Il est très important de vérifier votre code et de réduire les duplications maximum 5% de code dupliqué sur un gros projet ou un projet legacy est acceptable mais il faut essayer d’être en dessous de 2% pour tout projet commencer avec des métriques de code qualité.

Refactoring

Si vous êtes sur le point d’apporter des changements significatifs à votre application qui n’a pas de couverture de test suffisante, vous devriez commencer par écrire des tests d’acceptation autour des fonctionnalités qui pourraient être impactées. Cela vous fournira un filet de sécurité pour vous assurer que le comportement original n’a pas été affecté après le refactoring ou l’ajout de nouvelles fonctionnalités.

L’environment

Toute l’équipe informatique Dev/DevOps/Admin doit avoir à l’esprit de garder le même environnement partout. Le numéro de révision de tous les composants utilisés par l’application doit être le même dans Dev/Build/Test/Intégration/Prod. c’est là que les conteneurs (Docker) et les orchestrateur (Kubernetes) sont utiles.

L’état d’esprit

Si un développeur casse le workflow du CI, la réparation devient la priorité principale.

Pour écrire de bons tests, vous devrez vous assurer que les développeurs sont impliqués et on un accès à un outils d’analyse de code.

Que vous disposiez d’une base de code existante ou que vous débutiez, il est certain que des bogues surviendront dans le cadre de vos versions. Veillez à ajouter des tests lorsque vous les résolvez afin d’éviter qu’ils ne se reproduisent.

CD

Le déploiement de l’application est géré par le code. Le code décrit exactement ce dont l’application a besoin pour démarrer et s’exécuter. L’artefact et l’environnement seront les mêmes entre les systèmes Test/Intégration/Production car l’image est générée une seule fois par le CI.

Continuous Delivery

Après l’automatisation de la création et des tests unitaires et d’intégration dans le cadre de l’intégration continue, la continuous delivery automatise la publication du code validé dans un registry/repository. Aussi, pour garantir l’efficacité du processus de continuous delivery, il faut d’abord introduire le processus continuous delivery dans le pipeline de développement. La continuous delivery permet de disposer d’une base de code toujours prête à être déployée dans un environnement de production.

Dans le cadre de la continuous delivery, chaque étape (de la fusion des modifications de code jusqu’à la distribution des versions prêtes pour la production) implique l’automatisation des processus de test et de publication du code. À la fin de ce processus, l’équipe d’exploitation est en mesure de déployer facilement et rapidement une application dans un environnement de production.

Continuous Deployment

L’étape finale d’un pipeline CI/CD mature est le continuous deployment. En complément du processus de continuous delivery, qui automatise la publication d’une version prête pour la production dans un référentiel de code, le continuous deployment automatise le lancement d’une application dans un environnement de production. En l’absence de passerelle manuelle entre la production et l’étape précédente du pipeline, le déploiement continu dépend surtout de la conception de l’automatisation des processus de test.

Dans la pratique, dans le cadre du continuous deployment, une modification apportée par un développeur à une application pourrait être publiée quelques minutes seulement après la rédaction du code en question (en supposant qu’elle passe les tests automatisés). Il est ainsi beaucoup plus facile de recevoir et d’intégrer en continu les commentaires des utilisateurs. Ensemble, ces trois pratiques CI/CD réduisent les risques liés au déploiement des applications, puisqu’il est plus simple de publier des modifications par petites touches qu’en un seul bloc. Cette approche nécessite néanmoins un investissement de départ considérable, car les tests automatisés devront être rédigés de manière à s’adapter à un large éventail d’étapes de test et de lancement dans le pipeline CI/CD.

Les compétences d’un DevOps

L’ingénieur DevOps possède un rôle transversal qui exige une bonne maîtrise des étapes de développement informatique, ainsi qu’une bonne compréhension des enjeux du déploiement continu et de production. Le métier de DevOps requiert la maîtrise de compétences diverses. Tout d’abord, il faut maîtriser les compétences techniques que le métier exige. Le consultant DevOps doit ainsi :

  • savoir développer des scripts et faire de l’intégration
  • utiliser les outils de construction et de virtualisation : Docker, Kubernetes, etc
  • savoir mettre en place des chaînes d’intégration continue (CI/CD)
  • connaître l’environnement des systèmes d’exploitation : systèmes Linux, Windows
  • maîtriser les outils de tests automatisés ou de monitoring des déploiements
  • être pointilleux sur la sécurité des données et posséder d’excellentes connaissances dans les systèmes de serveur
  • travailler aussi bien sur les plateformes cloud (AWSAzureGCP, etc) et autres que sur des plateformes On-Premises

En complémentarité des compétences techniques, l’ingénieur DevOps doit avoir la capacité d’évaluer le fonctionnement des applications, de procéder à des ajustements techniques et de mesurer la performance des solutions développées.

Si la maîtrise technique est capitale, les qualités humaines du consultant ou ingénieur DevOps représentent un atout majeur dans ses relations avec les autres équipes et la hiérarchie. En plus de l’esprit de management, il doit savoir écouter les demandes du client et des équipes. Il est donc essentiel qu’il possède un bon sens relationnel pour mieux appréhender les besoins et pour échanger plus facilement :

  • il doit être capable de gérer et diriger les équipes avec lesquelles il collabore
  • il doit toujours posséder un certain recul par rapport au projet pour le mener à bien et respecter les objectifs fixés
  • il doit être capable de formuler les demandes dans le langage technique
  • il doit être capable de fédérer tous les participants afin de développer une solution personnalisée et cohérente

Chaque ingénieur DevOps ne maîtrise pas tous les langages de programmation, notamment les novices. Un bon ingénieur doit donc avoir la capacité de se former rapidement à des outils ou à des technologies de déploiement pour que l’entreprise réussisse sa transformation digitale.

D’ailleurs, l’entreprise qui doit recruter un ingénieur DevOps ou faire appel à un consultant DevOps va se concentrer notamment sur les pratiques DevOps. En d’autres termes, elle va porter une attention particulière aux processus de travail de l’intervenant. Ce dernier devra connaître différents fournisseurs de solution de cloud computing. Enfin, un bon ingénieur DevOps doit régulièrement faire une veille technologique pour rester à la pointe dans son domaine. Il doit être à l’affût des nouveaux langages et des nouveaux outils digitaux.